Ошибка 0x000000D1 DRIVER_IRQL_NOT_LESS_OR_EQUAL в Windows


«0x000000D1 DRIVER_IRQL_NOT_LESS_OR_EQUAL» неустранимой ошибки на компьютере под управлением Windows Server 2008 R2 с пакетом обновления 1 или Windows 7 с пакетом обновления 1

Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Datacenter Windows Server 2008 R2 for Itanium-Based Systems Windows Server 2008 R2 Foundation Windows Server 2008 R2 Standard Windows Server 2008 R2 Web Edition Windows 7 Service Pack 1 Windows 7 Enterprise Windows 7 Home Basic Windows 7 Home Premium Windows 7 Professional Windows 7 Starter Windows 7 Ultimate Еще. Меньше

Симптомы

Предполагается установить исправление 2738401 на Windows 7 Пакет обновления 1 (SP1)-сервер под управлением Windows Server 2008 R2 с пакетом обновления 1 или на основе файла. В этом случае файлового сервера может аварийно завершить работу и появляется сообщение о неустранимой ошибке, подобное приведенному ниже:

STOP: 0x000000D1 (параметр1, параметр2, параметр3, параметр4)

  • Stop-ошибка описывает проблему DRIVER_IRQL_NOT_LESS_OR_EQUAL.
  • Параметры в этом сообщении о STOP-ошибке зависят от конфигурации компьютера.
  • Не все ошибки «Stop 0x000000D1» являются причиной этой проблемы.
  • Дополнительные сведения о 2738401 КБ щелкните следующий номер статьи базы знаний Майкрософт: 2738401 исходный пакет будет удален после получения широковещательные пакеты UDP на компьютере под управлением Windows 7 или Windows Server 2008 R2

Решение

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте это исправление только в тех случаях, когда наблюдается проблема, описанная в данной статье. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Если исправление доступно для скачивания, имеется раздел «Пакет исправлений доступен для скачивания» в верхней части этой статьи базы знаний. Если этот раздел не отображается, обратитесь в службу поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Для получения полного списка телефонов поддержки и обслуживания клиентов корпорации Майкрософт, или для создания отдельного запроса на обслуживание, посетите следующий веб-сайт Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме «Пакет исправлений доступен для скачивания» отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условия

Для установки этого исправления необходимо наличие Windows 7 с пакетом обновления 1 или Windows Server 2008 R2 с пакетом обновления 1.

Для получения дополнительных сведений о получении пакета обновления для Windows 7 или Windows Server 2008 R2 см. следующую статью базы знаний Майкрософт:

976932 Сведения о пакете обновления 1 для Windows 7 и Windows Server 2008 R2

Сведения о реестре

Для установки этого исправления нет необходимости вносить изменения в реестр.

Необходимость перезагрузки

После установки исправления компьютер необходимо перезагрузить.

Сведения о замене исправлений

Это исправление не заменяет ранее выпущенные исправления.

0xD1 проверки ошибок: DRIVER_IRQL_NOT_LESS_OR_EQUAL

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

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

параметры DRIVER_IRQL_NOT_LESS_OR_EQUAL

На память ссылается.

IRQL во время ссылки.

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

Причина

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

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

  • Разыменование неверного указателя (например, NULL или освобожденного указателя) при выполнении на уровне DISPATCH_LEVEL или выше.
  • Доступ к страничным данным на уровне DISPATCH_LEVEL или выше.
  • Выполнение страничного кода на уровне DISPATCH_LEVEL или выше.
Новые статьи:  Создаем новую папку на рабочем столе компьютера

Если драйвер, отвечающий за ошибку, можно определить, его имя выводится на синем экране и хранится в памяти в расположении (PUNICODE_STRING) KiBugCheckDriver. Вы можете использовать dx (выражение объектной модели отладчика отображения), команду отладчика, чтобы отобразить следующее: dx KiBugCheckDriver.

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

Возможные причины сбоя страницы включают следующие события:

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

Дополнительные сведения о Windows IRQLs см. в разделе Windows Внутренние 7-й выпуск, часть 1 от Павла Йосифовича, Марка Е. Руссиновича, Дэвида А. Соломона и Алекса Ионеску.

Решение

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

  • Не помечен как страничный
  • Не вызывает никаких других встроенных функций, которые можно вывести на страницу.

Расширение отладчика !analyze отображает сведения о проверке ошибок и может быть полезно при определении первопричины. В следующем примере выходные данные из !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 

Если драйвер, отвечающий за ошибку, можно определить, его имя выводится на синем экране и хранится в памяти в расположении (PUNICODE_STRING) KiBugCheckDriver. Вы можете использовать dx (выражение объектной модели отладчика отображения), команду отладчика, чтобы отобразить следующее: dx KiBugCheckDriver

0: kd> dx KiBugCheckDriver KiBugCheckDriver : 0xffffc6092de892c8 : "Wdf01000.sys" [Type: _UNICODE_STRING *] 

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

В отладчике выполните команду !irql , чтобы отобразить сведения об IRQL процессора на целевом компьютере перед прерыванием отладчика. Пример:

0: kd> !irql Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL) 

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

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

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

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

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

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

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

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

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

Новые статьи:  Подключаем монитор к двум компьютерам

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

Комментарии

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

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

Дополнительные общие сведения об устранении неполадок см. в разделе «Синий экран».

Bug Check 0xD1: DRIVER_IRQL_NOT_LESS_OR_EQUAL

The DRIVER_IRQL_NOT_LESS_OR_EQUAL bug check has a value of 0x000000D1. This indicates that a kernel-mode driver attempted to access pageable memory while the process IRQL that was too high.

This topic is for programmers. If you are a customer who has received a blue screen error code while using your computer, see Troubleshoot blue screen errors.

DRIVER_IRQL_NOT_LESS_OR_EQUAL parameters

IRQL at time of reference.

Address that referenced memory. Use ln (list nearest symbols) on this address to see the name of the function.

Cause

To determine the cause requires the Windows debugger, programming experience and access to the source code for the faulting module.

Typically, when this error occurs, a driver has tried to access an address that is pageable (or that is completely invalid) while the interrupt request level (IRQL) was too high. This can be caused by:

  • Dereferencing a bad pointer (such as a NULL or freed pointer) while executing at or above DISPATCH_LEVEL.
  • Accessing pageable data at or above DISPATCH_LEVEL.
  • Executing pageable code at or above DISPATCH_LEVEL.

If a driver that is responsible for the error can be identified, its name is printed on the blue screen and stored in memory at the location (PUNICODE_STRING) KiBugCheckDriver. You can use dx (display debugger object model expression), a debugger command, to display this: dx KiBugCheckDriver.

This bug check is usually caused by drivers that have used improper memory addresses.

Possible causes for the page fault include the following events:

  • The function was marked as pageable and was running at an elevated IRQL (which includes obtaining a lock).
  • The function call was made to a function in another driver, and that driver was unloaded.
  • The function was called by using a function pointer that was an invalid pointer.

For more information on Windows IRQLs, see Windows Internals 7th Edition Part 1 by Pavel Yosifovich, Mark E. Russinovich, David A. Solomon and Alex Ionescu.

Resolution

If the problem is caused by the driver that you are developing, make sure that the function that was executing at the time of the bug check is:

  • Not marked as pageable
  • Does not call any other inline functions that could be paged out.

The !analyze debugger extension displays information about the bug check and can be helpful in determining the root cause. The following example is output from !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 

If a driver that is responsible for the error can be identified, its name is printed on the blue screen and stored in memory at the location (PUNICODE_STRING) KiBugCheckDriver. You can use dx (display debugger object model expression), a debugger command, to display this: dx KiBugCheckDriver .

0: kd> dx KiBugCheckDriver KiBugCheckDriver : 0xffffc6092de892c8 : "Wdf01000.sys" [Type: _UNICODE_STRING *] 

If a trap frame is available in the dump file, use the .trap command to set your context to the provided address.

Новые статьи:  Как отключить клавиатуру в Windows

In the debugger, run the !irql command to display information about the IRQL of a processor on the target computer before the debugger break. For example:

0: kd> !irql Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL) 

In the majority of cases of this type of bug check, the issue is not the IRQL level, but rather the memory that is being accessed.

Because this bug check is usually caused by drivers that have used improper memory addresses, use parameters 1, 3, and 4 to investigate further.

Use ln (list nearest symbols) with parameter 4 to see the name of the function that was called. Also examine the !analyze output to see if faulting code is identified.

Use !pool on the parameter 1 address to see whether it is paged pool. Use !address and the advanced !pte command to learn more about this area of memory.

Use the display memory commands to examine the memory referenced in command in parameter 1.

Use the u, ub, uu (unassemble) commands to look at the code in the address which referenced the memory in parameter 4.

Use the command lm t n to list modules that are loaded in the memory. Use !memusage and to examine the general state of the system memory.

Driver Verifier

Driver Verifier is a tool that runs in real time to examine the behavior of drivers. For example, Driver Verifier checks the use of memory resources, such as memory pools. If it identifies errors in the execution of driver code, it proactively creates an exception to allow that part of the driver code to be further scrutinized. Driver Verifier Manager is built into Windows and is available on all Windows PCs.

To start Driver Verifier Manager, type verifier at a command prompt. You can configure which drivers to verify. The code that verifies drivers adds overhead as it runs, so try to verify the smallest number of drivers possible. For more information, see Driver Verifier.

Remarks

If you are not equipped to use the Windows debugger to work on this problem, you can use some basic troubleshooting techniques.

  • Check the System Log in Event Viewer for additional error messages that might help identify the device or driver that is causing this bug check.
  • If a driver is identified in the bug check message, disable the driver or check with the manufacturer for driver updates.
  • Confirm that any new hardware that is installed is compatible with the installed version of Windows. For example, you can get information about required hardware at Windows 10 Specifications.

For additional general troubleshooting information, see Blue screen data.


Оставьте комментарий