BSOD 0x000000D1 — DRIVER_IRQL_NOT_LESS_OR_EQUAL

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

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

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

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

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

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

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

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

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

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

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

Ситуация А.

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

Ситуация B.

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *