背景
诸如Windows卡死或应用程序不明原因卡住等问题,如果我们怀疑是某个驱动导致,我们可以在dmp中查看此驱动所在的内核调用栈,看看是否此驱动调用了某些Windows同步函数而卡住。
方法
!stacks 2 [驱动名]
例如我怀疑是RegFilter.sys导致的Windows卡住,我可在系统dump中执行
0: kd> !stacks 2 RegFilter
Proc.Thread .Thread Ticks ThreadState Blocker
[fffff80004246680 Idle]
[fffffa80c7b7b5c0 System]
4.0001f4 fffffa80ca29f930 00075f1 Blocked nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeWaitForSingleObject+0x1a3
RegFilter+0x17d6d
nt!PspSystemThreadStartup+0x194
nt!KiStartSystemThread+0x16
[fffffa80ca530b00 smss.exe]
[fffffa80cb11bb00 csrss.exe]
[fffffa80cb50db00 wininit.exe]
[fffffa80cb35ab00 csrss.exe]
[fffffa80cb594b00 winlogon.exe]
[fffffa80cb59c060 services.exe]
[fffffa80cb5b1060 lsass.exe]
[fffffa80cb5b9530 lsm.exe]
[fffffa80cb53b060 svchost.exe]
354.00034c fffffa80cb62c060 002bca8 Blocked nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeWaitForSingleObject+0x1a3
nt!KiAcquireFastMutex+0x4e
nt!ExAcquireFastMutex+0x45
RegFilter+0x59cd
RegFilter+0x8781
RegFilter+0x9cec
nt!CmpCallCallBacks+0x1c0
nt! ?? ::NNGAKEGL::`string'+0x38bd0
nt!KiSystemServiceCopyEnd+0x13
+0x77069aca
……
留意此处的Blocked。线程fffffa80ca29f930和fffffa80cb62c060 002bca8他们的调用栈就有RegFilter调用nt!ExAcquireFastMutex进而卡住。
下一步就联系RegFilter的开发者,反馈此类卡住在许多线程中存在是否正常。