Названия и описания © Microsoft Corporation, взяты из заголовочных файлов Windows SDK и документации Microsoft Learn, которая распространяется по лицензии CC BY 4.0. Описания показываются на вашем языке, если Microsoft их перевела.Системные коды ошибок на Microsoft Learn
Частые ошибки
Windows Update, установка и файлы
Программы, которые не открываются или закрываются
Синие экраны (bug checks)
Как это работает
Windows сообщает об ошибках числами из четырёх разных семейств. Коды Win32, например 5 или 1603, возвращает GetLastError. HRESULT, например 0x80070005, используются в COM, Windows Update и установщиках. NTSTATUS, например 0xC0000005, приходят из ядра и появляются, когда программа закрывается. Bug check, например 0xD1, относятся к синим экранам. Инструмент ищет сразу по всем четырём семействам, используя имена и тексты, которые Microsoft публикует в Windows SDK.
Многие HRESULT содержат внутри код Win32 или NTSTATUS. Если у значения FACILITY_WIN32, как у 0x80070005, инструмент показывает и вложенный код Win32 с его описанием, которое на самом деле объясняет ошибку. Кроме того, он разбирает биты значения: серьёзность, facility, указывающий на создавший ошибку компонент, и код внутри этого facility.
Примеры
0x80070005FACILITY_WIN32 (7) · 5 → ERROR_ACCESS_DENIEDHRESULT, начинающийся с 0x8007, содержит код Win32 в последних четырёх цифрах: 0x0005 это 5, отказано в доступе.-10737418190xC0000005 · STATUS_ACCESS_VIOLATIONПросмотр событий и коды завершения процессов часто показывают значение как десятичное число со знаком. Это тот же NTSTATUS нарушения доступа.16030x80070643 · ERROR_INSTALL_FAILUREWindows Installer завершается с кодом 1603, когда установка не удалась, а Windows Update сообщает ту же ошибку как HRESULT 0x80070643.Сценарии использования
- Разобраться в ошибке Windows Update, Microsoft Store или установщика, прежде чем искать решение.
- Перевести код завершения процесса или значение из Просмотра событий в имя константы.
- Определить bug check синего экрана по коду остановки.
- Найти значение константы вроде ERROR_ACCESS_DENIED или E_INVALIDARG при программировании под API Windows.
- Увидеть исходный английский текст переведённой ошибки, чтобы искать его на форумах и в документации.
Часто задаваемые вопросы
Почему одно и то же число отображается как две разные ошибки?
Каждое семейство нумерует свои коды отдельно. 0x7B это ошибка Win32 123 (неверное имя файла) и одновременно bug check INACCESSIBLE_BOOT_DEVICE синего экрана. Контекст подскажет, что именно это: если код появился на синем экране, это bug check; если его вернули программа или команда, это Win32.
Как преобразовать код Win32 в HRESULT?
Макросом HRESULT_FROM_WIN32: код берётся в шестнадцатеричном виде, и перед ним ставится 0x8007, что устанавливает бит ошибки в 1, а facility WIN32 в 7. Код 5 превращается в 0x80070005, а 1603, то есть 0x643, в 0x80070643. Чтобы вернуться обратно, берутся последние четыре цифры.
Почему появляется отрицательное число?
У HRESULT и NTSTATUS с ошибкой старший бит равен 1, поэтому при отображении в виде целого числа со знаком получается отрицательное число. -2147024891 это 0x80070005, а -1073741819 это 0xC0000005. Инструмент принимает обе формы.
Почему некоторые описания на английском?
Переведённые описания это те, что Microsoft публикует на Microsoft Learn для кодов Win32. Тексты HRESULT, NTSTATUS и кодов Win32, которые Learn не перевела на ваш язык, показываются на английском, как в Windows SDK.
Что делать, если кода нет в списке?
Программы могут определять собственные коды, особенно с битом C, равным 1, или с facility не из Windows; в SDK таких кодов нет. В этом случае посмотрите на facility, который показывает инструмент, чтобы понять, какой компонент вызвал ошибку, и найдите код в документации этого продукта.