Где я могу найти список всех кодов ошибок Windows?

StackOverflow https://stackoverflow.com/questions/1081276

  •  22-08-2019
  •  | 
  •  

Вопрос

В предыдущем вопросе я спросил, что это означает, когда моя программа возвращает неясное значение, например

-1073741819

Что ж, теперь я получаю еще одно большое возвращаемое значение,

-1073740777

И мне хотелось бы знать, есть ли где-нибудь какой-нибудь список всех этих значений и что они означают?

Это было полезно?

Решение

Обычно вы получите лучшие результаты поиска, если распечатаете номер ошибки в шестнадцатеричном формате, а не в десятичной форме со знаком.

Например, ваша первая ошибка — -1073741819, которая также может быть представлена ​​шестнадцатеричным числом 0xC0000005.Это ошибка «нарушение прав доступа», как быстро вам сообщит Google.

Другие советы

Поскольку система кодов ошибок Windows является расширяемой, не существует единого места для поиска всех возможных кодов ошибок Windows.Однако вы можете начать с:

  • Изучите Структура кодов ошибок COM.Иногда знание того, откуда возникла ошибка, может помочь вам определить, из какого заголовочного файла она возникла.
  • Visual Studio, по крайней мере с 2003 года, включает в себя ERRLOOK инструмент.Попробуйте сначала это, если вы используете Visual Studio.
  • Многие из кодов, с которыми вы столкнетесь, находятся в Winerror.h.Я включил ссылку на MSDN, содержащую содержимое этого файла заголовка.Или вы можете просмотреть список кодов ошибок по номерам на этот страница.
  • В идеале вы знаете, какая функция вернула код, а затем можете найти эту функцию в MSDN и просмотреть все возможные возвращаемые значения.Конечно, вам придется обратиться к Winerror.h, или другой файл заголовка, чтобы получить фактические значения.
  • Ты можешь find (как Unix grep) в Include каталог SDK платформы либо для шестнадцатеричного значения всего кода ошибки, либо для десятичного значения только раздела кода, то есть младших 16 бит.Использовать HRESULT_CODE чтобы извлечь это.См. структуру кодов ошибок COM выше.
  • Существует несколько инструментов поиска ошибок, в которые вы можете вставить значение, и он найдет его в своей базе данных и сообщит вам, что оно означает.Смотреть здесь и здесь.
  • Google.Используйте полное шестнадцатеричное значение.Иногда вы найдете очень полезную информацию или, по крайней мере, подсказки.

Ну, их здесь куча,

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

Но когда я получаю такой, как ваш пример, я просто гуглю номер.

Многие из них (но, я думаю, не те, что связаны с COM) находятся в заголовочном файле с именем winerror.h.

В (некоторых версиях) Visual Studio под разделом 'Tools', вы можете найти пункт меню с именем 'Error Lookup...'.

НТСТАТУС

НТСТАТУС *охватывает широкий спектр услуг
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)
ОБЪЕКТ_БЕЗОПАСНОСТЬ (0x009)
FACILITY_CERT (0x00B)
FACILITY_INTERNET (0x00С)
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)

Проверка ошибок

Ссылка на код проверки ошибок *он же синий экран

Вот класс в 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% бесплатный онлайн-инструмент »МагнумДБ" для «Базы данных магических чисел», которая содержит около 350 000 констант (целые числа, строки, идентификаторы и т. д.), проанализированных из всех файлов Windows SDK (~ 6 000 файлов), которые вы можете запрашивать по значению и по имени.Отказ от ответственности:Я написал это после многих лет поиска констант, имен, руководств...

Вот результат для -1073741819 который соответствует трем разным константам (с одинаковым значением и одинаковым значением), определенным в трех разных файлах, наиболее распространенным из которых является STATUS_ACCESS_VIOLATION.

enter image description here

И для -1073740777 который STATUS_INVALID_CRUNTIME_PARAMETER определено в winnt.h.

enter image description here

Он поддерживает целые числа, целые числа со знаком, целые числа без знака, шестнадцатеричную запись, а также поиск по необработанному тексту.Он также знает значения констант, которые определяются операциями (например, c2 = c1 + 1).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top