BSOD Windows: полная расшифровка STOP-кодов и алгоритм диагностики

Проблема

Синий экран смерти (Blue Screen of Death) та самая неприятность, которая вынуждает администратора отрываться от текущих задач и ломать голову над внезапной перезагрузкой сервера или рабочей станции. Экран с «печальным смайликом» и сообщением Your PC ran into a problem содержит критически важную информацию: шестнадцатеричный STOP-код, параметры ошибки и, при удачной настройке, имя проблемного модуля. Однако большинство пользователей и начинающих сисадминов эту информацию игнорируют, просто перезагружая систему в надежде, что «само пройдёт». Такой подход приводит к накоплению нерешённых проблем и повторяющимся сбоям. BSOD Windows это не приговор, а диагностический инструмент, который при правильной расшифровке позволяет быстро локализовать неисправное оборудование, сбойный драйвер или повреждённый системный файл. В этой статье мы разберём алгоритм анализа дампа памяти и научимся интерпретировать самые частые STOP-коды. Ранее я уже писал о диагностике «синего экрана» (BSOD), будет также полезно.  

Решение

Для системного подхода к диагностике BSOD необходимо настроить автоматическое сохранение аварийных дампов памяти, обеспечить доступ к инструменту отладки (WinDbg) и освоить базовые приёмы чтения вывода анализатора. Такой подход регламентирован официальной документацией Microsoft Analyze a Kernel-Mode Dump File with WinDbg и руководством по отладке Blue Screen Data. Алгоритм работает на всех поддерживаемых версиях Windows 10 и 11, а также на Windows Server 2016/2019/2022, и не требует переустановки системы.

Пошаговая инструкция

Шаг 1. Настройка сохранения дампов памяти

По умолчанию Windows может автоматически перезагружаться после BSOD, не оставляя следа для анализа. Первым делом проверяем и настраиваем политику записи дампов.

  1. Нажмите Win + R, введите sysdm.cpl и нажмите Enter.
  2. Перейдите на вкладку Дополнительно (Advanced), в разделе Загрузка и восстановление (Startup and Recovery) нажмите Параметры (Settings).
  3. В блоке Отказ системы (System failure):
    • Убедитесь, что стоит галочка Записать событие в системный журнал.
    • Снимите галочку Автоматически выполнять перезагрузку, чтобы успеть прочитать STOP-код на экране.
    • В выпадающем списке Запись отладочной информации выберите Автоматический дамп памяти (Automatic memory dump) или Активный дамп памяти (Active memory dump) для современных систем. Для серверов с большим объёмом ОЗУ можно оставить Дамп памяти ядра (Kernel memory dump).
    • Убедитесь, что путь к файлу дампа — %SystemRoot%\MEMORY.DMP.
  4. Для углублённого анализа включите запись малого дампа (Minidump): установите переключатель в Малый дамп памяти (256 КБ) и укажите директорию, например, %SystemRoot%\Minidump. Малые дампы занимают минимум места и пишутся при каждом сбое, тогда как полный дамп перезаписывается.
  5. Нажмите ОК и перезагрузите компьютер, если система этого попросит.

Дополнительные сведения о типах дампов приведены в статье Varieties of Kernel-Mode Dump Files.

Шаг 2. Установка инструментов отладки (WinDbg)

WinDbg бесплатный отладчик от Microsoft, распространяемый через Windows SDK.

  1. Скачайте установщик Windows SDK с официального сайта Windows SDK.
  2. Запустите winsdksetup.exe и на этапе выбора компонентов оставьте только Debugging Tools for Windows, снимите остальные галочки.
  3. После установки откройте WinDbg от имени администратора (через меню «Пуск»).

Альтернативно можно использовать WinDbg Preview из Microsoft Store, но классическая версия из SDK предоставляет максимальный набор команд.

Шаг 3. Открытие и анализ дампа памяти

  1. Запустите WinDbg, нажмите Ctrl + D или выберите File → Open Crash Dump.
  2. Укажите путь к файлу MEMORY.DMP в папке C:\Windows или к последнему минидампу из C:\Windows\Minidump (рекомендуется брать самый свежий по дате).
  3. Дождитесь загрузки дампа и автоматического выполнения начальных команд. Вы увидите строку типа:textLoading Dump File [C:\Windows\MEMORY.DMP] Kernel Bitmap Dump File: Kernel address space is available
  4. В нижней панели команд введите центральную команду анализа:text!analyze -vКлюч -v (verbose) заставляет WinDbg выдать максимально подробный отчёт.

Шаг 4. Интерпретация вывода !analyze -v

Отчёт содержит несколько ключевых секций, которые следует читать сверху вниз.

4.1. Первичный STOP-код и параметры

Первая строка после BugCheck сообщает шестнадцатеричный код ошибки, например:

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

В скобках указан код 0x000000D1. Запоминаем его.

4.2. Сбойный модуль

Ищем строку Probably caused by: или MODULE_NAME:. Пример:

Probably caused by : nvlddmkm.sys ( nvlddmkm+2a1c4 )

Имя файла (nvlddmkm.sys) указывает на драйвер видеокарты NVIDIA. Именно этот драйвер спровоцировал BSOD.

4.3. Стек вызова

Секция STACK_TEXT показывает последовательность вызовов функций ядра и драйверов, предшествовавших сбою. Адреса без символов обозначены знаками вопроса, но после настройки символов (см. шаг 5) имена функций станут читаемыми. Обращайте внимание на самые верхние строки стека — они указывают на код, исполнявшийся в момент краха.

4.4. FAILURE_BUCKET_ID и анализ

Строка FAILURE_BUCKET_ID содержит идентификатор ошибки в формате AV_nvlddmkm!unknown_function. Это хеш-сигнатура, которую можно загуглить для поиска аналогичных случаев. Также в секции IMAGE_NAME и FAILURE_BUCKET_ID уточняется проблемный бинарный файл.

Шаг 5. Настройка символов для точного анализа

Для получения читаемых имён функций в стеке требуется подключиться к серверу символов Microsoft.

  1. В WinDbg выберите File → Settings → Debugging settings или в командной строке выполните:text.sympath SRV*c:\symbols*https://msdl.microsoft.com/download/symbols .reload /f
  2. Первая команда задаёт путь для локального кеширования символов (c:\symbols) и URL сервера символов. Вторая принудительно перезагружает символы для всех модулей.
  3. После этого повторите !analyze -v. Стек станет существенно информативнее.

Официальная справка по символам: Symbol Path for Windows Debuggers.

Шаг 6. Расшифровка распространённых STOP-кодов

Ниже перечислены коды, с которыми сталкивается 90% администраторов, их типичные причины и направления диагностики.

STOP-код (hex)Символическое имяТипичная причина
0x000000D1DRIVER_IRQL_NOT_LESS_OR_EQUALДрайвер обратился к странице памяти по недопустимому IRQL. Чаще всего драйвер сетевой карты или антивируса.
0x0000001EKMODE_EXCEPTION_NOT_HANDLEDНеобработанное исключение в режиме ядра. Часто указывает на баг в драйвере или неисправную оперативную память.
0x00000050PAGE_FAULT_IN_NONPAGED_AREAОбращение к отсутствующей или повреждённой странице памяти. Виновник сбойный модуль ОЗУ, жёсткий диск или драйвер.
0x0000007FUNEXPECTED_KERNEL_MODE_TRAPАппаратная проблема: перегрев процессора, неисправность ОЗУ, разгон, повреждение кеша CPU.
0x0000009FDRIVER_POWER_STATE_FAILUREСбой управления питанием (обычно при выходе из сна/гибернации). Виновник драйвер чипсета, видеокарты или USB-устройства.
0x00000133DPC_WATCHDOG_VIOLATIONДрайвер слишком долго выполняет отложенный вызов процедуры (DPC). Часто вызывается драйверами SSD/HDD, реже — беспроводных адаптеров.
0x0000003BSYSTEM_SERVICE_EXCEPTIONИсключение при выполнении системной службы. Виновник драйвер графики или несовместимый антивирус.
0x000000EFCRITICAL_PROCESS_DIEDКритический системный процесс (csrss.exewininit.exe) аварийно завершён. Часто указывает на повреждение системных файлов или заражение вредоносным ПО.
0x0000001AMEMORY_MANAGEMENTСерьёзная проблема с управлением памятью: неисправность модуля ОЗУ, конфликт драйверов, повреждение файла подкачки.
0x00000109CRITICAL_STRUCTURE_CORRUPTIONОбнаружено повреждение критических структур данных ядра. Часто вызывается вредоносным ПО или драйвером, модифицирующим код ядра.

При обнаружении любого из этих кодов в первую очередь проверяйте оборудование (ОЗУ через MemTest86, диск через chkdsk /f /r), обновляйте или откатывайте подозрительные драйверы и запускайте sfc /scannow для восстановления системных файлов.

Устранение распространённых проблем

СимптомВероятная причинаРешение
WinDbg не находит файл дампаСистема не создала дамп из-за отсутствия файла подкачки или недостатка места на дискеПроверьте, что размер файла подкачки не менее объёма ОЗУ + 1 МБ на системном томе. Освободите место на диске C:. В sysdm.cpl в том же окне настройки дампа убедитесь, что выбранный диск имеет достаточно свободного пространства.
В выводе !analyze -v нет имени драйвераСистема не смогла определить виновника; возможно, повреждён стек или дамп неполныйВключите верификатор драйверов (verifier.exe) для подозрительных модулей. Это приведёт к более детальному сбору информации при следующем BSOD. Подробнее: Driver Verifier.
Анализ указывает на ntoskrnl.exe, но драйвер не указанОшибка произошла в ядре системы из-за воздействия стороннего драйвера, который не записался в стекИспользуйте команду !thread и k, чтобы изучить полный стек вызовов. Сравните время сбоя с журналом событий Windows (eventvwr.msc): фильтруйте по System с источником Kernel-Power и BugCheck. Это даст дополнительный контекст.
Дамп создаётся, но WinDbg не может его открытьПовреждённый файл дампаПопробуйте открыть минидамп из папки Minidump они менее подвержены повреждению. Если все дампы битые, выполните проверку диска: chkdsk C: /f /r.
После настройки символов часть имён функций остаётся неизвестной (unknown)Отсутствуют символы для сторонних драйверовДобавьте дополнительные пути к символам: .sympath+ SRV*c:\mysymbols*https://driver-symbols.example.com. Производители драйверов (NVIDIA, AMD) предоставляют символы на своих сайтах, но для публичного анализа обычно достаточно сервера Microsoft.

Итог

BSOD Windows перестаёт быть пугающей неожиданностью, когда в руках администратора есть чёткий алгоритм: сохранить дамп, открыть в WinDbg, выполнить !analyze -v и расшифровать код. Опыт показывает, что в 70% случаев вина лежит на сторонних драйверах, и решение сводится к их обновлению или откату. Остальные проценты приходятся на аппаратные неисправности и повреждения системных файлов. Ведение собственной базы STOP-кодов и частых виновников для вашего парка машин существенно ускоряет диагностику и минимизирует простои.

Menu