ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows防火墙服务启动报错0x80070422和0x6D9的实战修复指南

Windows防火墙服务启动报错0x80070422和0x6D9的实战修复指南 先说结论省得你看了一半着急0x80070422 和 0x6D9 这两个错一个是没有搞定“服务被禁用/依赖链断掉”这类问题另一个基本卡在“底层过滤引擎系统文件”这一层。按依赖顺序排查九成机器不用重装就能救回来。前两天处理一台 Windows Server 2019防火墙服务一直停在“已停止”手动点击启动先是弹 0x80070422我按照服务依赖清理了一圈又变成 0x6D9来回折腾了将近一小时才算让服务稳定跑起来。这俩错误码在 Server 2016、Server 2019 以及 Win10/11 上都不少见一旦防火墙服务起不来远程桌面、FTP、内部业务端口都会跟着遭殃。这篇就当成一次实战记录把定位思路、操作步骤和几个我踩过的坑完整写下来给后面遇到类似问题的人做一个参考。1. 报错还原两个错误码到底卡在哪一环1.1 0x80070422服务被“封印”了看到 0x80070422 的第一反应先去找系统错误码。这个十六进制数对应十进制 1058意思是“无法启动服务原因可能是该服务已被禁用或与其关联的设备没有启动”。放在 Windows 防火墙场景里被禁用的通常是 Windows Defender 防火墙服务本身服务名叫 mpssvc另外就是底下的 Base Filtering Engine也就是 bfe。为什么这两个服务会被禁用我见过的情况很杂有些第三方优化软件默认把 Windows 防火墙当成“多余的”一键优化直接禁用有些客户机器的安全软件在安装时接管了系统防火墙顺手把原服务停止还有的是某些破解工具、激活脚本在改系统组件时把服务启动类型改掉了。总之现象是服务停止、启动报 0x80070422根源却不一定是用户主动关的。先不要急着修改注册表。正确的做法是在服务管理器里把 mpssvc 和 bfe 的启动类型、当前状态都看一眼。如果只是被禁用改回“自动”再启动就解决了如果启动类型已经是“自动”但启动依然报错那说明问题更靠后要继续往依赖链和系统底层查。防火墙服务不是独立工作的。mpssvc 启动前必须先等 bfe 起来bfe 又依赖 RPC、DCOM Server Process Launcher、Network Store Interface Service 这些基础服务。这串依赖里只要断了一环最后体现在界面上的就是防火墙服务启动失败。单独把 mpssvc 设成自动没有用得先把依赖它的底层服务理顺。1.2 0x6D9服务在“总机”上没有登记上0x6D9 换算成十进制是 1753对应“端点映射器中没有更多端点可用”。端点映射器是 RPC 服务提供的登记机制服务启动时把自己要用的通信端点注册进去就像新公司要在电话总机里登记分机号。如果总机本身工作异常或者底层支撑没准备好服务就注册不上直接报 0x6D9。在防火墙这个具体场景里0x6D9 往往和 bfe 没有真正起来、WFP 初始化失败有关。某些机器上打开服务管理器看 bfe可能一直显示“正在启动”但永远变不成“已启动”或者反复启动失败。到这一步单纯设置启动类型已经不够了要检查服务配置文件、注册表权限、系统文件完整性甚至还要考虑驱动层残留。怎么判断卡在哪里最有效的办法是看事件查看器。用 eventvwr.msc 打开进入“Windows 日志 - 系统”筛选来源为 Service Control Manager重点看事件 ID 7000、7001、7023。7000 表示“服务无法启动”7001 表示“依赖的服务不存在或已标记为删除”7023 表示“服务意外终止”。日志里如果直接标注了某个服务名那瓶颈往往就在那个服务上而不是 mpssvc 本身。这一步做扎实了后面的修复才有方向。2. 0x80070422 的完整修复链路2.1 三步快速检查别急着动注册表遇到 0x80070422我习惯按这套顺序检查不跳步一Win R 输入 services.msc 回车找到“Windows Defender 防火墙”双击看启动类型和服务状态。二找到“Base Filtering Engine”同样看启动类型和状态确认是不是“自动”且“正在运行”。三再看“Remote Procedure Call (RPC)”、“DCOM Server Process Launcher”、“Network Store Interface Service”这几个服务有没有异常。注意一个容易被忽略的细节bfe 如果是“手动”或“禁用”要先把 bfe 改成“自动”并启动然后才去启动 mpssvc。有一次客户环境里 bfe 是“手动”我直接启动 mpssvc结果界面上从 0x80070422 跳到了 0x6D9看起来好像是错误变化了其实是因为底层依赖没起来防火墙服务尝试更深一级的初始化时失败得更厉害。这不是运气不好而是没有严格按照依赖顺序来。RPC 服务正常情况下一定是“自动”且正在运行。如果 RPC 本身都没起来问题就是另一个级别了要优先处理 RPC 的启动问题否则后面修什么都不顺利。判断 RPC 是否异常有个很简单的现象系统里很多服务都会一起起不来不只是防火墙。2.2 用 sc 命令把服务拉起来图形界面点“启动”是最常见的操作但我更推荐用命令行因为 sc 命令能返回明确的错误码方便定位。操作服务时我一般习惯先配置启动类型再启动避免服务被禁用时直接启动报出 1058。在管理员权限的命令提示符里依次执行sc config bfe start auto sc config mpssvc start auto sc config appidsvc start auto sc config wscsvc start auto这里的 sc 语法有个坑start后面的空格不能省。start auto实际上是三个部分“start”、空格、“auto”。如果你写成startauto命令会直接报语法错误。这一点经常有人踩到。改完启动类型后执行启动sc start bfe sc start mpssvc如果返回“服务启动成功”或者“服务已经启动”说明链路已经通了。再查一遍状态确认sc query bfe sc query mpssvc看到 STATE 一栏是 RUNNING 就说明服务正常。要是还是启动失败注意 sc 输出的错误码1058 是服务被禁用1068 是依赖服务不存在或未启动1053 是服务没有在预期时间内响应启动请求。1068 一出立刻回去查依赖链1058 一出注册表里把 Start 值改回来。这样对着错误码走要比在界面上反复点启动按钮高效得多。2.3 组策略和安全软件把服务锁死的场景还有一种情况很容易被忽略组策略已经禁止了防火墙服务。在 Windows 专业版及以上系统里管理员可以在 gpedit.msc 中配置“Windows 防火墙保护所有网络连接”为“已禁用”或者在服务设置里直接禁止启动。即使注册表和 services.msc 都被改回来了组策略一旦刷新还是会拉回到禁用状态。排查时不要忘了进 gpedit.msc 看一眼路径是计算机配置 - 管理模板 - 网络 - 网络连接 - Windows Defender 防火墙。检查各个配置文件的策略项是不是设成了“未配置”或“已启用”。如果之前设过“已禁用”改成“未配置”再重启服务。第三方安全软件的干扰同样常见。有些安全软件安装时会接管系统防火墙通过驱动回调把 Windows 防火墙服务强制停止卸载后如果驱动没清干净仍然会拦截服务启动。遇到这种情况先打开安全软件的管理界面看有没有“网络防护”“防火墙接管”“安全加固”这类选项把接管系统防火墙的功能关掉再回到 services.msc 启动服务。如果安全软件已经卸载但服务还起不来建议在安全模式下测试一次启动这样能排除第三方驱动残留的影响。这里有个实际技巧如果手动启动一直失败但你又怀疑是安全软件在拦截可以先看系统托盘里的安全中心状态它会明显提示是哪款软件接管了“防火墙”保护。找到根源再去改相应策略比无头绪改注册表靠谱。改完注册表没用再重启的现象多半就是策略回写造成的。3. 0x6D9 的深度修复方案3.1 故障机理RPC 端点和 WFP 的关联0x6D9 报错比 0x80070422 更靠后说明服务管理器已经允许“启动”这个动作了但服务在初始化过程中失败了。要理解这层必须先明白 WFPWindows 过滤平台的概念。Windows 防火墙所有封包过滤、规则匹配都走 WFP 框架而 BFE 就是 WFP 在用户态的核心服务。BFE 正常加载后mpssvc 才能通过 WFP 注册过滤引擎并打开 RPC 端点。如果 BFE 组件某个注册表项缺失、服务 DLL 损坏或者系统文件被替换mpssvc 启动时就会卡在“初始化过滤引擎”这一步最终返回 1753。也可以这么理解0x6D9 不是 mpssvc 自己的问题而是 BFE、WFP、RPC 端点三者共同作用的故障结果。还要提一类平时容易忽略的干扰源某些安全软件、流量监控软件会在网络栈里挂载过滤驱动。这些驱动如果残留异常WFP 初始化也可能被拖垮。好多 0x6D9 偏偏发生在卸载安全软件之后或者系统被可疑驱动污染过的机器上原因就在这。排查到这一步别只盯着防火墙服务本身。3.2 注册表服务项与权限修复思路先从注册表把服务启动类型确认清楚。按 Win R 输入 regedit定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BFEHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MpsSvc这两个键里的 Start 值2 表示自动3 表示手动4 表示禁用。图形界面里改不动的场景下直接通过命令行修改注册表反而更省事reg add HKLM\SYSTEM\CurrentControlSet\Services\BFE /v Start /t REG_DWORD /d 2 /f reg add HKLM\SYSTEM\CurrentControlSet\Services\MpsSvc /v Start /t REG_DWORD /d 2 /f改完启动类型再检查两个关键配置。第一个是 ImagePath正常情况这两个服务都由 svchost.exe 宿主承载没有太大问题第二个更关键的是 ServiceDll 值。mpssvc 的 ServiceDll 应指向 %SystemRoot%\System32\FirewallAPI.dll如果路径被改或者 DLL 丢失服务会加载不出实际功能。查询命令reg query HKLM\SYSTEM\CurrentControlSet\Services\mpssvc\Parameters /v ServiceDll如果发现是空值或路径不对可以修复reg add HKLM\SYSTEM\CurrentControlSet\Services\mpssvc\Parameters /v ServiceDll /t REG_EXPAND_SZ /d ^%SystemRoot^%\System32\FirewallAPI.dll /f这里有个细节在 cmd 窗口里如果直接写 %SystemRoot%会被展开成绝对路径形式而不是保留变量名。用上面对百分号加转义的方式能确保注册表里存的是环境变量形式系统迁移或重装后仍然有效。注册表编辑器里手工修改时类型记得选“可扩充字符串值”不是普通字符串。权限问题也是 0x6D9 的高发原因。BFE 服务启动时要读取自己的注册表配置如果权限被改得过紧或者所有者变成了未知账户服务根本没法完成初始化。修复方法在注册表编辑器里右键 BFE 键 - 权限 - 高级把所有者改成 SYSTEM再给 SYSTEM 和 NetworkService 账户授予完全控制权限。改完别立刻启动服务先关闭注册表编辑器再用 sc query bfe 确认状态最后启动服务。3.3 系统文件检查和网络栈重置如果注册表修完仍然报 0x6D9大概率是系统文件损坏。Windows 10/11 和 Server 版本上我习惯先跑 SFC再跑 DISM顺序不能反。先执行sfc /scannowSFC 负责检查系统文件完整性并替换损坏文件耗时取决于磁盘性能一般在几分钟到十几分钟之间。如果 SFC 报告说发现损坏但无法修复再执行 DISMDISM /Online /Cleanup-Image /RestoreHealthDISM 会从 Windows 更新里拉取源文件来修复系统映像。这里有个现实问题Server 系统或者断网环境下拉取可能失败。如果失败可以挂载同版本的安装镜像指定本地源路径比如DISM /Online /Cleanup-Image /RestoreHealth /Source:WIM:F:\sources\install.wim:1 /LimitAccessF 是安装镜像所在盘符实际按你机器上的情况改。这一步比较耗时但比重装系统省事得多值得耐心等。接下来重置网络栈。0x6D9 这个错误和 WFP 直接相关而 WFP 过度依赖 Winsock 目录和 TCP/IP 栈的注册表配置所以重置网络栈通常会有奇效netsh winsock reset netsh int ip reset ipconfig /flushdns第一条命令会重置 Winsock 目录影响所有基于 Winsock 的应用程序第二条会重写 TCP/IP 协议栈相关注册表项。两个命令执行完必须重启系统。注意执行时最好不要开下载、远程桌面这类大流量应用避免当前网络会话被中断重启后重新连接即可。3.4 BFE 服务无法彻底启动的额外招如果 bfe 一直停在“启动中”或者反复失败事件日志里又没有明确提示我通常还会从这几个方向补刀。先查“Network Store Interface Service”和“NSI”服务是否正常。nsi 是 BFE 的依赖服务如果被禁用BFE 在启动时会一直等待网络状态通知表现就是“正在启动”然后永远没有下文。把 nsi 设为自动并启动很多 BFE 卡死的问题就解决了。再试重置 FailureActions。在注册表里定位到 HKLM\SYSTEM\CurrentControlSet\Services\BFE下面如果有 FailureActions 键可以把这个值删除后重启系统。重启后系统会重新生成默认的失败操作策略服务不再因为之前反复启动失败被“冷处理”。还要考虑系统补丁情况。部分老版本 Windows 上WFP 相关驱动存在已知 Bug防火墙服务启动就会不稳定。检查系统更新历史把该装的安全补丁装上之后再做测试。一般来说走到这一步绝大多数 0x6D9 都能解决如果还是不行才需要考虑修复安装或者重装系统。4. 修复完成后的校验与防护建议4.1 服务启动后的状态确认清单服务成功启动只是第一步后面要确认的东西还不少否则只是“看起来好了”。我一般会按下面这个清单过一遍服务的状态确认是基础。services.msc 里 mpssvc 和 bfe 都应该是“正在运行”启动类型“自动”。然后打开 Windows Defender 防火墙的控制面板确认界面不再提示“防火墙服务未启动”。命令行下执行netsh advfirewall show allprofiles state正常输出应该显示三个配置文件都处于“启用”状态。如果结果显示“禁用”但服务本身在运行说明是策略或注册表开关把它关了要回去查组策略和注册表。还要实际测一下端口连通性。从另一台机器 telnet 或者用端口探测工具测试远程桌面和其他业务端口确认防火墙规则没有把关键端口拦截掉。最后看事件查看器系统日志里如果还反复出现新的 7000/7023 错误说明底层还不稳要继续查不能因为服务起来了就收工。这里面最容易让人迷惑的是服务在跑、但控制面板显示“已关闭”。这种情况多半是组策略里把防火墙模块禁用了或者注册表里 EnableFirewall 被设成了 0。路径是HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile把 EnableFirewall 设为 1或者直接删除这个键让它跟随系统默认策略。改完可以立即用 netsh advfirewall show allprofiles state 验证。4.2 已生成的防火墙规则处理策略修复过程中如果执行过 netsh advfirewall reset 或者系统还原防火墙规则会回到系统默认状态之前手动添加的程序放行规则会全部丢失。这时候不要急着加新规则先确认现网里哪些应用正在被拦截再把关键端口规则补回来。最常见的案例就是 FTP。Windows 服务器上跑 IIS FTP 或者第三方 FTP 服务不仅要放行 TCP 21 控制端口被动模式下还要放行一段高位端口段通常是 49152 到 65535。设置方法是在“防火墙高级设置”里新建入站规则协议类型选 TCP本地端口填 21另外一条规则填 49152-65535操作选“允许连接”。为什么要强调被动端口因为太多人在 FTP 服务器上只放行了 21 端口结果控制连接正常、目录列表能出来但传到一半就卡死或中断。这不是 FTP 服务的锅是防火墙把被动模式的数据端口给拦了。做完这个规则再配合服务状态确认业务才算真正恢复正常。4.3 给关键服务做最小放行与白名单优化防火墙恢复后顺手把规则粒度收紧是个好习惯。Windows 防火墙虽然没有直接叫“黑白名单”的界面但完全可以通过“作用域”做到类似效果。在入站规则里可以指定远程 IP 地址范围只允许特定网段访问其他地址全部拒绝这就是在做白名单效果。我给自己管理的服务器定过一个放行习惯三层规则第一层默认入站规则设为拒绝只放行真正需要的端口和服务第二层每条放行规则都限定远程 IP 范围能写子网就写子网不要裸放 0.0.0.0/0第三层出站规则默认允许但对高危进程单独加阻止规则。这样即使防火墙服务再次出现异常暴露面也始终可控。恢复服务的半小时比前面排查报错更考验细节。各位如果管理着多台服务器建议把这个规则习惯做成模板新装系统后第一时间应用能少很多事。5. 实战避坑与常见问题速查5.1 我干过的几件“傻事”先说一个我自己的真实教训。最开始处理 0x6D9 时我图省事直接在服务界面把防火墙服务改成“自动”后启动结果启动失败弹出 0x6D9。我想当然觉得是系统文件损坏直接开跑 SFC。跑完以后还是失败回头才发现只是 bfe 的启动类型还停在“手动”先手动启动 bfe再启动 mpssvc问题当场就解决了。所以顺序永远是先依赖、后主服务先注册表、后系统文件这个原则不能乱。第二个坑是在 Server 上为了配合某次临时测试直接禁用过防火墙服务后来测试结束后忘了恢复启动类型几个月后系统更新把一堆网络相关组件弄得不正常我再想去打开防火墙就碰到 0x80070422。这里提醒一句临时停用防火墙可以直接改成禁用要慎重。一次性停止服务下次需要用的时候再启动不修改启动类型是最稳妥的做法。第三个坑和驱动残留有关。卸载某个第三方安全软件后系统里还留着虚拟网卡和过滤驱动bfe 一直在启动失败和反复重启之间徘徊。当时事件日志只会含糊提示“依赖服务启动失败”绕了不少弯路。后来把旧网卡和残留驱动清掉再用 netsh winsock reset 重置服务才恢复正常。这让我在遇到 0x6D9 时除了系统层面也会主动检查网络栈过滤驱动的残留情况。5.2 高频相关提问集中解答日常被问得最多的问题我挑三个说一下。Windows 防火墙服务关闭会影响安装软件吗有影响。部分软件安装时依赖 Windows 防火墙服务注册网络配置服务停了之后安装过程可能报错或者软件装完网络功能异常。所以不要因为“防火墙”这三个字就永久禁用排查问题用完之后及时恢复才稳妥。防火墙关闭对系统到底有多大影响个人电脑如果有路由器前置风险会稍小一点但直接暴露在公网上时没有主机防火墙相当于少了一层防护入站扫描和恶意程序回连都会更容易得手。服务器场景更不建议长期禁用。为什么我把服务启动类型改回自动重启后又变成禁用大概率是组策略或安全软件回写。按前面 2.3 节的内容去检查策略项和安全软件的接管状态比反复改注册表有效得多。5.3 问题速查表报错/现象最可能原因首选处理0x80070422服务已停止MpsSvc 或 BFE 被禁用sc config 改自动先启动 bfe 再启动 mpssvc0x6D9服务启动失败BFE/WFP 或 RPC 端点异常查 bfe 状态、注册表权限、跑 SFC/DISMbfe 一直显示“正在启动”nsi/netprofm 依赖异常驱动残留检查依赖服务清理残留驱动重置网络栈服务已运行但防火墙显示关闭组策略或注册表 EnableFirewall0gpedit.msc 恢复“未配置”或改注册表值sc start 报 1068依赖服务未启动sc query 确认 bfe/RPC/DcomLaunch 状态并启动FTP 主动连接正常被动失败被动端口段未放行新建入站规则放行 TCP 49152-65535服务反复启动失败后被锁定FailureActions 配置异常删除 BFE 下 FailureActions 键后重启系统这张表覆盖了我在实战里遇到的大部分防火墙服务异常。真遇到表里没有的情况先看事件查看器再对照错误码排查基本能有个明确方向。最后再补一句修完防火墙服务不是终点记得把系统补丁打齐把安全软件的行为策略调成“不接管系统防火墙”日常巡检时手动执行sc query mpssvc和sc query bfe看到 RUNNING 状态才安心。这套流程跑下来大部分 0x80070422 和 0x6D9 都能在半小时内解决希望这篇实战记录也能帮你少折腾一阵子。
返回列表