最近偶然发现,任务栏右下角的微软自带杀毒Microsoft Defender启动慢了半拍,这两天闲来没事,说说我解决这个问题的思路和方法。
Microsoft Defender是Window系统级的程序,因为微软不开源,如果出了问题比较难跟踪原因,但是我们还有window系统日志,使用Win+R组合键,输入eventvwr.msc,即可打开;也可以右击计算机图标,选择菜单下的管理,切换到事件查看器-Windows日志-系统查看,打开后如下所示:
可以看到开机后,出现三个警告提示分别是:
1.
应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为
Windows.SecurityCenter.WscBrokerManager
、APPID 为
不可用
的 COM 服务器应用程序的 本地 启动 权限。此安全权限可以使用组件服务管理工具进行修改。
2.
应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为
Windows.SecurityCenter.WscDataProtection
、APPID 为
不可用
的 COM 服务器应用程序的 本地 启动 权限。此安全权限可以使用组件服务管理工具进行修改。
3.
应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为
Windows.SecurityCenter.SecurityAppBroker
、APPID 为
不可用
的 COM 服务器应用程序的 本地 启动 权限。此安全权限可以使用组件服务管理工具进行修改。
如上所示,可以发现
Windows.SecurityCenter.WscBrokerManager
Windows.SecurityCenter.WscDataProtection
Windows.SecurityCenter.SecurityAppBroker
这三个CLSID都是属于win系统的安全中心(SecurityCenter),但是报错日志内所说的"LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)"和"不可用的COM 服务器应用程序的本地启动权限"又是什么呐?以下是我寻找答案的过程。
先搜索下日志中的内容看看,找到很多结果,如下:
https://answers.microsoft.com/zh-hans/windows/forum/all/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/fd690ac3-6f36-4afe-86f5-93cab559681chttps://answers.microsoft.com/zh-hans/windows/forum/all/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/fd690ac3-6f36-4afe-86f5-93cab559681c其中就是微软论坛上网友关于Windows.SecurityCenter.WscBrokerManager报错日志的问题,但是微软官方并没有给出什么好的解决方法,我又连着搜索了下全网的帖子,包括b站的一个挖坟贴,发现这个问题起码在2018年之前就已经出现了,而且网上根本没有什么可用的解决方法,包括外网也只搜到一个删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole下的删除以下键:DefaultAccessPermission、DefaultLaunchPermission、MachineAccessRestriction和MachineLaunchRestriction的方法,但是我没有去尝试这个方法,因为操作这些系统底层注册表的方法有很大的威胁性,可能导致系统的损坏,虽然这个老外说可以解决,但是我们还是不能人云亦云,我这个人喜欢追溯本源。
总结网上关于这个问题的讨论有以下几种:
1.修改DCOM下的APPID中的这个组件的属性-安全选项,启动和激活权限-添加报错账户(SID)的本地启动权限。
2.修改HKEY_CLASSES_ROOT\AppID\下相应的AppID报错组件的项的注册表读写权限。
3.不予以理会这个报错提示,在window中警告日志是正常的。
显然我们这个报错组件是一个系统内置的组件,并没有AppID,至于修改注册表权限显然和报错提示关系不大,至于最后说的不予理睬显然是躺平的感觉。
那么到底是什么原因造成的?
我注意到了日志中的LocalHost (使用 LRPC),显然这可能是一个service服务启动的RPC进程,为了更好的跟踪这个错误的发生,我们可以使用sysmon这个微软小工具,它可以捕获系统的日志,并自定义过滤条件。
使用win+r运行窗口,打开下载的sysmon目录,找到sysmon64.exe,运行如下命令:
Sysmon64.exe -accepteula -i
就会开启sysmon的日志记录功能,如果不需要使用时,用如下命令解除安装:
Sysmon64.exe -u
当然你如果需要自定义记录的日志对象,可以使用xml的配置文件,用记事本新建一个任意名称的xml文件,按照如下的例子输入需要监控的进程、管道、注册表行为,如果你有编写有困难,可以求助deepseek、gpt等AI编写:
<Sysmon schemaversion="4.50">
<EventFiltering>
<!-- 捕获进程创建 -->
<ProcessCreate onmatch="include">
<Image condition="contains">SecurityHealthService.exe</Image>
<Image condition="contains">svchost.exe</Image>
<Image condition="contains">explorer.exe</Image>
</ProcessCreate>
<!-- 捕获命名管道创建(LRPC) -->
<PipeEvent onmatch="include">
<PipeName condition="contains">\RPC Control</PipeName>
</PipeEvent>
<!-- 捕获注册表读取 COM CLSID 的行为 -->
<RegistryEvent onmatch="include">
<TargetObject condition="contains">{F4AEB1A5-6D1D-49D2-BE38-193ABFDD2ED3}</TargetObject>
</RegistryEvent>
</EventFiltering>
</Sysmon>
然后使用如下命令安装配置文件:
Sysmon64.exe -accepteula -i sysmon-wsc-tracker.xml
sysmon-wsc-tracker.xml就是上面的配置文件,记住记事本保存时需要用ANSI格式另存为。
如果你需要修改xml配置,可以使用下面的命令让修改后的配置生效:
Sysmon64.exe -c sysmon-wsc-tracker.xml
在这个案例中,我们其实只要使用它的基础功能即可, 不一定需要配置文件。
Sysmon 默认配置会记录以下核心安全事件(但比较基础):
事件ID | 说明 |
---|---|
1 | 进程创建(Process Create)✅ 很重要 |
3 | 网络连接(Network Connect) |
5 | 进程终止 |
6/7 | 加载驱动 |
✅ 默认配置适合快速部署,但如果你想要精细控制事件记录类型、过滤规则、白名单等,推荐使用自定义 XML 配置。
输入上面的命令后,我们关闭电脑后,重新开机,跟踪下发生报错日志信息的,同一时间发生的sysmon日志。
下面是系统自带日志的报错时间
下面是sysmon的日志位置:
定位sysmon到相同的时间:
可以看到上面引起错误的是svchost.exe进程,显然是一个系统服务进程,它执行的命令如下:
CommandLine: C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted -p -s wscsvc
用gpt详细解析下:
部分 | 含义 |
---|---|
C:\Windows\System32\svchost.exe | Windows 服务宿主进程(Service Host) |
-k LocalServiceNetworkRestricted | 表示服务运行在一个叫做 LocalServiceNetworkRestricted 的服务组中,限制了网络访问权限(沙箱环境) |
-p | 启用 持久模式(PBR),提高服务可靠性(Windows 10/11 默认) |
-s wscsvc | 指定要启动的服务名称:wscsvc ,也就是 Windows Security Center 服务 |
Windows Security Center这个服务,我们到管理工具-服务下,找到这个服务,如下:
如上图所示,我来猜测分析下为什么会出现错误日志,可以看到这个服务是启动了,说明命令运行是成功的,那么为什么会报警告?我估计是这个服务设置了自动延迟启动,也就是没有立即启动,可能system权限的关系,导致了出现警告日志,定位到了问题的根源就好办了,只要把服务启动类型设置成自动就行了,所以最终的解决方法如下:
-
打开注册表编辑器:
Win + R
→ 输入regedit
→ 回车 -
定位到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc
3.找到并修改以下两个值:
键名 | 原值 | 修改为 |
---|---|---|
Start | 2 (自动) | 保持为 2(不变) |
DelayedAutoStart | 1 (启用延迟) | 修改为 0 (关闭延迟) |
注意:
DelayedAutoStart
是 DWORD 类型,设为0
即为“自动立即启动”
4.修改后,重启电脑即可生效。
如下图所示:
重启电脑后,发现没有相关警告提示出现了,查看这个服务已变成自动启动状态了,如下图:
如果大家有这个警告日志可以使用我的方法试试,后续如果又会出现这个警告也可以发在评论区给大家讨论,谢谢大家的关注与支持,再见!