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 с рассматриваемым кодом ошибки.

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: