蓝屏代码0x00000109 错误分析

背景:
近2~3天win10频繁出现CRITICAL_STRUCTURE_CORRUPTION故障

暂无法100%复现该蓝屏故障,无法确定是windows补丁、硬件驱动、第三方软件哪一方导致的问题,需要参考系统日志进行蓝屏故障分析。

参考资料:
MicroSoft:停止错误或蓝屏错误问题的高级疑难解答
MicroSoft:Windows调试工具
MicroSoft:109错误代码
MicroSoft:社区专家建议

  • 环境:
    Windows 10 Pro
  • 工具:
    winDbg Privew (winDbg的新版)
  • 参考日志
    windows 系统日志
    miniDump 小内存转储文件
  • 分析流程
    参考windows系统日志进行初步分析
    使用winDbg工具,进一步分析dump信息

一、故障描述

在这里插入图片描述

图1.1 蓝屏故障现象

在这里插入图片描述

图1.2 微软文档对该错误的解释

系统发生蓝屏,故障描述为CRITICAL_STRUCTURE_CORRUPTION ,官方文档解释为:内核已检测到关键的内核代码或数据损坏

二、初步分析

查看蓝屏代码,无法获取具体的蓝屏信息,需要查看系统日志,跟踪到蓝屏时间的系统日志。

查看系统日志:win+r ==》 eventvwr

在这里插入图片描述

图2.1 系统正常运行日志

在这里插入图片描述

图2.2 蓝屏日志

在这里插入图片描述

图2.3 蓝屏后系统自动重启日志

查看系统日志可以发现,系统于9:06发生蓝屏错误,具体蓝屏代码为0x00000109,结合网友提供的参考信息及微软文档,可以初步判断是内核代码被篡改导致的系统崩溃

三、进一步分析

通过基本分析,暂无法得出蓝屏的详细信息。造成蓝屏的问题很多,涉及系统补丁、驱动程序、第三方软件、病毒、硬件不可靠等诸多因素,需要进一步使用dump文件进行分析。

1、设置系统搜集dump故障转储文件

写这篇文章时,本机dump日志已经是开启状态,因此可以直接获取dump到文件,用windbg工具进行分析。
在这里插入图片描述

图3.1 设置转储文件

在这里插入图片描述

图3.2 转储文件类型

转储文件类型较多,不同类型记录的日志详细状况不一,建议设置为小内存转储(数百KB~数MB)即可,如日志信息不够详细,可进一步设置为更详细的完全内存转储(约数百MB)

2、配置winDbg分析软件

在这里插入图片描述

图3.3 使用dump文件分析工具

可以使用微软官方提供的WinDbg工具,或新版的WinDbg Priview进行分析。

在这里插入图片描述

图3.4 新版WinDbg Preview 主界面

在这里插入图片描述

图3.5 联网状态下自动下载符号文件

新版分析工具较旧版本在界面上有所改动,可以看到打开工具时,右下角提示,已经获取到最新的dump文件,是否立即开始分析?同意后,在联网的状态下,会自动从MSDN在线下载分析dump所需的符号文件。联网在线下载符号文件这一点,倒是很方便的一个功能。

注意: 脱机状态下,需要手动从msdn下载符号文件,并在WinDbg分析工具中设置符号文件路径。
在这里插入图片描述

图3.6 符号文件联网下载完毕

3、使用dump文件开始分析

在这里插入图片描述

图3.7 点击开始进行分析

鼠标点击 !analyze -v 开始进行分析,有缺少的符号文件,联网状态下,也会自动补充更新。

4、bugcheck 原文
...........................
For analysis of this file, run !analyze -v
nt!KeBugCheckEx:
fffff800`3d59d900 48894c2408      mov     qword ptr [rsp+8],rcx ss:0018:fffff90b`8400cd30=0000000000000109
4: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

CRITICAL_STRUCTURE_CORRUPTION (109)
This bugcheck is generated when the kernel detects that critical kernel code or
data have been corrupted. There are generally three causes for a corruption:
1) A driver has inadvertently or deliberately modified critical kernel code
 or data. See http://www.microsoft.com/whdc/driver/kernel/64bitPatching.mspx
2) A developer attempted to set a normal kernel breakpoint using a kernel
 debugger that was not attached when the system was booted. Normal breakpoints,
 "bp", can only be set if the debugger is attached at boot time. Hardware
 breakpoints, "ba", can be set at any time.
3) A hardware corruption occurred, e.g. failing RAM holding kernel code or data.
Arguments:
Arg1: a3a01865857cf4e9, Reserved
Arg2: b3b724ebd7fd3a7c, Reserved
Arg3: fffff8003d758e60, Failure type dependent information
Arg4: 000000000000001e, Type of corrupted region, can be
	0   : A generic data region
	1   : Modification of a function or .pdata
	2   : A processor IDT
	3   : A processor GDT
	4   : Type 1 process list corruption
	5   : Type 2 process list corruption
	6   : Debug routine modification
	7   : Critical MSR modification
	8   : Object type
	9   : A processor IVT
	a   : Modification of a system service function
	b   : A generic session data region
	c   : Modification of a session function or .pdata
	d   : Modification of an import table
	e   : Modification of a session import table
	f   : Ps Win32 callout modification
	10  : Debug switch routine modification
	11  : IRP allocator modification
	12  : Driver call dispatcher modification
	13  : IRP completion dispatcher modification
	14  : IRP deallocator modification
	15  : A processor control register
	16  : Critical floating point control register modification
	17  : Local APIC modification
	18  : Kernel notification callout modification
	19  : Loaded module list modification
	1a  : Type 3 process list corruption
	1b  : Type 4 process list corruption
	1c  : Driver object corruption
	1d  : Executive callback object modification
	1e  : Modification of module padding
	1f  : Modification of a protected process
	20  : A generic data region
	21  : A page hash mismatch
	22  : A session page hash mismatch
	23  : Load config directory modification
	24  : Inverted function table modification
	25  : Session configuration modification
	26  : An extended processor control register
	27  : Type 1 pool corruption
	28  : Type 2 pool corruption
	29  : Type 3 pool corruption
	2a  : Type 4 pool corruption
	2b  : Modification of a function or .pdata
	2c  : Image integrity corruption
	2d  : Processor misconfiguration
	2e  : Type 5 process list corruption
	2f  : Process shadow corruption
	30  : Retpoline code page corruption
	101 : General pool corruption
	102 : Modification of win32k.sys

Debugging Details:
------------------


KEY_VALUES_STRING: 1

    Key  : Analysis.CPU.mSec
    Value: 2484

    Key  : Analysis.DebugAnalysisProvider.CPP
    Value: Create: 8007007e on LEE-RAZER

    Key  : Analysis.DebugData
    Value: CreateObject

    Key  : Analysis.DebugModel
    Value: CreateObject

    Key  : Analysis.Elapsed.mSec
    Value: 63811

    Key  : Analysis.Memory.CommitPeak.Mb
    Value: 78

    Key  : Analysis.System
    Value: CreateObject


ADDITIONAL_XML: 1

OS_BUILD_LAYERS: 1

DUMP_FILE_ATTRIBUTES: 0x8
  Kernel Generated Triage Dump

BUGCHECK_CODE:  109

BUGCHECK_P1: a3a01865857cf4e9

BUGCHECK_P2: b3b724ebd7fd3a7c

BUGCHECK_P3: fffff8003d758e60

BUGCHECK_P4: 1e

BLACKBOXBSD: 1 (!blackboxbsd)


BLACKBOXNTFS: 1 (!blackboxntfs)


BLACKBOXPNP: 1 (!blackboxpnp)


BLACKBOXWINLOGON: 1

CUSTOMER_CRASH_COUNT:  1

PROCESS_NAME:  csrss.exe

STACK_TEXT:  
fffff90b`8400cd28 00000000`00000000     : 00000000`00000109 a3a01865`857cf4e9 b3b724eb`d7fd3a7c fffff800`3d758e60 : nt!KeBugCheckEx


SYMBOL_NAME:  nt!WriteRegisterWithIndex8+0

MODULE_NAME: nt

IMAGE_NAME:  ntkrnlmp.exe

IMAGE_VERSION:  10.0.19041.208

STACK_COMMAND:  .thread ; .cxr ; kb

BUCKET_ID_FUNC_OFFSET:  0

FAILURE_BUCKET_ID:  0x109_1e_nt!WriteRegisterWithIndex8

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 10

FAILURE_ID_HASH:  {3e8fc38d-21c8-e8b6-d6ca-09982167b347}

Followup:     MachineOwner
---------

报告给出了详细解释,只需要关注IMAGE_NAME即可,可以看到是ntkrnlmp.exe导致了系统异常
进一步,使用!process命令,查看是哪个进程调用了这个程序

4: kd> !process
PROCESS ffffd90ce3e43080
    SessionId: none  Cid: 034c    Peb: 4e44cbf000  ParentCid: 0294
    DirBase: 44d583000  ObjectTable: ffff89011114d080  HandleCount: <Data Not Accessible>
    Image: csrss.exe
    VadRoot ffffd90ce8b3dc20 Vads 215 Clone 0 Private 359. Modified 1638. Locked 0.
    DeviceMap ffff89010c0356c0
    Token                             ffff89011112c7f0
    ReadMemory error: Cannot get nt!KeMaximumIncrement value.
fffff78000000000: Unable to get shared data
    ElapsedTime                       00:00:00.000
    UserTime                          00:00:00.000
    KernelTime                        00:00:00.000
    QuotaPoolUsage[PagedPool]         312728
    QuotaPoolUsage[NonPagedPool]      29840
    Working Set Sizes (now,min,max)  (1786, 50, 345) (7144KB, 200KB, 1380KB)
    PeakWorkingSetSize                1762
    VirtualSize                       2101346 Mb
    PeakVirtualSize                   2101347 Mb
    PageFaultCount                    10458
    MemoryPriority                    BACKGROUND
    BasePriority                      13
    CommitCharge                      601

        *** Error in reading nt!_ETHREAD @ ffffd90ce3ee6080

跟踪进程上下文信息,可以看到,是csrss.exe调用ntkrnlmp.exe时,发生了error,具体是Cannot get nt!KeMaximumIncrement value无法获取到nt中最大的自增值(某个已共享的变量,但是调用时没有获取到)

四、初步结论

从windbg报告观察,是windows中的exe导致,非第三方软件、程序、驱动等。

1日后更正该结论,推翻了之前的主观判断 ----- 是windows软件导致:

经过微软建议,及自行排查,“鲁大师”有项服务自动设为了自启服务,结合windbg报告中–“内核已检测到关键的内核代码或数据损坏” 这一系统错误,“鲁大师”的服务项在系统中设置自启动后,极有可能导致了蓝屏。

五、解决办法

卸载第三方“鲁大师”,持续观察。

六、问题回顾

鲁大师确为近几天安装的,且是系统中唯一的第三方的安全、驱动类软件。在未曾手动设置启动项的情况下,鲁大师自行设置了某项服务为开机自启动。

经过windbg报告分析,蓝屏为系统某项可执行文件在执行时,导致程序错误。结合鲁大师的篡改启动项的行为,不能排除,在这个过程中,内核信息被篡改后发生错误,因而导致蓝屏。

遂进一步联系微软社区,提供dump文件,及涉及的exe程序,求助微软专家进行分析。
微软提供的建议
专家建议先检查系统文件,是否有和官方镜像不一致的文件(被篡改的文件),然后将不一致的文件进行还原。

系统文件完整性检查命令
1、使用管理员运行 PowerShell
2、扫描全部系统文件并和官方系统文件对比,扫描计算机中的不一致情况
   Dism /Online /Cleanup-Image /ScanHealth
   回车
3、Dism /Online /Cleanup-Image /CheckHealth
     回车
4、将和源镜像中不同的系统文件还原成官方系统源文件
   DISM /Online /Cleanup-image /RestoreHealth
   回车
5、sfc /SCANNOW
   回车
6、完成后重启
7、重启后再次执行
   sfc /SCANNOW

在这里插入图片描述

图5.1 系统完整性检查1

在这里插入图片描述

图5.1 重启后系统完整性检查2

经过系统文件完整性检查,发现系统文件无不一致的文件。不能完全排除第三方软件服务导致了蓝屏问题。

经检查发现鲁大师有一项开机自启服务,应是2月13~2月14日两天自行开启的服务。

鲁大师安装后,仅是用于检查本机硬件配置信息,已手动关闭所有启动项,且未曾手动设置开机自启服务,不知为何会在近2天内,该服务项自动设为了开机自启

无法排除鲁大师导致蓝屏的原因,卸载鲁大师,持续观察系统是否有异常蓝屏情况。

2021年2月15日 15点08分

按照日常使用频率,正常使用电脑,观察1天,未发现异常。

2021年2月27日

发生数次109蓝屏,升级系统至win10 H20版本,暂未发现蓝屏问题。系统升级疑似解决了这个问题。

后记:蓝屏问题比较难以定位真正的蓝屏原因,往往以强制卸载新增的应用、服务收场,但确有效果。本文记录了排查、分析蓝屏问题的一个步骤,按照此方法可以缩小蓝屏原因的范围,可供给各位读者一个参考。

其他蓝屏问题处理过程:
传送门1:蓝屏代码0x1000007e 错误分析
传送门2:记一次Tencent组件Brvsd.sys导致的蓝屏故障
传送门3:记一次Tencent组件Brvsd.sys导致的蓝屏故障(二)

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jerryzhou;

您的鼓励,将是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值