Что означает код BSOD 118 (PROCESS_HAS_LOCKED_PAGES)?

 
Также может означать:
КонстантаТипОС
ERROR_INVALID_VERIFY_SWITCHОшибка WindowsWindows
ENOTNAMerrnoLinux
ENETUNREACHerrnoWindows
Предыдущий Следующий
CANNOT_WRITE_CONFIGURATION KERNEL_STACK_INPAGE_ERROR

PROCESS_HAS_LOCKED_PAGES

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

Важно

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

Параметры PROCESS_HAS_LOCKED_PAGES

Параметр 1 Параметр 2 Параметр 3 Параметр 4 Причина ошибки

0x00

Указатель на объект процесса

Число заблокированных страниц

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

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

0x01

MDL, указанный драйвером

Текущее число заблокированных страниц памяти в этом процессе

Указатель на стеки драйверов для этого процесса, если они включены. В противном случае этот параметр равен нулю.

Драйвер пытается разблокировать незаблокированные страницы памяти процесса.

Причина

Драйвер либо не разблокировал заблокированные им страницы (параметр 1 равен 0x0), либо пытается разблокировать страницы, которые не были заблокированы или уже разблокированы (параметр 1 равен 0x1).

Устранение PROCESS_HAS_LOCKED_PAGES

Расширение !analyze отладки выводит сведения о проверке ошибки и помогает определить первопричину.

Если значение параметра 1 равно 0x0

Сначала используйте расширение !search для поиска указателя текущего процесса во всей физической памяти. Это расширение может найти по крайней мере один список дескрипторов памяти (MDL), указывающий на текущий процесс. Затем используйте !search для каждого найденного MDL, чтобы получить пакет запроса ввода-вывода (IRP), указывающий на текущий процесс. По этому IRP можно определить драйвер, теряющий страницы.

Также определить драйвер, вызвавший ошибку, можно изменением реестра:

  1. для значения \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management в ключе реестра создайте или измените параметр TrackLockedPages установите тип DWORD и значение 1.

  2. Перезапустите компьютер.

После этого система сохраняет трассировки стека, что позволяет легко определить драйвер, вызвавший проблему. Если драйвер снова вызовет ту же ошибку, проверка ошибки 0xCB возникнет (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS), а имя драйвера будет показано на синем экране и сохранено в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver.

Если значение параметра 1 равно 0x1

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


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