Bug 检查 0x76:PROCESS_HAS_LOCKED_PAGES

PROCESS_HAS_LOCKED_PAGES Bug 检查的值为 0x00000076。 此 Bug 检查表明驱动程序在 I/O 操作后未能释放锁定的页面,或者它试图解锁已解锁的页面。

重要

这篇文章适合程序员阅读。 如果您是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答

PROCESS_HAS_LOCKED_PAGES 参数

参数 1 参数 2 参数 3 参数 4 错误消息的原因

0x00

指向进程对象的指针

锁定的页数

指向驱动程序堆栈的指针(如果已启用)。 否则此参数为零。

被终止的进程已锁定内存页。 在进程终止之前,驱动程序必须解锁进程中可能锁定的任何内存。

0x01

驱动程序指定的 MDL

进程的当前锁定中内存页数

指向该进程的驱动程序堆栈的指针(如果已启用)。 否则此参数为零。

驱动程序正试图解锁未锁定的进程内存页。

原因

驱动程序未能解锁锁定的页面(参数 1 的值为 0x0),或者驱动程序正在试图解锁尚未锁定或已解锁的页面(参数 1 的值为 0x1)。

解决方法

!analyze 调试扩展显示有关 bug 检查的信息,并有助于确定根本原因

如果参数 1 的值为 0x0

首先使用 !search 在整个物理内存中的当前进程指针上扩展。 此扩展可能会找到至少一个指向当前进程的内存描述符列表 (MDL)。 接下来,在找到的每个 MDL 上使用 !search 来获取指向当前进程的 I/O 请求数据包 (IRP)。 通过该 IRP,可以识别哪个驱动程序正在泄露页面。

否则,可以通过编辑注册表来检测导致错误的驱动程序:

  1. \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 注册表项中,创建或编辑 TrackLockedPages 值,然后将其设置为等于 DWORD 1。

  2. 重新启动计算机。

然后,系统会保存堆栈跟踪,以便轻松识别导致问题的驱动程序。 如果驱动程序再次导致相同的错误,则会发出 Bug 检查 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS),并在蓝屏上显示导致此错误的驱动程序名称,同时将其存储在内存中的位置 (PUNICODE_STRING) KiBugCheckDriver 中。

如果参数 1 的值为 0x1

检查锁定和解锁内存的驱动程序源代码,并尝试内存在未锁定的情况下被解锁的实例。