PROCESS_HAS_LOCKED_PAGES蓝屏是内核主动终止以防止内存管理紊乱,主因是第三方驱动未释放锁定页;启用TrackLockedPages注册表项(设为1)可使下次蓝屏直接显示问题驱动名,如dxgkrnl.sys或rt640x64.sys,定位后应立即删除该值。

PROCESS_HAS_LOCKED_PAGES 是 Windows 内核检测到某个驱动或程序在退出前没释放锁定的物理内存页,直接触发强制蓝屏。这不是系统崩溃,而是内核主动“叫停”——因为继续运行可能引发更严重的内存管理紊乱。它几乎总是第三方驱动的问题,极少由硬件本身导致(除非内存条已损坏且被驱动误用)。
怎么快速定位是哪个驱动在作祟
启用TrackLockedPages 是最有效的第一招,它会让系统在下次蓝屏时直接显示问题驱动名,而不是只给一堆地址。
操作步骤:
- 以管理员身份运行
regedit - 导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management - 右键空白处 → 新建 →
DWORD (32位)值→ 命名为TrackLockedPages - 双击该值,将数值数据设为
1,基数选“十进制” - 重启电脑
重启后如果再次蓝屏,错误信息里大概率会直接出现类似 dxgkrnl.sys 或 rt640x64.sys 这样的驱动文件名。注意:这个注册表项只在下一次触发时生效,查到驱动后建议立即删掉该值,避免长期开启带来轻微性能开销。
显卡/网卡/声卡驱动是高危重灾区
近30天内更新过的驱动,尤其是以下几类,出问题概率极高:-
nvlddmkm.sys(NVIDIA 显卡驱动) -
atikmdag.sys(AMD 显卡驱动) -
rt640x64.sys(Realtek 8111/8168 网卡) -
CS42xx.sys或cxadc64.sys(Conexant 声卡) -
asmtxhci.sys(ASMedia USB 3.0 控制器)
不要依赖“更新驱动”按钮自动升级。进设备管理器 → 右键对应设备 → “属性” → “驱动程序”选项卡 → 查看“驱动程序日期”。若发现是上周刚更新的,优先尝试回滚(“回退驱动程序”)。若按钮灰掉,说明没有旧版备份,就得去官网手动下载上一个稳定版安装包,**卸载时勾选“删除驱动软件”再重装**。
关掉几个看似无害但实际会干扰内存管理的服务和功能
这些不是“病因”,但会放大驱动缺陷的后果,尤其在低内存或高负载场景下:- 关闭快速启动:控制面板 → 电源选项 → “选择电源按钮的功能” → “更改当前不可用的设置” → 取消勾选“启用快速启动”
- 禁用
SysMain(原 Superfetch)服务:运行services.msc→ 找到SysMain→ 右键 → 属性 → 启动类型改为“禁用” - 禁用
Windows Search服务:同上,找到后禁用 - 停用内存压缩(非必须,但可排除干扰):管理员 CMD 运行
dism /online /disable-feature /featurename:Microsoft-Windows-Shell-Compression /norestart,然后重启
这几项对 SSD 用户基本无感知影响,但能显著降低 PROCESS_HAS_LOCKED_PAGES 的复现频率。
别忽略开发环境里的“伪驱动”行为
如果你在调试 C#、C++ 或 WPF 程序(比如用 VS2017/2019),点击“停止调试”后立刻蓝屏,问题可能不在系统驱动,而在程序调用了底层 API 锁定内存却未正确释放:- .NET 4.5+ 中某些
NetworkInterface或Ping类操作,在调试器中断时可能触发异常内存锁定路径 - 使用了非托管代码(如
Marshal.AllocHGlobal+ 未配对FreeHGlobal)或自定义内存池 - WPF 渲染线程与 DirectX 资源释放时机冲突(尤其在多显示器或缩放设置下)
这种情况下,TrackLockedPages 可能不会指向系统驱动,而是显示你的程序模块名(如 YourApp.exe)。此时需检查调试配置、禁用“启用本机代码调试”,或临时降级到 .NET Framework 4.0 运行时验证是否缓解。
真正麻烦的是那种不报具体驱动名、每次蓝屏堆栈都略有不同的情况——说明问题模块在动态加载或存在竞态条件。这时候得靠 !analyze -v 在 WinDbg 中分析内存转储,而不仅仅是改注册表。


















