名稱與說明 © Microsoft Corporation,取自 Windows SDK 的標頭檔,以及依 CC BY 4.0 授權發佈的 Microsoft Learn 文件。Microsoft 已翻譯的說明會以中文顯示。Microsoft Learn 中的系統錯誤碼
常見錯誤
Windows Update、安裝與檔案
無法開啟或意外關閉的程式
藍色畫面(錯誤檢查)
運作方式
Windows 以四個不同系列的編號回報錯誤。Win32 代碼(如 5 或 1603)是 GetLastError 傳回的值。HRESULT(如 0x80070005)用於 COM、Windows Update 與安裝程式。NTSTATUS(如 0xC0000005)來自核心,會在程式關閉時出現。錯誤檢查代碼(如 0xD1)是藍色畫面的代碼。此工具會同時搜尋這四個系列,並顯示 Microsoft 在 Windows SDK 中發佈的名稱與文字。
許多 HRESULT 內部包含 Win32 代碼或 NTSTATUS。當值帶有 FACILITY_WIN32(如 0x80070005)時,此工具也會顯示其中包含的 Win32 代碼及其說明,而這段說明才真正解釋了錯誤。此外,它還會拆解值的各個位元:嚴重性、指出由哪個元件產生的 facility,以及該 facility 內的代碼。
範例
0x80070005FACILITY_WIN32 (7) · 5 → ERROR_ACCESS_DENIED以 0x8007 開頭的 HRESULT 在最後四位數中包裝了一個 Win32 代碼:0x0005 即 5,表示存取被拒。-10737418190xC0000005 · STATUS_ACCESS_VIOLATION事件檢視器與處理序的結束代碼通常會把該值顯示為帶正負號的十進位數。它就是代表存取違規的同一個 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 巨集:取十六進位的代碼,在前面加上 0x8007,這會將錯誤位元設為 1,並把 facility 設為 7(WIN32)。5 會變成 0x80070005,1603(即 0x643)會變成 0x80070643。要還原時,取最後四位數即可。
為什麼會出現負數?
錯誤類的 HRESULT 與 NTSTATUS 最高位元為 1,因此以帶正負號的整數顯示時會是負數。-2147024891 就是 0x80070005,-1073741819 就是 0xC0000005。此工具兩種形式都支援。
為什麼有些說明是英文?
已翻譯的說明來自 Microsoft 在 Microsoft Learn 中為 Win32 代碼發佈的內容。HRESULT、NTSTATUS,以及 Learn 尚未翻譯成中文的 Win32 代碼的文字,會依 Windows SDK 中的原樣以英文顯示。
如果找不到代碼該怎麼辦?
程式可以定義自己的代碼,尤其是 C 位元為 1 或使用非 Windows facility 的代碼,這些不會出現在 SDK 中。這時可以查看工具顯示的 facility,了解是哪個元件產生了錯誤,然後在該產品的文件中查詢此代碼。