私は常に WinError.h を使用します。これには、あらゆる種類の Windows エラー コードの大部分が含まれています。
注意すべき重要な指標は、コードのファシリティ部分、つまり 2 番目に重要なバイトです。つまり、0x80nnmmmm で、nn はファシリティです。これにより、どのコンポーネントがコードを生成したかがわかります。ファシリティ 7 を持つものはすべて、HRESULT として再パッケージ化された Windows エラー コードであり、下位ワードを 10 進数に変換して、WinError.h で調べる必要があります。独自のヘッダーに表示されるエラー範囲もあります (たとえば、12000 ~ 12999 は WinInet エラー コードであり、WinInet.h で調べる必要があります)。
エラー コードを調べると、シンボル名がわかります。これは、コード自体やエラー メッセージの文言よりも多くのドキュメントで見つかる可能性があります。
FACILITY_ITF (値が 4 であるため、これらの HRESULT は 0x8004 で始まります) は、使用しているインターフェイスによってエラーが定義されていることを示します。それが何を意味するのかを知るには、そのインターフェースをチェックする必要があります。
最後に、COM は拡張エラー情報を取得するためのインターフェイス IErrorInfo も提供します。エラー オブジェクトを取得するには、GetErrorInfo を呼び出します。ISupportErrorInfo を照会し、そのインターフェイスの InterfaceSupportsErrorInfo メソッドを呼び出して、呼び出したインターフェイスが実際にエラー オブジェクトを設定しているかどうかを判断する必要があります (もちろん、テンプレート コードの場合は、エラー オブジェクトが設定されている可能性があります)。