Поделиться через


Проверка ошибок 0xA: IRQL_NOT_LESS_OR_EQUAL

Проверка ошибок IRQL_NOT_LESS_OR_EQUAL имеет значение 0x0000000A. Эта проверка ошибок указывает, что Microsoft Windows или драйвер в режиме ядра обращается к памяти страниц с недопустимым адресом при возникновении уровня запроса прерывания (IRQL). Причина обычно является плохой указателем или проблемой страничной доступности.

Внимание

Эта статья предназначена для программистов. Если вы являетесь клиентом, который получил код ошибки синего экрана при использовании компьютера, см. статью "Устранение неполадок синим экраном".

параметры IRQL_NOT_LESS_OR_EQUAL

Параметр Описание
1 Адрес виртуальной памяти, к которому не удалось получить доступ.

Используйте пул !pool на этом адресе, чтобы узнать, является ли он страничного пула. Другие команды, которые могут быть полезны при сборе сведений о сбое: !pte, !address и ln (список ближайших символов).
2 IRQL во время сбоя.

Значения:
2. IRQL был DISPATCH_LEVEL во время сбоя.
3 Битовое поле, описывающее операцию, которая вызвала ошибку. Обратите внимание, что бит 3 доступен только на наборах микросхем, поддерживающих этот уровень отчетности.

Битовые 0 значения:
0 — операция чтения
1. Операция записи

Битовые 3 значения:
0 . Не выполняется операция
1. Выполнение операции

Объединенные значения bit 0 и Bit 3:
0x0 — ошибка при попытке чтения из адреса в параметре 1
0x1 — ошибка при попытке записи в адрес в параметре 1
0x8 . Ошибка при попытке ВЫПОЛНИТЬ код из адреса в параметре 1

Это значение вызвано следующими причинами:
  • Вызов функции, которая не может вызываться в DISPATCH_LEVEL во время DISPATCH_LEVEL.
  • Забыв освободить спинлок.
  • Пометка кода как страничного, если оно должно быть нестранимым. Например, если код получает спинлок или вызывается в вызове отложенной процедуры.
4 Указатель инструкции во время сбоя.

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

Причина

Эта проверка ошибок вызвана драйверами устройств в режиме ядра, которые используют неправильные адреса.

Эта проверка ошибок указывает, что попытка получить доступ к недопустимому адресу во время поднятого уровня запроса прерывания (IRQL). Причина — это либо плохой указатель памяти, либо проблема с возможностью страницы с кодом драйвера устройства.

Общие рекомендации, которые можно использовать для классификации типа ошибки кодирования, вызвавшей проверку ошибок, следующим образом:

  • Если параметр 1 меньше 0x1000, проблема, скорее всего, является разоменовкой указателя NULL.

  • Если пул !pool сообщает, что параметр 1 является пулом страниц (или другими типами страничной памяти), то IRQL слишком высок, чтобы получить доступ к этим данным. Запустите на более низком уровне IRQL или выделите данные в непагованном пуле.

  • Если параметр 3 указывает, что проверка ошибок была попыткой выполнить код, доступный для страниц, то IRQL слишком высок, чтобы вызвать эту функцию. Запустите на более низком уровне IRQL или не помечайте код как доступный для страницы.

  • Это может быть плохой указатель, вызванный использованием после бесплатного или битового перевернутого. Изучите допустимость параметра 1 с помощью !pte, !address и ln (список ближайших символов).

Разрешение

Если отладчик ядра доступен, получите трассировку стека. Начните с запуска расширения отладчика !analyze , чтобы отобразить сведения о проверке ошибок. Расширение !analyze может быть полезным при определении первопричины. Затем введите одну из команд k* (стек обратного вывода) для просмотра стека вызовов.

Сбор сведений

Проверьте имя драйвера, если он был указан на синем экране.

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

Средство проверки драйверов

Средство проверки драйверов — это средство, которое выполняется в режиме реального времени для проверки поведения драйверов. Например, средство проверки драйверов проверяет использование ресурсов памяти, таких как пулы памяти. Если он идентифицирует ошибки в выполнении кода драйвера, он упреждающе создает исключение, чтобы позволить, чтобы часть кода драйвера была более тщательно изучена. Диспетчер проверки драйверов встроен в Windows и доступен на всех компьютерах с Windows.

Чтобы запустить диспетчер проверки драйверов, в командной строке введите средство проверки . Вы можете настроить драйверы для проверки. Код, проверяющий, добавляет затраты при выполнении, поэтому старайтесь проверять наименьшее количество драйверов как можно скорее. Дополнительные сведения см. в разделе "Проверка драйверов".

В следующем коде показан пример отладки:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

Замечания

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

При возникновении ошибки 0xA при обновлении до более новой версии Windows ошибка может быть вызвана драйвером устройства, системной службой, сканером вирусов или средством резервного копирования, несовместимым с новой версией.

Устранение проблемы с неисправным оборудованием: если оборудование было добавлено в систему недавно, удалите его, чтобы узнать, возникает ли ошибка. Если существующее оборудование завершилось сбоем, удалите или замените неисправный компонент. Запустите аппаратные диагностика, предоставляемые производителем системы. Дополнительные сведения об этих процедурах см. в руководстве владельца компьютера.

Устранение проблемы с неисправной системой: отключите службу и убедитесь, что это устраняет ошибку. В этом случае обратитесь к изготовителю системной службы о возможном обновлении. Если ошибка возникает во время запуска системы, изучите параметры восстановления Windows. Дополнительные сведения см. в разделе "Параметры восстановления" в Windows 10.

Устранение проблемы антивирусного программного обеспечения: отключите программу и убедитесь, что это устраняет ошибку. Если это так, обратитесь к производителю программы о возможном обновлении.

Общие сведения об устранении ошибок см. в статье "Анализ данных о синим экранах".

См. также

Справочник по коду проверки ошибок