The naming convention for HRESULT is «facility»_«severity»_«name», where the facility portion (and the underscore) is omitted if the facility is FACILITY_NULL or FACILITY_WIN32.

Good luck finding anybody who follows this naming convention.

Okay, fine, if you look closely you might be able to find some people who do.

COM   CO_ E_ NOTINITIALIZED
CO_ S_ MACHINENAMENOTFOUND
Structured storage   STG_ E_ SHAREVIOLATION
STG_ S_ CONVERTED
SETUPAPI   SPAPI_ E_ EXPECTED_SECTION_NAME
Data and view   DV_ E_ TYMED
DV_ E_ FORMATETC
Class factory   CLASS_ E_ NOAGGREGATION
Class registry   REGDB_ E_ CLASSNOTREG
OLEDB   DB_ E_ DELETEDROW

Actually, I guess I was a bit too pessimistic when I said nobody follows it. It seems that the majority of Windows components do follow this convention, although there are some notable exceptions.

DirectDraw   DDERR_UNSUPPORTEDFORMAT
ADSI   E_ADS_INVALID_DOMAIN_OBJECT

There are also some people who decided to confuse matters further by using the HRESULT convention for error codes returned by GetLastError()!

RPC   RPC_S_OBJECT_NOT_FOUND
SmartCard   SEC_E_SMARTCARD_CERT_REVOKED
Task scheduler   SCHED_E_SERVICE_NOT_LOCALSYSTEM
Winsock   WSA_E_NO_MORE

I apologize for the confusion this has caused.

Pre-emptive clarifying remark: The examples given in this article are merely illustrative and are not intended to be comprehensive.