www. On IT Road .com

原因

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

解决方法

!analyze 调试扩展显示有关错误检查的信息,有助于确定根本原因。
详细步骤查看我们的教程 在windows 中使用WinDBG 调试dmp文件

如果参数 1 值为 0x0

首先在整个物理内存中的当前进程指针上使用 !search 扩展。

此扩展可能会找到至少一个指向当前进程的内存描述符列表 (MDL)。
接下来,对找到的每个 MDL 使用 !search 以获取指向当前进程的 I/O 请求数据包 (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

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

Windows 蓝屏代码 0x76:PROCESS_HAS_LOCKED_PAGES

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

PROCESS_HAS_LOCKED_PAGES 参数

Parameter 1参数 2参数 3参数 4错误原因
0x00指向进程对象的指针锁定页面的数量指向驱动程序堆栈的指针(如果它们已启用)。否则,此参数为零。被终止的进程锁定了内存页。在进程终止之前,驱动程序必须解锁它可能在进程中锁定的任何内存。
0x01由驱动程序指定的 MDL该进程中锁定内存页的当前数量指向该进程的驱动程序堆栈的指针(如果它们已启用)。否则,此参数为零。驱动程序正在尝试解锁未锁定的进程内存页。
日期:2020-09-17 00:16:02 来源:oir作者:oir