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


0x76 проверки ошибок: PROCESS_HAS_LOCKED_PAGES

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

Важно!

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

Параметры PROCESS_HAS_LOCKED_PAGES

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

0x00

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

Количество заблокированных страниц

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

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

0x01

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

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

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

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

Причина

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

Решение

Расширение отладки !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

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