知識マップ: Windowsのエラーコードを読み解く ── Win32エラー・HRESULT・NTSTATUSの三層構造

記事「Windowsのエラーコードを読み解く ── Win32エラー・HRESULT・NTSTATUSの三層構造」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Windowsのエラーコードは、Win32 APIが返すWin32エラーコード、COM以降のHRESULT、カーネル層のNTSTATUSという3体系に分かれます。現在のWindowsでは、カーネルがNTSTATUSを返し、Win32サブシステムがそれをWin32エラーコードへ変換し、COM層がさらにHRESULTへ包み直す流れが日常的に起きています。読解の最重要パターンは0x8007xxxxで、これはFACILITY_WIN32にWin32エラーコードを格納したものなので、下位16bitを10進に直せば本質のコードが分かります。一方0x80004005(E_FAIL)は「未指定の失敗」でしかなく、コード自体を深掘りしても得るものはありません。0xCで始まる8桁はNTSTATUSで、Nビットを立ててHRESULT空間へ持ち込めば0xDで始まる値になり、RtlNtStatusToDosErrorを通せばWin32エラーコードに丸められます。

Windowsのエラーコード3体系の知識マップWin32エラーコード・HRESULT・NTSTATUSの3体系と、カーネルからWin32、COMへと包み直されていく変換の流れ、FacilityとHRESULT_FROM_WIN32による分解、NビットとRtlNtStatusToDosErrorによる橋渡し、.NET例外へのマップ、調査に使う変換ツールを示す図に保存されるで確認できるで確認できる利用する実装を担う内容を継承する実装を担う原因になり得る実装を担う内容を継承する実装を担うで確認できる用いるのは非推奨で確認できるで確認できる実装を担う内容を継承するで確認できるHRESULTWin32エラーコード最終エラーコード(GetLastError)err.exe(Microsoft Error Lookup Tool)certutil -errorHRESULTのFacilityHRESULT_FROM_WIN32E_FAIL(0x80004005)NTSTATUSRtlNtStatusToDosErrorNTSTATUSからWin32エラーコードへの変換HRESULTのNビット(HRESULT_FROM_NT)STATUS_ACCESS_VIOLATION(0xC0000005)Windowsイベントログバグチェックコード(STOPコード)Process Monitor(procmon.exe)WinDbgの!errorWinDbgHRESULTから.NET例外へのマップMarshal.GetLastWin32Error

概念間の関係(全18件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

HRESULT
COMの呼び出し結果を表す32ビットの符号付き整数のエラーコード体系で、.NETの例外はHRESULTに対応付けられてCOM側へ伝わる。
Win32エラーコード
Win32 APIが失敗の詳細として返す0〜15999のシステムエラーコード。ERROR_ACCESS_DENIED(5)のようなシンボル名を持つ。
HRESULT_FROM_WIN32
Win32システムエラーコードをHRESULT値へマップするwinerror.hのマクロ。下位16bitにWin32エラーコード、FacilityにFACILITY_WIN32(7)、Sビットに1を設定する。
E_FAIL(0x80004005)
FACILITY_NULLの汎用HRESULT。意味は「未指定の失敗(Unspecified failure)」で、それ以上の情報を持たない。
NTSTATUS
カーネル・デバイスドライバー・ntdllのネイティブAPIが使う32bitのステータスコード。上位2bitの重大度で成功・情報・警告・エラーを表す。
RtlNtStatusToDosError
NTSTATUSコードを対応するWin32システムエラーコードへ変換するntdllの関数。対応が定義されていない場合はERROR_MR_MID_NOT_FOUNDを返す。
HRESULTのNビット(HRESULT_FROM_NT)
HRESULTのビット28。1のとき、その値がNTSTATUSをHRESULT空間へマップしたものであることを示す。
STATUS_ACCESS_VIOLATION(0xC0000005)
不正なメモリアクセスを示すNTSTATUS。アプリケーションクラッシュ時の例外コードとして頻出する。
WinDbgの!error
Win32・Winsock・NTSTATUS・NetAPIのエラー値をデコードして表示するWinDbgの拡張コマンド。フラグに1を指定するとNTSTATUSとして解釈する。
HRESULTから.NET例外へのマップ
COM相互運用でHRESULTの失敗を受け取った.NETランタイムが、既知の値は対応する例外型に、未知の値はCOMExceptionに変換する仕組み。元の値はException.HResultに残る。
最終エラーコード(GetLastError)
スレッドごとに保持される直近のエラーコード。失敗を確認した直後にGetLastErrorで取得する。

機械可読データ

このデータセットについて

作成
合同会社小村ソフト
ライセンス
CC BY 4.0 ── 出典(合同会社小村ソフト)とライセンスへのリンクを明示し、改変した場合はその旨を示すことを条件に、再配布・改変を含めて再利用できます
最終確認日
2026-08-22 ── 収録する関係のうち、最後に出典と照合した日

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。