我在哪里可以找到所有Windows错误代码的列表?

时间:2009-07-04 01:14:32

标签: windows error-code

在之前的一个问题中,我问过当我的程序返回一个像

这样的模糊值时它意味着什么
-1073741819

好吧,现在我又得到了另一个大回报值,

-1073740777

我想知道是否有一些所有这些值的列表以及它们的含义是什么?

7 个答案:

答案 0 :(得分:13)

由于Windows错误代码系统是可扩展的,因此没有一个地方可以查找所有可能的Windows错误代码。但是,您可以从:

开始
  • 研究Structure of COM Error Codes。有时知道错误来自哪个工具可以帮助您发现它来自哪个头文件。
  • Visual Studio,至少从2003年开始,包含ERRLOOK工具。如果您使用的是Visual Studio,请首先尝试。
  • 您遇到的许多代码都在Winerror.h中。我已经包含了一个MSDN链接,其中包含该头文件的内容。或者,您可以在this页面上按编号查看错误代码列表。
  • 理想情况下,您知道返回代码的函数是什么,然后您可以在MSDN上查找函数并查看所有可能的返回值。当然,您需要引用Winerror.h或其他头文件来获取实际值。
  • 您可以在平台SDK的grep目录中find(如Unix Include)获取整个错误代码的十六进制值,或只是代码的十进制值section - 即低16位。使用HRESULT_CODE来提取它。请参阅上面的COM错误代码的结构。
  • 有一些错误查找工具,您可以粘贴一个值,并在数据库中查找它并告诉您它的含义。查看herehere
  • 谷歌。使用完整的十六进制值。有时你会发现非常有用的信息,或者至少是线索。

答案 1 :(得分:12)

一般情况下,如果以十六进制打印错误编号而不是带符号的十进制表格,您将获得更好的搜索结果。

例如,您的第一个错误是-1073741819,也可以用十六进制的0xC0000005表示。这是一个“访问冲突”错误,谷歌会很快告诉你。

答案 2 :(得分:6)

这里有很多人,

http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx

但是,当我得到一个像你的例子时,我只是Google的数字。

答案 3 :(得分:6)

其中许多(但不是我认为与COM相关的文件)位于名为winerror.h的头文件中。

在Visual Studio的(某些版本)中,在“Tools”菜单下,您可能会找到名为“Error Lookup...”的菜单项。

答案 4 :(得分:4)

NTSTATUS

NTSTATUS *涵盖了一系列设施 FACILITY_URT(0x013)* CLR例外

HRESULTS

FACILITY_NULL(0x000)
FACILITY_RPC(0x001)
FACILITY_DISPATCH(0x002)
FACILITY_RPC_STUBS(0x003)
FACILITY_USER(0x004)*多个库可以重用相同的错误代码
FACILITY_MCA_ERROR_CODE(0x005)
FACILITY_WIN32MSDN(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)

错误检查

Bug Check Code Reference *又名蓝屏

答案 5 :(得分:2)

这里是100%免费的在线工具“ MagnumDB”,用于“幻数数据库”,其中包含从整个Windows SDK文件(约6,000个文件)中解析出来的约350,000个常量(整数,字符串,guid等)。 ),您可以按值和名称进行查询。免责声明:经过多年的搜索,我写了常量,名称,公义...

这是-1073741819的结果,它映射到3个不同文件中定义的3个不同的常数(具有相同的值和相同的含义),最常见的是STATUS_ACCESS_VIOLATION

enter image description here

对于STATUS_INVALID_CRUNTIME_PARAMETER中定义的winnt.h的{​​{3}}。

-1073740777

它支持整数,有符号整数,无符号整数,十六进制表示法以及原始文本搜索。它还知道由操作定义的常量的值(例如c2 = c1 +1)。

答案 6 :(得分:1)

以下是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();
        }
    }
}