Расшифровка кодов ошибок Windows через certutil и базу NTSTATUS
Проблема анализа непонятных системных кодов ошибок
Администраторы ежедневно сталкиваются с шестнадцатеричными кодами (HEX) вида 0x80070005, 0xC0000005, 0x80240020 или отрицательными десятичными числами (например, -2147024891). Поиск таких кодов в поисковиках без знания конкретного контекста подсистемы приводит к ложным инструкциям и потере времени.
| Диапазон кодов | Архитектурный уровень | Пример кода | Что означает префикс |
|---|---|---|---|
| 0x00000001 – 0x00000400 | Win32 System Error Codes | 0x00000005 | Классические системные ошибки ядра (5 = Access Denied) |
| 0x8007xxxx | HRESULT / COM Automation | 0x80070002 | Фасет Win32: ошибка транслирована в подсистему HRESULT (2 = File Not Found) |
| 0xC000xxxx | NTSTATUS (Native API) | 0xC0000022 | Низкоуровневые коды ядра ntoskrnl (STATUS_ACCESS_DENIED) |
| 0x8024xxxx | Windows Update Agent (WUA) | 0x8024401c | Внутренние ошибки клиента обновлений Microsoft |
Универсальные способы быстрой расшифровки ошибок
- Расшифровка через штатную утилиту certutil (встроена во все версии Windows): утилита управления сертификатами содержит универсальный встроенный декодер системных ошибок:
# Синтаксис: certutil -error <Код_Ошибки> certutil -error 0x80070005 # Вывод покажет: # Код: 0x80070005 (-2147024891) # Имя: E_ACCESSDENIED # Описание: Отказано в доступе. - Расшифровка низкоуровневых кодов ядра NTSTATUS:
certutil -error 0xC0000005 # Вывод: # Код: 0xc0000005 (-1073741819) # Имя: STATUS_ACCESS_VIOLATION # Описание: Ошибка при нарушении прав доступа при чтении/записи памяти. - Использование официальной консольной утилиты Microsoft Error Lookup Tool (Err.exe): утилита из состава Windows SDK позволяет парсить коды по всем системным заголовочным файлам (winerror.h, ntstatus.h):
err.exe 0x80070002 # Выводит все совпадения по подсистемам: # as HRESULT: 0x80070002 - COR_E_FILENOTFOUND # as Win32: 0x2 - ERROR_FILE_NOT_FOUND - Декодирование через PowerShell .NET API:
[System.ComponentModel.Win32Exception]0x5
Совет: Если код ошибки начинается с 0x8007, отбросьте первые четыре цифры (0x8007) — оставшиеся цифры представляют собой классический Win32-код в HEX. Например: 0x80070002 -> код 0x2 (ERROR_FILE_NOT_FOUND).
Частые вопросы (FAQ)
Почему certutil выдает несколько значений для одного кода?
Один и тот же числовой код может использоваться в разных несвязанных библиотеках (например, в сетевом стеке, в подсистеме криптографии и в графическом драйвере DirectX).
Где скачать официальную утилиту Err.exe?
Официальная утилита Microsoft Command-line Error Lookup Tool (Err.exe) доступна для свободной загрузки в Microsoft Download Center.
Как перевести отрицательное число (например, -2147024891) в читаемый вид?
Введите его напрямую в certutil: certutil -error -2147024891, утилита автоматически конвертирует signed integer в hex 0x80070005.
Где в исходниках Windows находятся файлы с описанием всех кодов?
В заголовочных файлах Windows SDK: winerror.h (ошибки Win32/HRESULT) и ntstatus.h (статусы ядра ядра NT).