记录一次 Windows 卡死排查记录:DPC 看门狗超时导致桌面冻结
问题现象
这个问题其实不止发生过一次,大概之前也有过几次,机器突然完全卡死,只有一次好像是过了一段很长的时间后就好了。具体表现:
- 屏幕画面冻结在最后一帧,不是黑屏,刚开始可能可以调用一些窗口,但是一旦操作就不行了,之后可能过好几分钟会突然动一次,然后又不行了;
- 鼠标可以正常移动,键盘 CapsLock 灯按了会亮,打字有时候也有反馈;
- Ctrl+Alt+Del、Ctrl+Shift+Esc 调任务管理器、Win+Ctrl+Shift+B 重置显卡,全部没有反应;
- 超过20分钟无任何效果之后,我只能长按电源键强制重启。
正好今天上午又发生了,这对于我来说非常难受,明明是可以移动鼠标键盘的,所以我这次想要认真排查一下。(之前也用过豆包,但好像不行,所以这次我决定使用 Agent 来协助调查,并且我觉得这个是有记录意义的一件事情:符合由人类主导+AI执行的一个最佳实践)
以下内容是通过 Hy3 协同调查 Windows 卡死原因的产物,仅供参考
排查过程
第一步,看系统事件日志
系统日志里有一条 Kernel-Power 的 Event 41,BugcheckCode 为 0。这说明上次不是正常关机,也不是蓝屏崩溃,而是被人强制断电,和“只能长按电源重启”能对上。不过 Event 41 本身不告诉我们卡死原因,只是确认了“是被硬关机的”。
第二步,找到看门狗转储文件
Windows 在内核检测到严重卡死时,会在 C:\Windows\LiveKernelReports\WATCHDOG\ 目录留下转储文件。我在里面找到了当天 09:11 生成的两个文件:WATCHDOG-20260823-0911.dmp 和 WATCHDOG4400-20260823-0911.dmp。
落在这个目录,说明是 DPC 看门狗违例:某个内核驱动在 DPC/中断里占用 CPU 太久,系统线程被全部卡住,画面因此冻住;但鼠标和键盘灯走的是硬件中断,所以还活着。
这也解释了为什么 Ctrl+Alt+Del 都进不去。那条命令要走系统线程,而系统线程已经被占死了。
第三步,用 WinDbg 做符号化分析
把转储文件交给 WinDbg 跑 !analyze -v,得到的关键信息:
- BugCheck 1A8,参数
{1,0,0,0} - 出问题的进程是
dwm.exe(桌面窗口管理器) - 栈顶是 watchdog 的超时报告回调
也就是说,卡死发生在 DWM 的图形合成路径上,是被看门狗抓到的。
补充一句:0x1A8 在旧版 WinDbg 里会被误报成内存损坏,实际并不是内存条的问题,这个误报要排除掉。
第四步,看冻结瞬间内核里都加载了哪些驱动
进一步列出故障时刻的已加载内核模块,重点嫌疑集中在图形路径上:
nvlddmkm.sys:NVIDIA 独立显卡驱动dxgkrnl.sys/dxgmms2.sys:显卡内核栈OrayVGC.sys:向日葵(贝锐)的虚拟显卡驱动360FsFlt.sys/360qpesv64.sys等:360 的文件过滤驱动AliPaladinEx64、DsArk64:阿里和另一款安全过滤驱动
这里最关键的发现是 OrayVGC.sys。它是向日葵往系统里插的一个虚拟显卡驱动,会在内核里常驻,直接叠在 NVIDIA 驱动和 DWM 的同一图形 DPC 路径上。虚拟显卡驱动和真实显卡驱动抢同一条中断链,很容易把 DPC 看门狗触发,把 DWM 一起焊死。
另外这台机器同时堆了 360、阿里、DsArk 等多层文件过滤驱动(约十几个 360 内核模块常驻),每次磁盘 I/O 都要逐层扫描。而当时 C 盘 150G 只剩 10G 出头(约 93% 满),磁盘一旦繁忙,小卡顿很容易被放大成死锁。这些虽然不是直接原因,但都是放大器。
结论
这次卡死的根因,是向日葵的虚拟显卡驱动(OrayVGC.sys)常驻内核,和 NVIDIA 显卡驱动在图形 DPC 路径上冲突,触发 DPC 看门狗超时,把桌面窗口管理器(DWM)冻结,整个系统因此失去响应。360 的多层文件过滤驱动和 C 盘空间严重不足,是让问题更容易发生的放大器。
说明一下置信度:这两个 WATCHDOG 转储是轻量的分诊转储,只保存了看门狗自己的现场,不包含其他处理器卡死瞬间的完整调用栈,所以上面是基于实锤证据的强归因,还差一步才能字面定稿。要完全坐实,可以在下次再卡的时候开启注册表的 CrashOnCtrlScroll,按右 Ctrl + ScrollLock 两次逼出一个完整内核转储,再用 WinDbg 看所有处理器的栈,就能直接点名是哪一行代码。
处理建议
按性价比排序:
- 停用或卸载向日葵的虚拟显卡驱动(OrayVGC)。不远程时直接退出向日葵,并在设备管理器里禁用”向日葵虚拟显卡”。这是最直接的一步。
- 精简 360 的文件过滤层,临时关闭实时扫描做对照测试。
- 用 DDU 彻底卸载后重装 NVIDIA 显卡驱动。
- 把 C 盘从 10G 出头腾到 20G~30G 以上。
奚叔:直接卸载向日葵!!!