[英]Where can I find a list of all windows error codes?
在上一个问题中,我问过当我的程序返回一个像
-1073741819
好吧,现在我得到了另一个大的回报值,
-1073740777
我想知道是否有一些所有这些值的列表以及它们在某些地方的含义?
因为 Windows 错误代码系统是可扩展的,所以没有一个地方可以查找所有可能的 Windows 错误代码。 但是,您可以从以下内容开始:
ERRLOOK
工具。 如果您使用的是 Visual Studio,请先尝试。Winerror.h
。 我已经包含了一个指向 MSDN 的链接,其中包含该头文件的内容。 或者您可以查看此页面上按编号列出的错误代码。Winerror.h
或另一个头文件来获取实际值。Include
目录中find
(如 Unix grep
)整个错误代码的十六进制值,或仅代码部分的十进制值——即低 16 位。 使用HRESULT_CODE
来提取它。 请参阅上面的 COM 错误代码的结构。通常,如果您以十六进制而不是带符号的十进制形式打印错误编号,您将获得更好的搜索结果。
例如,您的第一个错误是 -1073741819,它也可以用十六进制的 0xC0000005 表示。 这是一个“访问冲突”错误,因为谷歌会很快告诉你。
这是一个 100% 免费的在线工具“ MagnumDB ”,用于“神奇数字数据库”,其中包含从整个 Windows SDK 文件(约 6,000 个文件)解析的大约 350,000 个常量(整数、字符串、guid 等),您可以通过值和名称。 免责声明:我是在多年寻找常量、名称、指南之后写的……
这是-1073741819的结果,它映射到 3 个不同的文件中定义的 3 个不同的常量(具有相同的值和相同的含义),最常见的是STATUS_ACCESS_VIOLATION
。
而对于-1073740777这是STATUS_INVALID_CRUNTIME_PARAMETER
定义winnt.h
。
它支持整数、有符号整数、无符号整数、十六进制表示法以及原始文本搜索。 它还知道由操作定义的常量的值(如 c2 = c1 + 1)。
其中许多(但不是我认为与 COM 相关的)都在名为winerror.h的头文件中。
在(某些版本的)Visual Studio 中,在“ Tools
”菜单下,您可能会找到一个名为“ Error Lookup...
”的菜单项。
NTSTATUS *涵盖一系列设施
FACILITY_URT (0x013) *CLR 异常
FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) *多个库可以重用相同的错误代码
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32 , MSDN (0x007) *标准 WINAPI 错误代码
FACILITY_WINDOWS (0x008)
FACILITY_SECURITY (0x009)
FACILITY_CERT (0x00B)
FACILITY_INTERNET (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)
FACILITY_TPM_SOFTWARE (0x029)
FACILITY_UI (0x02A)
FACILITY_PLA (0x030)
FACILITY_FVE (0x031)
FACILITY_FWP (0x032)
FACILITY_WINRM (0x033)
FACILITY_NDIS (0x034)
FACILITY_USERMODE_HYPERVISOR (0x035)
FACILITY_USERMODE_VIRTUALIZATION (0x037)
FACILITY_USERMODE_VOLMGR (0x038)
FACILITY_BCD (0x039)
FACILITY_USERMODE_VHD (0x03A)
FACILITY_SDIAG (0x03C)
FACILITY_WEBSERVICES (0x03D)
FACILITY_WPN (0x03E)
FACILITY_MBN (0x054)
FACILITY_P2P (0x063)
FACILITY_BLUETOOTH_ATT (0x065)
FACILITY_AUDIO (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)
FACILITY_BACKUP (0x7FF)
FACILITY_NTDSB (0x800)
FACILITY_DIRECT3D10 (0x879)
FACILITY_DXGI (0x87A)
FACILITY_DXGI_DDI (0x87B)
FACILITY_DIRECT3D11 (0x87C)
FACILITY_DWRITE (0x898)
FACILITY_D2D (0x899)
FACILITY_DEFRAG (0x900)
FACILITY_ONLINE_ID (0xA02)
错误检查代码参考*aka 蓝屏
这是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();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.