记录一次 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.dmpWATCHDOG4400-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 的文件过滤驱动
  • AliPaladinEx64DsArk64:阿里和另一款安全过滤驱动

这里最关键的发现是 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 看所有处理器的栈,就能直接点名是哪一行代码。

处理建议

按性价比排序:

  1. 停用或卸载向日葵的虚拟显卡驱动(OrayVGC)。不远程时直接退出向日葵,并在设备管理器里禁用”向日葵虚拟显卡”。这是最直接的一步。
  2. 精简 360 的文件过滤层,临时关闭实时扫描做对照测试。
  3. 用 DDU 彻底卸载后重装 NVIDIA 显卡驱动。
  4. 把 C 盘从 10G 出头腾到 20G~30G 以上。

奚叔:直接卸载向日葵!!!