BSOD 0x000000D1 — DRIVER_IRQL_NOT_LESS_OR_EQUAL

Описание ошибки

Данная ошибка означает, что драйвер попытался обратиться к странице памяти, выгруженной на жесткий диск, при слишком высоком уровне IRQL.

Анализ ошибки – один из самых несложных. Обычно, операционная система сама находит драйвер, который привел к краху и выводит строку с именем драйвера, как показано на изображении ниже. Вы можете сами сгенерировать подобный крах системы с помощью NotMyFault и увидеть, что анализ причины обычно не является проблемой.

BSOD 0x000000D1 - DRIVER_IRQL_NOT_LESS_OR_EQUAL

Параметры стоп-кода приведены в таблице ниже.

Параметр Описание
Arg1 Адрес памяти по которому было выполнено обращение
Arg2 Уровень IRQL
Arg3 Тип операции: 0 – чтение, 1 – запись, 8 – выполнение.
Arg4 Адрес инструкции в памяти, которая выполняет обращение к

Дополнительное описание

У этой ошибки есть следующая особенность — она может появляться, а может и нет. Давайте рассмотрим почему так происходит.

Драйвер режима ядра может использовать два типа памяти:

  • выгружаемую (paged pool)
  • невыгружаемую (non-paged pool)

«Выгружаемая» означает память, которая может быть выгружена операционной системой на жесткий диск. Это происходит тогда, когда системе не хватает памяти и она для ее «расширения» использует файл подкачки, то есть жесткий диск.

«Невыгружаемая» означает, что память не может быть выгружена. Такая память используется операционной системой и драйверами. Вы можете увидеть оба типа этой памяти в диспетчере задач.

Выгружаемая и невыгружаемая память в диспетчере задач

Теперь давайте рассмотрим почему возникновение этой ошибки является произвольным. Рассмотрим ситуацию А.

Ситуация А.

Код драйвера выполняется на уровне IRQL>=DISPATCH_LEVEL и выполняет обращение к выгружаемой памяти. Страницы выгружаемой памяти находятся на момент обращения в ОЗУ и обращение происходит без каких-либо проблем. То есть некорректный код, нормально работает.

Ситуация B.

Выполняется тот же самый код, что и в ситуации А, но диспетчер памяти определяет, что на момент обращения, страница памяти выгружена на жесткий диск и ему необходимо выполнить загрузку этой страницы в память. Но эта операция выполняется при IRQL< DISPATCH_LEVEL, соответственно она не может прервать выполнение кода драйвера. Возникает тупиковая ситуация, выходом из которой является генерация системой BSOD с рассматриваемым кодом ошибки.

Причины ошибки

Основная причина – это ошибки в драйвере допущенные программистами, также причиной может быть сбойная память, что менее вероятно.

Способы устранения

  1. Проведите анализ дампов памяти (см. “BSOD Viewer — простой анализ дампов памяти”, “Анализ дампов после BSOD с помощью Debugging Tools for Windows”) и выявите сбойный драйвер. Обновите сбойный драйвер или удалите из системы.
  2. Выполните проверку памяти. Как это сделать, описано в постах: “Как проверить память в Windows 7 встроенной утилитой mdsched?” и “Диагностика памяти с помощью Memtestx86+”.
  3. Многие обращали внимание на то, что BSOD с данным стоп кодом в Windows 7 возникает из-за uTorrent версии 2.0 и выше. Попробуйте удалить эту версию.

Если не вышло самостоятельно устранить проблему, создайте тему на форуме, постараемся разобраться.