在 Win32
编程调试过程中,常常有分析 API
调用失败时返回码的需求。
我们经常使用 GetLastError()
函数获取最近一次的错误码,该函数返回的是一个 DWORD
值。
本文提到的工具/资源即可方便地将 Error_Code
转换为详细的错误描述信息。
正文
工具下载
可访问此链接进行下载:Microsoft
错误查找工具 或者 Microsoft
Error Lookup Tool
备用下载: Err_6.4.5.7z
使用方式
下载后,得到一个文件名为 Err_6.4.5.exe
的程序。
该程序需要通过终端运行,否则一闪而过看不到输出结果。
使用格式为:
1
| Err_6.4.5.exe <error code>
|
示例一:
1 2 3 4 5 6 7 8 9 10 11 12
| C:\Tools>Err_6.4.5.exe c000021a # for hex 0xc000021a / decimal -1073741286 STATUS_SYSTEM_PROCESS_TERMINATED ntstatus.h # {Fatal System Error} # The %hs system process terminated unexpectedly with a # status of 0x%08x (0x%08x 0x%08x). # The system has been shut down. # as an HRESULT: Severity: FAILURE (1), FACILITY_NULL (0x0), Code 0x21a # for hex 0x21a / decimal 538 ERROR_ABIOS_ERROR winerror.h # An error occurred in the ABIOS subsystem. # 2 matches found for "c000021a"
|
示例二:
1 2 3 4 5 6 7 8 9 10 11 12 13
| C:\Tools>Err_6.4.5.exe 7b # for hex 0x7b / decimal 123 INACCESSIBLE_BOOT_DEVICE bugcodes.h NMERR_SECURITY_BREACH_CAPTURE_DELETED netmon.h ERROR_INVALID_NAME winerror.h # The filename, directory name, or volume label syntax is # incorrect. # as an HRESULT: Severity: SUCCESS (0), FACILITY_NULL (0x0), Code 0x7b # for hex 0x7b / decimal 123 ERROR_INVALID_NAME winerror.h # The filename, directory name, or volume label syntax is # incorrect. # 4 matches found for "7b"
|
(以上示例均来自官方文档)
一些注意事项
值得注意的是,这个工具是“时效性”工具。
随着系统的更新,错误码的种类也在增加。
如果不及时更新工具,可能会出现查询不到错误码的情况。
附录
如果想直接在线查找错误代码,可以访问:Microsoft
- 调试系统错误代码
当然,也可以使用 FormatMessage
将错误码自动进行格式化,从而输出。
这里放上一个示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMATE_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
MessageBox(NULL,(LPCTSTR)lpMsgBuf,"Error",MB_OK|MB_ICONINFORMATION);
LocalFree(lpMsgBuf);
|