目录
一、蓝屏造成原因
关于停止错误(蓝屏或者错误检查)没有简单的解释,包含很多因素,目前大量研究表明停止错误通常不是由微软Windows组件导致的,而是厂商的硬件驱动或者三方软件的驱动,包括声卡、无线网卡、安全程序等等。
crash的根因一般都是由三方驱动代码引起的,另外一小部分是硬件问题和微软代码导致,还有一部分的原因未知由于内存崩溃导致无法分析。
蓝屏一般不会由用户模式进行导致的,一般用户模式的进程如记事本等可能引起停止错误,这种情况也是驱动/硬件/OS的bug导致的。
二、通常的排查步骤
1、查看停止错误码,在线搜索是否有对应的已知问题、解决方案。
2、确认已经安装了最新的Windows更新、累积更新以及汇总更新,以及BIOS和FW也是最新的,运行相关的硬件和内存测试。
3、运行Machine Memory Dump CollectorWindows诊断包,这个诊断工具用来收集机器内存转储文件以及检查已知的解决方案。
4、运行 Microsoft Safety Scanner 或者其他病毒检测程序。
5、确保磁盘可用空间足够,一般建议留15%。
6、联系硬件或者软件厂商去更新驱动或者应用。
问题的排查要关注:
- 一些错误的信息。这些信息可以暗示一些驱动造成这些问题
- 是否有做一些软件或者硬件上的更改。
三、Debug步骤
1、确保crash发生时会产生一个完全内存转储文件,将crash机器的dump文件拷贝到另外一台计算机上进行debug分析
2、打开windbg工具以及dump文件。

3、界面中Bugcheck Analysis下面将会显示 !analyze -v,点击!analyze -v进行分析。

4、STACK_TEXT显示了造成crash的dll以及某个服务正在服务dll。一个bugcheck的可能原因有多狠,每个停止错误案例都有自己独特的原因。
Console
1 : nt!KeBugCheckEx
2 : nt!PspCatchCriticalBreak+0xff
3 : nt!PspTerminateAllThreads+0x1134cf
4 : nt!PspTerminateProcess+0xe0
5 : nt!NtTerminateProcess+0xa9
6 : nt!KiSystemServiceCopyEnd+0x13
7 : nt!KiServiceLinkage
8 : nt!KiDispatchException+0x1107fe
9 : nt!KiFastFailDispatch+0xe4
10 : nt!KiRaiseSecurityCheckFailure+0x3d3
11 : ntdll!RtlpHpFreeWithExceptionProtection$filt$0+0x44
12 : ntdll!_C_specific_handler+0x96
13 : ntdll!RtlpExecuteHandlerForException+0xd
14 : ntdll!RtlDispatchException+0x358
15 : ntdll!KiUserExceptionDispatch+0x2e
16 : ntdll!RtlpHpVsContextFree+0x11e
17 : ntdll!RtlpHpFreeHeap+0x48c
18 : ntdll!RtlpHpFreeWithExceptionProtection+0xda
19 : ntdll!RtlFreeHeap+0x24a
20 : FWPolicyIOMgr!FwBinariesFree+0xa7c2
21 : mpssvc!FwMoneisDiagEdpPolicyUpdate+0x1584f
22 : mpssvc!FwEdpMonUpdate+0x6c
23 : ntdll!RtlpWnfWalkUserSubscriptionList+0x29b
24 : ntdll!RtlpWnfProcessCurrentDescriptor+0x105
25 : ntdll!RtlpWnfNotificationThread+0x80
26 : ntdll!TppExecuteWaitCallback+0xe1
27 : ntdll!TppWorkerThread+0x8d0
28 : KERNEL32!BaseThreadInitThunk+0x14
29 : ntdll!RtlUserThreadStart+0x21
5、这个问题的Windows防火墙的一个组件mpssvc,修复的方法是暂时禁用防火墙然后重置防火墙。
四、使用Driver Verifier进行排查
大约75%的停止错误都是由驱动错误引起,Driver Verifier工具可以提供一些方法来帮助排查,这包括在一个独立的内存中运行驱动,产生极限内存压力以及验证参数。具体开启方法为:
1、Win+R,打开运行窗口; 2、输入verifier.exe,回车运行Driver Verifier工具; 3、根据需要进行验证设置。
Driver Verifier会消耗大量的CPU而且会影响计算机效率,可能会导致额外的crash。验证器在停止错误出现后禁用错误驱动知道成功重启系统进入桌面,这将会在系统下保留几个创建的dump文件。因此,不要试图通过一次操作验证所有的驱动,这会降低行性能并使系统变得不可用。一般在以下情况开启验证器:
1、测试一些特殊的驱动,比如最近有更新或者存在已知问题
2、一些无法分析的crash,启动所有第三方驱动和未签名的驱动验证
3、10-20个驱动为一组进行验证
4、某些情况可能会因为Driver Verifier导致机器不能启动,可以通过打开安全模式来禁用工具,因为工具在安全模式下不能运行。
五、Debug示例
1、分析示例 1
这个bugcheck是在更新期间一个驱动发生hang导致微软的NDIS.sys出现bugcheck D1。 IMAGE_NAME显示了faulting driver,但是由于这个是微软的驱动所以不可以被代替或者移除,所以解决方案是在设备管理器中disable掉网络设备然后尝试更新。
Console
2: kd> !analyze -v
*******************************

最低0.47元/天 解锁文章
3008





