Windows エラー コード
Windows エラー コードの意味を調べます。GetLastError の Win32 コード、0x80070005 のような HRESULT、0xC0000005 のような NTSTATUS、ブルースクリーンのコードに対応しています。値は 16 進数または 10 進数、シンボル名、メッセージの一部で指定でき、HRESULT はフィールドごとに分解して表示します。
例:

名前と説明 © Microsoft Corporation。Windows SDK のヘッダー ファイルと、CC BY 4.0 ライセンスで公開されている Microsoft Learn のドキュメントから引用しています。説明は、Microsoft が翻訳している場合は日本語で表示されます。Microsoft Learn のシステム エラー コード

よくあるエラー

Windows Update、インストール、ファイル

開かない、または終了してしまうプログラム

ブルースクリーン (バグ チェック)

仕組み

Windows は、4 つの異なる系統の番号でエラーを報告します。5 や 1603 のような Win32 コードは GetLastError が返す値です。0x80070005 のような HRESULT は、COM、Windows Update、インストーラーで使われます。0xC0000005 のような NTSTATUS はカーネル由来で、プログラムが終了したときに表示されます。0xD1 のようなバグ チェックはブルースクリーンのコードです。このツールは 4 つの系統をまとめて検索し、Microsoft が Windows SDK で公開している名前とテキストを表示します。

多くの HRESULT には、Win32 コードまたは NTSTATUS が含まれています。0x80070005 のように値に FACILITY_WIN32 が含まれる場合、このツールは含まれている Win32 コードとその説明も表示します。エラーを実際に説明しているのはこの説明です。さらに、値のビットを重大度、エラーを生成したコンポーネントを示す facility、その facility 内のコードに分解します。

例

0x80070005FACILITY_WIN32 (7) · 5 → ERROR_ACCESS_DENIED0x8007 で始まる HRESULT は、下位 4 桁に Win32 コードを格納しています。0x0005 は 5、つまりアクセス拒否です。
-10737418190xC0000005 · STATUS_ACCESS_VIOLATIONイベント ビューアーやプロセスの終了コードでは、値が符号付き 10 進数で表示されることがよくあります。これはアクセス違反の同じ NTSTATUS です。
16030x80070643 · ERROR_INSTALL_FAILUREWindows Installer はインストールに失敗すると 1603 で終了し、Windows Update は同じエラーを HRESULT 0x80070643 として報告します。

ユースケース

  • 解決策を探す前に、Windows Update、Microsoft Store、インストーラーのエラーの意味を理解する。
  • プロセスの終了コードやイベント ビューアーに表示される値を、定数名に変換する。
  • 停止コードから、ブルースクリーンのバグ チェックを特定する。
  • Windows API を使ってプログラミングするときに、ERROR_ACCESS_DENIED や E_INVALIDARG などの定数の値を調べる。
  • 翻訳されて表示されるエラーの英語の原文を確認し、フォーラムやドキュメントで検索する。

よくある質問

同じ数値が別々のエラーとして表示されるのはなぜですか?

各系統はコードを別々に採番しています。0x7B は Win32 エラー 123 (ファイル名が正しくありません) であると同時に、ブルースクリーンのバグ チェック INACCESSIBLE_BOOT_DEVICE でもあります。どちらかはコンテキストで判断します。ブルースクリーンで表示されたならバグ チェック、プログラムやコマンドが返したなら Win32 です。

Win32 コードを HRESULT に変換するにはどうすればよいですか?

HRESULT_FROM_WIN32 マクロを使います。コードを 16 進数にして先頭に 0x8007 を付けます。これでエラー ビットが 1、facility が 7 (WIN32) になります。5 は 0x80070005、1603 (0x643) は 0x80070643 になります。元に戻すには、下位 4 桁を取り出します。

負の数が表示されるのはなぜですか?

エラーの HRESULT と NTSTATUS は最上位ビットが 1 であるため、符号付き整数として表示すると負の数になります。-2147024891 は 0x80070005、-1073741819 は 0xC0000005 です。このツールはどちらの形式も受け付けます。

説明が英語で表示されるのはなぜですか?

翻訳された説明は、Microsoft が Microsoft Learn で Win32 コード向けに公開しているものです。HRESULT、NTSTATUS、および Learn で日本語に翻訳されていない Win32 コードのテキストは、Windows SDK に記載されているとおり英語で表示されます。

コードが見つからない場合はどうすればよいですか?

プログラムは独自のコードを定義できます。特に C ビットが 1 のコードや、Windows 以外の facility のコードは SDK に載っていません。その場合は、ツールが表示する facility からエラーを生成したコンポーネントを特定し、その製品のドキュメントでコードを検索してください。