Проблема
Синий экран смерти (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, не оставляя следа для анализа. Первым делом проверяем и настраиваем политику записи дампов.
- Нажмите
Win + R, введитеsysdm.cplи нажмите Enter. - Перейдите на вкладку Дополнительно (Advanced), в разделе Загрузка и восстановление (Startup and Recovery) нажмите Параметры (Settings).
- В блоке Отказ системы (System failure):
- Убедитесь, что стоит галочка Записать событие в системный журнал.
- Снимите галочку Автоматически выполнять перезагрузку, чтобы успеть прочитать STOP-код на экране.
- В выпадающем списке Запись отладочной информации выберите Автоматический дамп памяти (Automatic memory dump) или Активный дамп памяти (Active memory dump) для современных систем. Для серверов с большим объёмом ОЗУ можно оставить Дамп памяти ядра (Kernel memory dump).
- Убедитесь, что путь к файлу дампа
%SystemRoot%\MEMORY.DMP.
- Для углублённого анализа включите запись малого дампа (Minidump): установите переключатель в Малый дамп памяти (256 КБ) и укажите директорию, например,
%SystemRoot%\Minidump. Малые дампы занимают минимум места и пишутся при каждом сбое, тогда как полный дамп перезаписывается. - Нажмите ОК и перезагрузите компьютер, если система этого попросит.
Дополнительные сведения о типах дампов приведены в статье Varieties of Kernel-Mode Dump Files.
Шаг 2. Установка инструментов отладки (WinDbg)
WinDbg бесплатный отладчик от Microsoft, распространяемый через Windows SDK.
- Скачайте установщик Windows SDK с официального сайта Windows SDK.
- Запустите
winsdksetup.exeи на этапе выбора компонентов оставьте только Debugging Tools for Windows, снимите остальные галочки. - После установки откройте WinDbg от имени администратора (через меню «Пуск»).
Альтернативно можно использовать WinDbg Preview из Microsoft Store, но классическая версия из SDK предоставляет максимальный набор команд.
Шаг 3. Открытие и анализ дампа памяти
- Запустите WinDbg, нажмите
Ctrl + Dили выберите File → Open Crash Dump. - Укажите путь к файлу
MEMORY.DMPв папкеC:\Windowsили к последнему минидампу изC:\Windows\Minidump(рекомендуется брать самый свежий по дате). - Дождитесь загрузки дампа и автоматического выполнения начальных команд. Вы увидите строку типа:textLoading Dump File [C:\Windows\MEMORY.DMP] Kernel Bitmap Dump File: Kernel address space is available
- В нижней панели команд введите центральную команду анализа: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.
- В WinDbg выберите File → Settings → Debugging settings или в командной строке выполните:text.sympath SRV*c:\symbols*https://msdl.microsoft.com/download/symbols .reload /f
- Первая команда задаёт путь для локального кеширования символов (
c:\symbols) и URL сервера символов. Вторая принудительно перезагружает символы для всех модулей. - После этого повторите
!analyze -v. Стек станет существенно информативнее.
Официальная справка по символам: Symbol Path for Windows Debuggers.
Шаг 6. Расшифровка распространённых STOP-кодов
Ниже перечислены коды, с которыми сталкивается 90% администраторов, их типичные причины и направления диагностики.
| STOP-код (hex) | Символическое имя | Типичная причина |
|---|---|---|
0x000000D1 | DRIVER_IRQL_NOT_LESS_OR_EQUAL | Драйвер обратился к странице памяти по недопустимому IRQL. Чаще всего драйвер сетевой карты или антивируса. |
0x0000001E | KMODE_EXCEPTION_NOT_HANDLED | Необработанное исключение в режиме ядра. Часто указывает на баг в драйвере или неисправную оперативную память. |
0x00000050 | PAGE_FAULT_IN_NONPAGED_AREA | Обращение к отсутствующей или повреждённой странице памяти. Виновник сбойный модуль ОЗУ, жёсткий диск или драйвер. |
0x0000007F | UNEXPECTED_KERNEL_MODE_TRAP | Аппаратная проблема: перегрев процессора, неисправность ОЗУ, разгон, повреждение кеша CPU. |
0x0000009F | DRIVER_POWER_STATE_FAILURE | Сбой управления питанием (обычно при выходе из сна/гибернации). Виновник драйвер чипсета, видеокарты или USB-устройства. |
0x00000133 | DPC_WATCHDOG_VIOLATION | Драйвер слишком долго выполняет отложенный вызов процедуры (DPC). Часто вызывается драйверами SSD/HDD, реже беспроводных адаптеров. |
0x0000003B | SYSTEM_SERVICE_EXCEPTION | Исключение при выполнении системной службы. Виновник драйвер графики или несовместимый антивирус. |
0x000000EF | CRITICAL_PROCESS_DIED | Критический системный процесс (csrss.exe, wininit.exe) аварийно завершён. Часто указывает на повреждение системных файлов или заражение вредоносным ПО. |
0x0000001A | MEMORY_MANAGEMENT | Серьёзная проблема с управлением памятью: неисправность модуля ОЗУ, конфликт драйверов, повреждение файла подкачки. |
0x00000109 | CRITICAL_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-кодов и частых виновников для вашего парка машин существенно ускоряет диагностику и минимизирует простои.






