Отказ системы из-за критической ошибки (BSOD) чаще всего возникает по причине неправильной работы или повреждения драйвера, за исключением случаев неполадок в аппаратной части компьютера.
В этой статье мы рассмотрим базовые действия, которые помогут вам самостоятельно определить причину возникновения BSOD и, как следствие, устранить ее.
Проводить анализ дампов памяти мы будем при помощи отладчика WinDBG, поэтому, прежде чем начать, вам потребуется установить отладчик и настроить его.
Как это сделать вы узнаете из статьи Установка и настройка WinDBG для анализа дампов памяти
Интерфейс WinDBG
Когда вы откроете файл дампа памяти, то увидите такое окно:
Увеличить рисунок
Стоит отметить, что окно команд по умолчанию независимо от основного окна отладчика, поэтому вы можете изменить его размер, переместить или вписать в окно отладчика перетянув мышью его верхнюю границу к нижней границе панели инструментов, а также развернуть его на весь экран.
Когда вы откроете файл дампа отладчику потребуется некоторое время для подключения к интернету и загрузки необходимых символов для отладки. В процессе загрузки отладочных символов в командной строке отладчика появляется надпись Debugee not connected, в это время вы не сможете использовать отладчик.
Увеличить рисунок
После того как символы будут загружены и отладчик будет готов к анализу файла дампа вы увидите сообщение Followup: MachineOwner в нижней части текстового окна.
Увеличить рисунок
Теперь все готово для начала анализа дампа памяти. Все команды вводятся в командную строку, расположенную в нижней части окна.
Увеличить рисунок
Анализ дампа памяти
Первое на что нужно обратить внимание при открытии файла дампа – это код ошибки, который в значительной степени определяет основное направление возникновения ошибки и методологию анализа.
Коды ошибок всегда указываются в шестнадцатеричном значении и имеют вид 0xXXXXXXXX . Указываются же коды ошибок одним из следующих вариантов:
- STOP: 0x0000009F
- 03.06.2015 0009F
- 0x9F
Далее в статье будет использоваться сокращенное указание кодов ошибок (0x00).
Справочник по кодам ошибок: Windows Dev Center Bug Check Code Reference
Команда !thread и анализ драйверов
Самая распространенная причина возникновения BSOD – это сторонние драйверы (производителей устройств). Для того, чтобы увидеть фигурирует ли драйвер устройства в дампе нам понадобится просмотреть стек.
Выполните команду !thread и найдите в результатах ее выполнения Base и Limit, и их шестнадцатеричные значения.
В рассматриваемом примере они такие:
Base fffff80000b9b000 Limit fffff80000b95000
Увеличить рисунок
В командной строке напечатайте dps затем через пробел шестнацатеричное значение Limit, а за ним значение Base. В данном случае важен порядок указания значений – он должен быть обратным отображаемому в результате выполнения команды !thread.
dps fffff80000b95000 fffff80000b9b000
Когда стек будет загружен вы увидите множество строк с текстом и значениями. Среди результатов выполнения команды поищите сообщения об ошибках с указанием на драйверы. В рассматриваемом примере это драйвер igdkmd64.sys и iaStorA.sys а в отладчике это выглядит так:
Увеличить рисунок
Увеличить рисунок
Поищите на компьютере указанные драйверы. Это не обязательно, но желательно сделать т.к. после удаления драйвера из диспетчера устройств или при помощи программы удаления производителя устройства драйвер может быть не удален, в таком случае его можно будет удалить вручную. Вторая причина заключается в том, что это может быть файл вредоносной программы (вирус, троян, майнер и т.д.), и в таких случаях драйвер как правило располагается в необычных для этого папках.
Для упрощения процедуры выполните в командной строке, запущенной от имени администратора следующую команду:
driverquery /v > "%USERPROFILE%\Desktop\drivers.txt"
После выполнения команды на рабочем столе будет создан файл drivers.txt, содержащий подробную информацию обо всех установленных в системе драйверах, с их описанием и путями расположения файла драйвера.
В рассматриваемом примере вероятными виновниками возникновения BSOD оказались драйверы видеокарты Intel (igdkmd64.sys) и SATA/AHCI-контроллера (iaStorA.sys).
Стоит отметить, что не всегда причиной возникновения BSOD являются драйверы, это также может быть следствием неисправности оборудования, но если код ошибки указывает на проблему с драйвером, то рекомендуется воспользоваться средством проверки драйверов Windows.
Команда !analyze -v
Команда !analyze отображает информацию о текущем исключении или код ошибки, а параметр –v формирует подробный вывод данных. В рассматриваемом случае нам понадобятся данные о заблокированных IRP пакетах в значении Arg4, и значения FAILURE_BUCKET_ID и BUCKET_ID.
Увеличить рисунок
Выполните команду !irp добавив значение из Arg4
!irp ffffe001eb781600
В результате выполнения команды был определен проблемный драйвер - Rt630x64.sys
Увеличить рисунок
В данном случае драйвер Rt630x64.sys относится к сетевому адаптеру и вызывает ошибку DRIVER_POWER_STATE_FAILURE при завершении работы системы.
Для получения подробных сведений о файле драйвера выполните команду
lmvm Rt630x64
Увеличить рисунок
Как видите дата драйвера довольно старая и стоит его обновить для устранения проблемы.
Заключение
Цель этой статьи рассказать об алгоритме анализа дампа памяти для выявления причины BSOD. В рамках одной статьи невозможно рассмотреть все варианты анализа, а многие тонкости приходят только с опытом. Был рассмотрен всего один код ошибки т.к. последовательность ее анализа показалась мне наиболее интересной, в отличие от ошибки 0x124, например, которая в подавляющем большинстве случаев говорит об аппаратной неполадке, или 0x116, свидетельствующей о проблеме с драйвером видео или неполадке видеокарты в 95% случаев.
Если у вас не получилось выяснить причину BSOD или попросту нужна быстрая и квалифицированная помощь в анализе проблемы, вы всегда можете обратиться в форум
Устранение критических ошибок Windows