在哪里可以找到所有 Windows 错误代码的列表?
-
22-08-2019 - |
题
在上一个问题中,我问当我的程序返回一个模糊的值(例如
-1073741819
嗯,现在我又得到了一个大的回报值,
-1073740777
我想知道是否有所有这些值的列表以及它们在某个地方的含义?
解决方案
通常你会,如果你在十六进制打印出错误号,而不是符号的十进制形式得到更好的搜索结果。
例如,你的第一误差是-1073741819这也可以由0000005以十六进制表示。这是一个“访问冲突”错误的谷歌很快就会告诉你。
其他提示
因为Windows错误代码系统是可扩展的,没有单一的地方看起来所有可能的Windows的错误代码。但是,你可以开始:
- 研究所 结构COM错误代码.有时知道有什么设施的一个错误来自可以帮助你发现什么头文件,它的由来。
- Visual Studio,因为至少在2003年,包括一个
ERRLOOK
工具。尝试,首先如果你使用Visual Studio. - 许多代码,你会遭遇是在
Winerror.h
.我已经包括一个链接到MSDN包含的内容,标题的文件。或者你可以看看错误代码清单中的编号上 此 页。 - 理想的情况是你知道什么是功能返回代码,然后你就可以查找功能上MSDN和寻找所有可能的返回值。当然,你会需要参考
Winerror.h
, 或另一标题的文件,以获得实际价值。 - 你可以
find
(像Unixgrep
)在Include
目录的平台SDK for无论是六角的价值的整个错误代码,或该小数值只是代码部分--即,较低的16位。使用HRESULT_CODE
提取。看到结构的错误代码以上。 - 有几个错误的查询工具,你可以贴在一个价值和它看起来它在其数据库,并告诉你这意味着什么。看看 在这里, 和 在这里,.
- 谷歌。使用全部六角的价值。有时候你会发现很有用的信息,或至少线索。
他们中的许多(但不是我想与COM的那些)是在名为的 Winerror.h中。
在(某些版本)的Visual Studio中, 'Tools
' 菜单下,你可能会发现一个名为 'Error Lookup...
' 的菜单项。
NT状态
NT状态 *涵盖一系列设施
FACILITY_URT (0x013) *CLR 异常
H结果
FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) *多个库可以重复使用相同的错误代码
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32, 微软软件定义网络 (0x007) *标准 WINAPI 错误代码
FACILITY_WINDOWS (0x008)
设施_安全 (0x009)
设施_CERT (0x00B)
设施_互联网 (0x00C)
FACILITY_MEDIASERVER (0x00D)
FACILITY_MSMQ (0x00E)
FACILITY_SETUPAPI (0x00F)
FACILITY_SCARD (0x010)
FACILITY_COMPLUS (0x011)
FACILITY_HTTP (0x019)
FACILITY_USERMODE_FILTER_MANAGER (0x01F)
FACILITY_WINDOWSUPDATE (0x024)
FACILITY_GRAPHICS (0x026)
FACILITY_NAP (0x027)
FACILITY_INK (0x028)
设施_TPM_软件 (0x029)
设施_用户界面 (0x02A)
FACILITY_PLA 设施 (0x030)
FACILITY_FVE (0x031)
FACILITY_FWP (0x032)
FACILITY_WINRM (0x033)
设施_NDIS (0x034)
FACILITY_USERMODE_HYPERVISOR (0x035)
FACILITY_USERMODE_VIRTUALIZATION (0x037)
FACILITY_USERMODE_VOLMGR (0x038)
设施_BCD (0x039)
FACILITY_USERMODE_VHD (0x03A)
FACILITY_SDIAG (0x03C)
FACILITY_网络服务 (0x03D)
设施_WPN (0x03E)
FACILITY_MBN (0x054)
FACILITY_P2P (0x063)
FACILITY_BLUETOOTH_ATT (0x065)
设施_音频 (0x066)
FACILITY_IMAPI2 (0x0AA)
FACILITY_RTC_INTERFACE (0x0EE)
FACILITY_SIP_STATUS_CODE (0x0EF)
FACILITY_PINT_STATUS_CODE (0x0F0)
FACILITY_MAX_WDSTPTMGMT (0x110)
FACILITY_WDSMCSERVER (0x121)
FACILITY_MAX_WDSMC (0x122)
FACILITY_MAX_WDSCP (0x125)
设施_备份 (0x7FF)
FACILITY_NTDSB (0x800)
FACILITY_DIRECT3D10 (0x879)
FACILITY_DXGI (0x87A)
设施_DXGI_DDI (0x87B)
FACILITY_DIRECT3D11 (0x87C)
FACILITY_DWRITE (0x898)
FACILITY_D2D (0x899)
FACILITY_DEFRAG (0x900)
FACILITY_ONLINE_ID (0xA02)
错误检查
Bug 检查代码参考 *又名蓝屏
下面是在C#
一个类来帮助你转换的错误代码应用于string
:
public static class WinErrors
{
#region definitions
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LocalFree(IntPtr hMem);
[DllImport("kernel32.dll", SetLastError = true)]
static extern int FormatMessage(FormatMessageFlags dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer, uint nSize, IntPtr Arguments);
[Flags]
private enum FormatMessageFlags : uint
{
FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100,
FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200,
FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000,
FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000,
FORMAT_MESSAGE_FROM_HMODULE = 0x00000800,
FORMAT_MESSAGE_FROM_STRING = 0x00000400,
}
#endregion
/// <summary>
/// Gets a user friendly string message for a system error code
/// </summary>
/// <param name="errorCode">System error code</param>
/// <returns>Error string</returns>
public static string GetSystemMessage(int errorCode)
{
try
{
IntPtr lpMsgBuf = IntPtr.Zero;
int dwChars = FormatMessage(
FormatMessageFlags.FORMAT_MESSAGE_ALLOCATE_BUFFER | FormatMessageFlags.FORMAT_MESSAGE_FROM_SYSTEM | FormatMessageFlags.FORMAT_MESSAGE_IGNORE_INSERTS,
IntPtr.Zero,
(uint) errorCode,
0, // Default language
ref lpMsgBuf,
0,
IntPtr.Zero);
if (dwChars == 0)
{
// Handle the error.
int le = Marshal.GetLastWin32Error();
return "Unable to get error code string from System - Error " + le.ToString();
}
string sRet = Marshal.PtrToStringAnsi(lpMsgBuf);
// Free the buffer.
lpMsgBuf = LocalFree(lpMsgBuf);
return sRet;
}
catch (Exception e)
{
return "Unable to get error code string from System -> " + e.ToString();
}
}
}
下面是一个100%免费的在线工具“ MagnumDB ”为“神奇的数字数据库”,其中包含约350,000常量(整数,字符串的GUID等)从整体的Windows SDK文件(〜6000个文件)解析,您可以通过值和名称进行查询。免责声明:我写它经过多年的寻找常量,姓名,GUID的......
下面是结果 -1073741819 映射到3个不同的常数(在3个不同的文件时,最常见的是STATUS_ACCESS_VIOLATION
定义的相同值,并且相同的含义)。
和用于 -1073740777 这在STATUS_INVALID_CRUNTIME_PARAMETER
定义winnt.h
它支持整数,符号整数,无符号整数,十六进制符号,并且还原始文本搜索。它也知道了由操作定义的常量的值(如C2 = C1 + 1)。