Что означает код BSOD 209 (DRIVER_IRQL_NOT_LESS_OR_EQUAL)?

 
Также может означать:
КонстантаТипОС
ERROR_INVALID_SIGNAL_NUMBERОшибка WindowsWindows
Предыдущий Следующий
DRIVER_CORRUPTED_MMPOOL BUGCODE_ID_DRIVER

DRIVER_IRQL_NOT_LESS_OR_EQUAL

Проверка ошибок DRIVER_IRQL_NOT_LESS_OR_EQUAL имеет значение 0x000000D1. Это означает, что драйвер режима ядра попытался обратиться к pageable memory при слишком высоком IRQL процесса.

Важно

Параметры DRIVER_IRQL_NOT_LESS_OR_EQUAL

Параметр Описание

1

Память, к которой выполнено обращение.

2

IRQL во время обращения.

3

  • 0 — чтение
  • 1 — запись
  • 2 — выполнение
  • 8 — выполнение

4

Адрес кода, обратившегося к памяти. Используйте ln (вывод ближайших символов) для этого адреса, чтобы определить имя функции.

Причина DRIVER_IRQL_NOT_LESS_OR_EQUAL

Обычно при этой ошибке драйвер пытается обратиться к pageable или полностью недопустимому адресу при слишком высоком interrupt request level (IRQL). Возможные причины:

  • Разыменование неверного указателя, например NULL или уже освобождённого, при выполнении на DISPATCH_LEVEL или выше.

  • Обращение к pageable data на DISPATCH_LEVEL или выше.

  • Выполнение pageable code на DISPATCH_LEVEL или выше.

Если удаётся определить драйвер, вызвавший ошибку, его имя выводится на синем экране и сохраняется в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver. Для вывода этих сведений можно использовать dx (вывод выражения object model отладчика в DRIVER_IRQL_NOT_LESS_OR_EQUAL контексте) — команду отладчика: dx KiBugCheckDriver.

Обычно эту проверку вызывают драйверы, использующие неверные адреса памяти.

Возможные причины page fault:

  • Функция была помечена как pageable и выполнялась при повышенном IRQL, в том числе после захвата блокировки.

  • Была вызвана функция другого драйвера, который к этому моменту уже выгрузили.

  • Функция была вызвана через недопустимый function pointer.

Устранение DRIVER_IRQL_NOT_LESS_OR_EQUAL

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

Для DRIVER_IRQL_NOT_LESS_OR_EQUAL: Расширение !analyze выводит сведения о bug check и помогает установить первопричину. Ниже приведён пример вывода !analyze.

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: fffff808add27150, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000000, value 0 = read operation, 1 = write operation
Arg4: fffff808adc386a6, address which referenced memory

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

Для начала отладки проверки такого типа исследуйте стек вызовов командами k, kb, kc, kd, kp, kP, kv (вывод стека вызовов).

В отладчике выполните !irql , чтобы вывести IRQL процессора целевого компьютера перед остановкой в отладчике. Например:

REM DRIVER_IRQL_NOT_LESS_OR_EQUAL diagnostic command.
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)

В большинстве случаев проблема при такой проверке заключается не в самом уровне IRQL, а в памяти, к которой выполнялось обращение.

Поскольку обычно эту проверку вызывают драйверы, использующие неверные адреса памяти, для дальнейшего расследования используйте параметры 1, 3 и 4.

Используйте ln (вывод ближайших символов) с параметром 4, чтобы определить имя вызванной функции. Также проверьте вывод !analyze и посмотрите, удалось ли определить отказавший код.

Используйте !pool для адреса из параметра 1, чтобы определить, относится ли он к paged pool. Используйте !address и расширенную команду !pte , чтобы получить дополнительные сведения об этой области памяти.

Командами просмотра памяти исследуйте память по адресу из параметра 1.

Используйте команды u, ub, uu (unassemble), чтобы исследовать код по адресу из параметра 4, обратившийся к памяти.

Для DRIVER_IRQL_NOT_LESS_OR_EQUAL: Выполните команду lm t n , чтобы вывести модули, загруженные в память. Используйте !memusage для исследования общего состояния системной памяти.

Driver Verifier для DRIVER_IRQL_NOT_LESS_OR_EQUAL

Driver Verifier — средство реального времени для проверки поведения драйверов. Для DRIVER_IRQL_NOT_LESS_OR_EQUAL Driver Verifier, например, контролирует использование ресурсов памяти, включая пулы памяти. Для DRIVER_IRQL_NOT_LESS_OR_EQUAL, обнаружив ошибку выполнения кода драйвера, Driver Verifier намеренно создаёт исключение, чтобы соответствующий участок кода можно было подробно исследовать. Для DRIVER_IRQL_NOT_LESS_OR_EQUAL можно использовать встроенный в Windows диспетчер Driver Verifier, доступный на всех компьютерах с Windows.

Для DRIVER_IRQL_NOT_LESS_OR_EQUAL: Чтобы запустить Driver Verifier Manager, введите verifier в командной строке. Можно выбрать драйверы, которые необходимо проверять. Для DRIVER_IRQL_NOT_LESS_OR_EQUAL учитывайте, что проверка драйверов создаёт дополнительную нагрузку, поэтому проверяйте минимально необходимое число драйверов. Дополнительные сведения см. в документации Driver Verifier.

Примечания для DRIVER_IRQL_NOT_LESS_OR_EQUAL

Если Windows debugger недоступен, для DRIVER_IRQL_NOT_LESS_OR_EQUAL можно применить базовые методы диагностики.

  • При анализе DRIVER_IRQL_NOT_LESS_OR_EQUAL проверьте System Log в Event Viewer: дополнительные ошибки могут указать вызвавшие сбой устройство или драйвер.

  • Если в сообщении DRIVER_IRQL_NOT_LESS_OR_EQUAL указан драйвер, отключите его либо проверьте обновления у производителя.

  • Для DRIVER_IRQL_NOT_LESS_OR_EQUAL убедитесь, что всё недавно установленное оборудование совместимо с используемой версией Windows. Например, сведения о требованиях к оборудованию системы, затронутой DRIVER_IRQL_NOT_LESS_OR_EQUAL , можно получить в характеристиках Windows 10.

Дополнительные общие сведения по диагностике см. в разделе Blue screen data.


Нужно найти другой код? Найти другой код состояния или ошибки.