Bug Check 0x76: PROCESS_HAS_LOCKED_PAGES
The PROCESS_HAS_LOCKED_PAGES bug check has a value of 0x00000076. This bug check indicates that a driver failed to release locked pages after an I/O operation, or that it attempted to unlock pages that were already unlocked.
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.
PROCESS_HAS_LOCKED_PAGES Parameters
The pointer to the process object
The number of locked pages
The pointer to driver stacks (if they are enabled). Otherwise, this parameter is zero.
The process being terminated has locked memory pages. The driver must unlock any memory that it might have locked in a process, before the process terminates.
MDL specified by the driver
Current number of locked memory pages in that process
A pointer to driver stacks for that process (if they are enabled). Otherwise, this parameter is zero.
The driver is attempting to unlock process memory pages that are not locked.
Cause
The driver either failed to unlock pages that it locked (parameter 1 value is 0x0), or the driver is attempting to unlock pages that have not been locked or that have already been unlocked (parameter 1 value is 0x1).
Resolution
The !analyze debug extension displays information about the bug check and can be helpful in determining the root cause.
If the parameter 1 value is 0x0
First use the !search extension on the current process pointer throughout all of physical memory. This extension might find at least one memory descriptor list (MDL) that points to the current process. Next, use !search on each MDL that you find to obtain the I/O request packet (IRP) that points to the current process. From this IRP, you can identify which driver is leaking the pages.
Otherwise, you can detect which driver caused the error by editing the registry:
In the \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management registry key, create or edit the TrackLockedPages value, and then set it equal to DWORD 1.
Restart the computer.
The system then saves stack traces, so you can easily identify the driver that caused the problem. If the driver causes the same error again, bug check 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS) is issued, and the name of the driver that causes this error is displayed on the blue screen and stored in memory at the location (PUNICODE_STRING) KiBugCheckDriver.
If the parameter 1 value is 0x1
Examine the driver source code that locks and unlocks memory, and try to locate an instance where memory is unlocked without first being locked.
BSOD 0x00000076 — PROCESS_HAS_LOCKED_PAGES
Данный стоп код означает, что драйвер не освободил заблокированную страницу после операции ввода/вывода или он попытался разблокировать страницу, которая уже был разблокирована. Стоп код имеет следующие параметры (таблица ниже).
Параметр 1 | Параметр 2 | Параметр 3 | Параметр 4 | Причина ошибки |
0x00 | Указатель на объект процесса | Количество заблокированных страниц | Указатель на стеки драйвера (если они включены), иначе данный параметр равен 0 | Процесс, который был завершен, имел заблокированные страницы. Драйвер должен разблокировать любую память, которая может быть заблокирована в процессе перед его завершением |
0x01 | MDL, указанный в драйвере | Текущее количество заблокированный страниц в процессе | Указатель на стеки драйвера (если они включены), иначе данный параметр равен 0 | Драйвер попытался разблокировать страницы памяти процесса, которые не были заблокированы |
Устранение
Если параметр 1 равен 0x0. Сначала воспользуйтесь расширением !search с указателем на процесс (параметр 2) для просмотра всей физической памяти. Это расширение может найти по крайней мере один MDL, который указывает на текущий процесс. Далее используйте !search на каждом найденном MDL для получения IRP пакета, который указывает на текущий процесс. С этого IRP вы сможете определить, какой из драйверов не разблокировал страницы.
Также можно изменить реестр — HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management. Установите значение для TrackLockedPages равное 1. Перегрузите компьютер. Система сохранит стеки вызовов, таким образом вы сможете легко идентифицировать драйвер, который привел к краху. Если драйвер вновь вызовет крах, будет сгенерирован стоп код 0xCB — DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS при этом на экране будет отображено имя драйвера, который привел к краху.
Если параметр 1 равен 0x1. Разработчикам необходимо проанализировать исходный код драйвера.
Синий экран ошибка 0x00000076: PROCESS_HAS_LOCKED_PAGES
Драйвер не смог произвести разблокирование уже подвергшихся блокировке страниц после операции ввода-вывода. Как показывает практика, наиболее часто происходит попытка осуществить разблокировку страницы, которая и не была блокирована. В результате, возникают серьёзные сбои в работе всей системы.
Причина возникновения
Тут необходимо установить прямую связь между выдачей значения parameter1. Когда он составляет 0x00, то драйвер не смог провести разблокирование ранее блокированной страницы. При 0x01 разблокировка выполняется в отношении неблокированной страницы.
Параметры
На синим экране требуется найти следующий текст:
STOP: 0x00000076 (parameter1, parameter2, parameter3, parameter4) PROCESS_HAS_LOCKED_PAGES
Расшифровка параметров несколько различна, в зависимости от значения показателя parameter1. Это продемонстрировано в следующей таблице.
parameter1
parameter2
parameter3
parameter4
Указатель на объект процесса
Номер страниц, подвергшихся блокировке
Указатель на стек драйвера. Когда подобный момент не предусматривается, parameter4 имеет нулевой показатель
Номер страниц памяти, подвергшихся блокировке в процессе
Указатель на стек драйвера. Когда подобный момент не предусматривается, parameter4 имеет нулевой показатель
Способы решения
Основной задачей следует назвать выявление того драйвера, который считается виновником возникновения ошибки. Его название, в некоторых случаях, можно найти в предоставляемом на синем экране коде. В ином случае, рекомендуется выполнить анализ дампа памяти. Когда подобное мероприятие осуществлено, требуется провести обновление или замену драйвера. В некоторых ситуациях может помочь откат до более ранней рабочей версии.