查看原文
科技

微软Windows系统蓝屏csagent.sys/C-00000291*.sys/批量解决探讨

小声漫谈 小声漫谈
2024-07-20

今天下午全球很多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 加密的,我们可以尝试如下方案:

  1. 制作一个可以自动删除C-00000291*.sys 的WINPE。

  2. 部署一台WDS(PXE)服务器。

  3. 导入制作好的WINPE。

  4. 将机器配置从网卡启动自动加载WINPE 执行删除文件的动作。 


那首先我们要制作一个WINPE 对吧。 详细步骤如下:

  1. 在Windows 11 上下载ADK 安装。


    下载地址:https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install


    下图中红框内的两个都要下载:



  2. 下载的文件如下:



  3. 先安装adksetup.exe.


只要勾选Deployment Tools然后点击Install.

等待安装完成:

4. 安装adkwinpesetup.exe。

5. 在开始菜单中找到Deployment and Imaging Tools Environment并以管理员权限运行。

6. 根据如下文章中的步骤来制作一个winpe。

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-create-usb-bootable-drive?view=windows-11#step-1-create-working-files

7.先执行 copype amd64 C:\WinPE_amd64 命令来准备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。

@echo off
setlocal

REM Function to search and delete the specific file
:SearchAndDelete
for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    if exist "%%d:\Windows\System32\drivers\CrowdStrike\C-00000291*.sys" (
        echo Found file in %%d:\Windows\System32\drivers\CrowdStrike\
        del "%%d:\Windows\System32\drivers\CrowdStrike\C-00000291*.sys" /Q
        if not exist "%%d:\Windows\System32\drivers\CrowdStrike\C-00000291*.sys" (
            echo Successfully deleted the file from %%d:
        ) else (
            echo Failed to delete the file from %%d:
        )
    )
)
echo Search and delete operation completed.
pause
wpeutil reboot
endlocal


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 命令行如下:


cd C:\WinPE_amd64\media\sources
Get-WindowsImage -ImagePath .\boot.wim
md mount
Mount-WindowsImage -Path .\mount -ImagePath .\boot.wim -Index 1
Dismount-WindowsImage -Path .\mount -Save 



大家有任何疑问欢迎留言讨论~


中间因为之前的WDS 不工作,浪费了2个小时~后来干脆在DC上重新

部署了WDS,终于工作啦~


码字不易,感谢阅读~欢迎转载~转发~

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

基础操作系统软件厂商微软出手了:蓝屏事件背后的技术挑战与应对
美国安全软件更新导致“微软蓝屏”——Linux用户和马斯克都在看乐子
Tecplot 360 EX2023安装教程
Tecplot 360 EX2022安装教程
“蓝屏” 原因找到了!

文章有问题?点此查看未经处理的缓存