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,可以识别哪个驱动程序正在泄露页面。
否则,可以通过编辑注册表来检测导致错误的驱动程序:
在 \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 注册表项中,创建或编辑 TrackLockedPages 值,然后将其设置为等于 DWORD 1。
重新启动计算机。
然后,系统会保存堆栈跟踪,以便轻松识别导致问题的驱动程序。 如果驱动程序再次导致相同的错误,则会发出 Bug 检查 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS),并在蓝屏上显示导致此错误的驱动程序名称,同时将其存储在内存中的位置 (PUNICODE_STRING) KiBugCheckDriver 中。
如果参数 1 的值为 0x1
检查锁定和解锁内存的驱动程序源代码,并尝试内存在未锁定的情况下被解锁的实例。