名前と説明 © 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 からエラーを生成したコンポーネントを特定し、その製品のドキュメントでコードを検索してください。