微软Windows系统蓝屏csagent.sys/C-00000291*.sys/批量解决探讨
今天下午全球很多Windows 电脑蓝屏已经登上热搜了。全球受影响的打工人(牛马)都在狂欢提前庆祝下班, 但是IT 工程师要忙到崩溃了~
该起问题的起因是CrowdStrike 公司的安全软件发布了某个更新导致的, 我们从蓝屏界面上看到的csagent.sys 就是这个安全软件的驱动程序。
也就是说这个问题本质上跟微软半毛钱关系没有, 是安全软件厂商CrowdStrike的内核驱动csagent.sys 导致的。但是微软今天被不明吃瓜群众直接顶上热搜了~
那针对该问题最新的进展,微软方面:
发布了一个状态更新链接:
https://azure.status.microsoft/en-us/status
大概的意思就是, 问题是Crowdstrike Falcon 导致的。
CrowdStrike 发布的声明在此:
https://www.crowdstrike.com/blog/statement-on-windows-sensor-update/
CrowdStrike 的声明真是一堆废话,说部署了修复程序,但是完全没提已经蓝屏的机器如何修复。
微软提供的声明中提到临时缓解方法是进入WINPE删除:c:\windows\system32\drivers\crowdstrike 目录下的C-00000291*.sys 文件.
微软的文档中还提到,重启15次左右也可能会好。。。
下午听到一个朋友说,某个公司全部的机器都蓝屏起不来了。如果有大量的机器无法启动,逐个操作修复也太慢了。
对于手动修复,如果有不懂的,我这边以虚拟机为例演示下,正常情况下Win10/win11 强制重启3次会进入恢复模式的。
我们可以先给这个Hyper-v 虚拟机按Reset 按钮强制重启。(物理机就是按住电源强制重启)
然后在启动的早期阶段,按Reset 按钮继续reset。
重复操作三次后,我们就会发现机器进入自动修复模式了
然后我们就会看到如下界面,这个时候就可以点击图中的Advanced Options了。
然后点击Troubleshoot
进一步点击Advanced Options
然后点击Command Prompt
这样我们就进入WINPE 模式了,可以在命令后里面删除那个C-00000291*.sys文件了。
然后输入如下命令后删除文件。
c:
cd windows
cd system32
cd drivers
cd crowdstrike
del C-00000291*
exit
然后重启机器应该就可以进入系统了。当然,如果有第三方磁盘加密方案比如Mcafee 的,或者微软的BitLocker 加密的,都需要先提前解密磁盘的,然后才能进WINPE 删除文件的。
针对部分非微软云,主要指KVM/openstack 平台的云机器,WINRE 中可能没有Viostor 驱动的,进入恢复模式后就无法看到磁盘的,需要手动通过drvload xxx.inf 方式来加载对应的驱动文件,xxx是对应的驱动文件名inf名称。 然后就可以看到对应的磁盘了,或者通过dism 把驱动离线导入winre.wim 中,做成模板,这样部署出来的机器的WINRE 里面都有驱动了。
上面是单台机器的修复方法,那如果一个企业有500台或者1000台客户端,是否有办法批量做呢?让IT 挨个做要把IT 累死了。
如果有1000台笔记本或者台式机有这个问题,并且磁盘是没有BitLocker 加密的,我们可以尝试如下方案:
制作一个可以自动删除C-00000291*.sys 的WINPE。
部署一台WDS(PXE)服务器。
导入制作好的WINPE。
将机器配置从网卡启动自动加载WINPE 执行删除文件的动作。
那首先我们要制作一个WINPE 对吧。 详细步骤如下:
在Windows 11 上下载ADK 安装。
下载地址:https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install
下图中红框内的两个都要下载:
下载的文件如下:
先安装adksetup.exe.
只要勾选Deployment Tools然后点击Install.
等待安装完成:
4. 安装adkwinpesetup.exe。
5. 在开始菜单中找到Deployment and Imaging Tools Environment并以管理员权限运行。
6. 根据如下文章中的步骤来制作一个winpe。
8.我们需要的WINPE 文件就是Boot.wim就被生成在如下目录:
C:\WinPE_amd64\media\sources
9.我们需要把boot 给挂载起来,添加自动化脚本。以管理员身份启动
一个PowerShellISE。
10. 执行 cd C:\WinPE_amd64\media\sources 切换目录
11.执行 Get-WindowsImage -ImagePath .\boot.wim 查看Wim信息
12. 执行 md mount 创建一个mount文件夹。
13.挂载boot.wim 到mount 文件夹。命令如下:
Mount-WindowsImage -Path .\mount -ImagePath .\boot.wim -Index 1
14. 借助chatgpt 写个bat 脚本来删除目标文件C-00000291*.sys。
15. 我们本地新建了一个test.bat 来测试这个脚本。执行发现报错拒绝访问,这个不用担心,因为我们稍后会在WINPE 里面跑,不会遇到这个报错。
我们在E盘同样的目录也放一个同名文件试试。
然后E 盘的目标文件成功被删除。
16.我们需要把做好的bat 放到下面PE 目录下。
C:\WinPE_amd64\media\sources\mount
17.配置WINPE 让其启动的时候就执行这个DelCrowdSys.bat。
找到
C:\WinPE_amd64\media\sources\mount\Windows\System32
目录下的startnet.cmd,不能直接右击编辑。
先以管理员身份打开一个notepad
点击Yes
然后点击File=>open 来打开下面的文件:
C:\WinPE_amd64\media\sources\mount\Windows\System32\
startnet.cmd
18.在wpeinit下一行填写x:\DelCrowdSys.bat
然后保存文件。这样WINPE 启动的时候就会自动执行这个bat 了。
19.然后我们关闭所有C:\WinPE_amd64 相关的窗口。
20.回到PowerShellISE 窗口执行命令保存更改。
这个操作就是把刚刚挂在的mount文件夹里面的更改保存到boot.wim
Dismount-WindowsImage -Path .\mount -Save
21. 先boot.wim 启动后就可以自动查找所有盘下面对应目录的驱动
了.
Windows/System32/Drivers/CrowdStrike/C00000291*.sys
22. 然后我们需要把这个文件拷贝到WDS服务器上,用于PXE启动。
"C:\WinPE_amd64\media\sources\boot.wim"
23. 打开WDS 控制台。
24. 然后导入boot.wim
25. 现在我们就把刚刚那个win11 关机,让其PXE 启动测试下。
调整启动顺序,让其从网卡启动。
26. 启动虚拟机,按会车开始PXE启动。
27.启动后我们看到脚本自动执行,删除有问题的文件。
可以看到文件已经删除了。
重新验证了一次,确认所有盘下面这个目录下的对应驱动都删除。
28.用户按回车后,就可以自动重启。正常进入系统啦!!
用到的PowerShell 命令行如下:
大家有任何疑问欢迎留言讨论~
中间因为之前的WDS 不工作,浪费了2个小时~后来干脆在DC上重新
部署了WDS,终于工作啦~
码字不易,感谢阅读~欢迎转载~转发~