| Предыдущий | Следующий |
| 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 можно определить драйвер, теряющий страницы.
Также определить драйвер, вызвавший ошибку, можно изменением реестра:
для значения \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management в ключе реестра создайте или измените параметр TrackLockedPages установите тип DWORD и значение 1.
Перезапустите компьютер.
После этого система сохраняет трассировки стека, что позволяет легко определить драйвер, вызвавший проблему. Если драйвер снова вызовет ту же ошибку, проверка ошибки 0xCB возникнет (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS), а имя драйвера будет показано на синем экране и сохранено в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver.
Если значение параметра 1 равно 0x1
Проверьте исходный код драйвера, блокирующий и разблокирующий память, и найдите место, где память разблокируется без предварительной блокировки.
Нужно найти другой код? Найти другой код состояния или ошибки.
