20

在上一个问题中,我问过当我的程序返回一个晦涩的值时意味着什么

-1073741819

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

-1073740777

我想知道是否有所有这些值的列表以及它们在哪里意味着什么?

4

7 回答 7

14

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

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

通常,如果您以十六进制而不是带符号的十进制形式打印错误编号,您将获得更好的搜索结果。

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

于 2009-07-04T01:20:59.473 回答
9

这是一个 100% 免费的在线工具“ MagnumDB ”,用于“Magical Number Database”,其中包含从整个 Windows SDK 文件(约 6,000 个文件)解析的大约 350,000 个常量(整数、字符串、guid 等),您可以通过以下方式查询值和名称。免责声明:我是在多年搜索常量、名称、指南后编写的......

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

在此处输入图像描述

而对于-1073740777定义STATUS_INVALID_CRUNTIME_PARAMETERwinnt.h.

在此处输入图像描述

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

于 2019-08-04T06:40:02.607 回答
6

嗯,这里有一堆,

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

但是当我得到一个像你这样的例子时,我只是谷歌了这个号码。

于 2009-07-04T01:18:03.053 回答
6

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

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

于 2009-07-04T01:23:33.447 回答
6

NT状态

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) FACILITY__0x0WIN_标准错误代码
FACILITY_0x00SEC 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(0×027)
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)

错误检查

错误检查代码参考*又名蓝屏

于 2014-01-17T16:52:23.560 回答
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();
        }
    }
}
于 2014-01-16T22:30:25.257 回答