windows系统日志分析

Windows系统日志分析是指对Windows操作系统生成的日志进行收集、处理、分析和挖掘,以便于管理员对系统异常行为、安全事件、性能瓶颈等问题进行诊断和解决 。这些日志包括应用程序日志、系统日志、安全日志等,通过分析这些日志可以有效地监控系统的运行状况、进行事件溯源和错误排查,提高系统的安全性和可靠性 。
这两天有用户反馈,其 *** 的Windows 11 22H2镜像,启动后事件日志查看器无法打开,在"服务"管理中查看"Windows event log"服务是停止状态,启动"Windows event log"服务提示1067错误,也即"程序意外结束",这真是少有的现象,事件日志服务很重要,对排查计算机软硬件相关问题特别有用,没想到本次碰到了无法通过事件查看器查看事件日志服务无法启动的问题,笑哭!
事件日志服务是由宿主程序svchOst.exe启动的,先用黑盒 *** 观察一下 。微软Sysinternals提供了工具Process Monitor,其强大功能之一就是能查看调用堆栈,拿它来看进程崩溃到哪里了 。通过在Windows error reporting进程被拉起前的一个进程事件堆栈可见事件日志服务崩溃在了wevtsvc.dll的0x30910处:
崩溃在wevtsvc.dll的0x30910处
由于用户说早前Windows 10上没有此类现象,所以产生了一个暴力的想法,把Windows 10版本的wevtsvc.dll替换到Windows 11上面,经测试,一次成功!
【windows系统日志分析】虽然解决,但感觉Windows 11上使用Windows 10的dll还是有点不纯粹 。于是打开Windbg,搞起双机调试环境后,原本还想通过一步步设断跟踪到svchost加载wevtsvc.dll,结果一启动事件日志服务,Windbg就捕获到崩溃,很爽,直接kb看堆栈吧:
Windbg显示的事件日志服务崩溃堆栈
可见服务崩溃在wevtsvc.dll的OSEventsWriteTimeStamp函数处,看函数名意思是与写OS事件相关的时间戳有关,0x30910崩溃处指令是div ecx 。由于是静态分析,看看调用和被调用函数吧,结果发现函数OsEventsTimestampInterval调用到注册表,与时间戳相关:
与时间戳相关的操作
所以又产生一个暴力想法(对,为快速解决问题,用暴力的),直接删除相关的注册表项特别是TimestampEnabled和TimestampInterval是否可以呢?
随即打开注册表,删除HKEY\LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Reliability下注册表,看注册表项名称似乎与关机机制相关:
Reliability注册表内容
删除注册表后,立竿见影,事件日志服务可正常启动了,点击事件日志查看器查看系统日志,也可正常展示 。
到此,问题得到相对完美的解决 。不过很难说到底是Windows 11的bug还是镜像 *** 产生的问题,因为据反馈正常硬盘安装的Windows 11没有这个问题 。有时间再更进一步深入啦,随手查了一下TimeStampInterval和TimeStampEnabled的相关信息,它是一个Windows策略:

windows系统日志分析

文章插图
Windows与此相关的策略
windows系统日志分析

文章插图
TimestampEnabled和TimestampInterval注册表项取值
也有称之为Windows系统的心跳设置,它每隔一个TimestampInterval记录下时间戳,可以用来推测蓝屏或拔电等意外关机的大概时间,准确度依赖设置的TimestampInterval的精度了 。
后续:经测试,禁用该策略和删除前述TimestampInterval均可 。知之为知之,不知为不知,是知焉 。

    推荐阅读