[原创] Windows Update 更新 KB4549951 遇到 0x80070003 错误的解决过程

2020年04月27日 1357点热度 6人点赞 16条评论

本机环境:Windows 10 x64 企业版 1909 18363.778(详细版本是补丁打好以后才查看的),使用好几年也没重装过,C盘也各种清理优化过。以前windows update都可以正常自动更新,当遇到4月累积更新KB4549951终于卡壳了,无论更新几次都是0x80070003错误。后经过自己研究,终于解决了这个错误。由于全网都没有相关分析文章,因此记录下分析过程,供大家参考。

故障现象

通过windows更新自动安装或者手动下载安装KB4549951补丁,第一阶段都是显示安装正常,提示需要重启电脑。同意重启后,电脑关机时会出来一段蓝底白字的更新进度文字,当百分比到7%时,会立刻关机重启;重启后,仍然出来蓝底白字更新进度文字,显示更新失败回滚到之前状态,之后会再次重启;重启后,正常进入windows。这时到windows更新里查看更新,就会提示更新失败,0x80070003错误。

0x80070003错误

 

分析解决

谷歌了几个小时0x80070003 错误解决,国内都是互相复制答案驴头不对马嘴的废话,国外的一些论坛和微软官方支持论坛也没有针对性的答复,都是常规错误检查套路,比如DISM修复、SFC修复、重置windows update之类的,但几个帖子最终的能解决问题的方法都是载入windows安装ISO,运行安装程序选择升级windows。但这样很多配置就丢了,我没法这么做。最后还是决定自己研究吧。

清除日志

首先清除所有windows目录的log日志文件,排除干扰。按win+x键,选命令提示符(管理员),输入命令运行:

del /f /s /q %systemdrive%\*.log

之后再次打一次补丁并重启,当然,更新会失败,不过我们是为了产生日志供分析。

错误定位

根据微软官方对windows update错误代码的解释,0x80070003是在safeOS阶段驱动程序安装失败的错误。并且微软给的解决方案是查看分析日志setupact.log,然而我打开setupact.log里面是一堆这样的信息。和微软给的例子完全不一样。

AudMig: Device Ids match - {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001 {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001
AudMig: Device Ids match - {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001 {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001
AudMig: Device Ids match - {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo02/00010001 {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo02/00010001
AudMig: Device Ids match - {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001 {2}.\\?\hdaudio#func_01&ven_10de&dev_0080&subsys_1b4c11bf&rev_1001#5&2acb3dda&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\topo03/00010001

从这个日志明显可以看出来是HD音频有关的驱动程序问题,然而我卸载了主板realtek声卡驱动,重装补丁仍然出错。微软提到在事件管理器查看错误代码的扩展代码,但我事件管理器里没有记录windows update事件,也没有扩展代码。

由于setupact.log并没有什么有用的信息,微软也没有给出还需要查看什么日志文件。powershell运行Get-WindowsUpdateLog命令生成的windows update log文件,翻看也没看出来什么有用的信息。一时陷入一筹莫展的地步。然后想一想,既然是驱动程序安装删除方面的错误,那可以分析c:\windows\inf\setupapi.dev.log文件,这个日志文件是记录驱动程序变动的。

问题解决

打开c:\windows\inf\setupapi.dev.log文件。由于刚刚删除过windows所有日志文件,因此setupapi.dev.log内容很短。往下翻一翻,就遇到最新的一个错误

     inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\percsas2i.inf_amd64_a7f5d94e6751c911\percsas2i.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_percsas3i.inf_31bf3856ad364e35_10.0.18362.1_none_48c7989df92084d1\percsas3i.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\percsas3i.inf_amd64_c17a63dada1eaa02\percsas3i.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_qd3x64.inf_31bf3856ad364e35_10.0.18362.1_none_6cdcbd2214ea35d4\qd3x64.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\qd3x64.inf_amd64_fd7b06296b7ac679\qd3x64.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_sisraid2.inf_31bf3856ad364e35_10.0.18362.1_none_5543a42fef02f7dd\sisraid2.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\sisraid2.inf_amd64_845e008c32615283\sisraid2.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_sisraid4.inf_31bf3856ad364e35_10.0.18362.1_none_a7675072e0cee9db\sisraid4.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\sisraid4.inf_amd64_65ab84e9830f6f4b\sisraid4.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_smartsamd.inf_31bf3856ad364e35_10.0.18362.1_none_5e424370d9dd4b68\SmartSAMD.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\smartsamd.inf_amd64_6ed5e8b82aa557c6\smartsamd.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_stexstor.inf_31bf3856ad364e35_10.0.18362.1_none_e630b231c3b13e26\stexstor.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\stexstor.inf_amd64_fefc1160d15aa667\stexstor.inf' ([strings])
inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_tape.inf_31bf3856ad364e35_10.0.18362.1_none_4e3ae19a5add327a\tape.inf' ([strings])
! inf: Unable to load INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf'(00000003)
! inf: Error 3: The system cannot find the path specified.
!!! inf: Invalid INF 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf', parsing error on line 0. Code = 1002
!!! sto: Failed to get version info for driver update 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf'. Error = 0x00000003
<<< Section end 2020/04/27 17:17:52.594
<<< [Exit status: FAILURE(0x00000003)]

提示这个tape.inf文件不存在。谷歌搜一下说tape驱动是SAS外置磁带机?不知道是啥高端玩意……不管它了。再进一步发现tape.inf_amd64_32387ea16b29de65这个文件夹也不存在,而且也权限不够无法创建这个文件夹。

那我就先在D盘新建个文件夹,重命名为tape.inf_amd64_32387ea16b29de65,再在c:\windows里搜索tape.inf,在c:\windows\inf文件夹里找到一个tape.inf,把这个tape.inf复制到D盘新建的文件夹里。然后重启,进PE系统,把D盘的tape.inf_amd64_32387ea16b29de65文件夹复制到C:\WINDOWS\System32\DriverStore\FileRepository目录(在PE里注意区别PE虚拟出来的windows系统分区和本机原来的windows分区),再重启退出PE。这样windows就可以正常读取文件。

再次安装KB4549951补丁,成功。

总结

0x80070003错误是更新时驱动程序方面导致的错误,这个是无可置疑的。然后就可以分析setupapi.dev.log文件,直接搜索关键词error,可以迅速定位具体错误。之后要根据你自己的错误提示,随机应变解决。

网上有很大一部分人认为windows不需要打补丁,打补丁会导致系统崩溃、臃肿、变慢之类各种莫名其妙的错误。博主这里强调:这种观点是绝对错误的!微软出了新补丁,一定要第一时间安装!因为微软的补丁是分好几个级别的,有些是提升功能类的可选更新补丁,有些是修复系统BUG的更新补丁,还有一些是修补系统漏洞的安全更新补丁。前两者不打无所谓,但系统漏洞补丁一定要第一时间安装!尤其是微软划分的这种 Remote Code Execution(远程执行代码)级别的安全更新补丁。

不打安全补丁,就跟你身揣百万现金在强盗窝里奔跑没什么区别。因为微软发布了一个修补漏洞的安全补丁,就表示这个漏洞可能已经是黑客界都知道、可以利用的漏洞了(有些是第三方安全公司发现的漏洞,直接私下告诉微软处理)。这种Remote Code Execution级别漏洞,只要你在网络中,对方可以直接发送一个特殊数据包就获取你系统的管理员权限,完全不用你同意,你也无法察觉,对方就已经可以控制你电脑。好多年前的熊猫烧香病毒、近几年的勒索病毒,都是利用Remote Code Execution级别漏洞传播的。而杀毒软件是根据病毒特征码来识别的,对于一个新病毒,杀毒软件是无法做到第一时间识别的。即使是使用了“云识别”之类的技术,那也是A杀毒软件在发现很多安装A杀毒软件的电脑都感染了相同特征的病毒以后,A杀毒软件才可以把“新病毒”确定为病毒。至于安装了B杀毒软件的电脑,还有已经中了病毒的电脑就……呵呵。甚至如果你的“价值”很高,会有黑客团伙专门针对你定制化攻击,如果不打补丁导致电脑数据被盗,会造成严重后果。

所以,一定要打补丁,勤备份!不要等中毒了面对被格式化的硬盘或者勒索界面时,才追悔莫及。

wking

不管博客型博主

文章评论

  • Eco

    感谢博主,文章很硬核。按照你的思路我也解决了更新失败的问题,我的是找不到usb的inf文件,已经成功修复。支持博主!

    2020年04月29日
    • wking

      管用就好。说明我这个分析思路还是具有普遍性的 :mrgreen:

      2020年04月30日
  • 划小船

    我也是0x80070003错误,但是setupapi.dev.log里没有error

    2020年05月04日
    • wking

      setupapi.dev.log里你找找有没有行最开始是!!!三个感叹号的

      2020年05月07日
  • 划小船

    针对 Windows 10 的功能更新,版本 1903,正在准备安装-84%,在这个时候出现0x80070003

    2020年05月04日
  • Mr.Seaning

    你这用了插件给宽度调小了

    2020年05月11日
    • wking

      我改了css的整体宽度。插件也影响了吗

      2020年05月12日
      • Mr.Seaning

        我查看样式是这样的,具体什么原因不知道,只能猜测

        2020年05月13日
        • wking

          太难了,算了就这样吧。我一个躺尸博客,也无所谓了其实。感谢大佬帮忙 :arrow:

          2020年05月13日
  • Mr.Seaning

    你可以试试在custom.css中加如以下的css
    @media (min-width: 1320px){
    .container {
    max-width: 1320px;
    }
    }试试

    2020年05月13日
  • Lvtu

    好难受,宽度整这么窄? :wink:

    2020年06月02日
    • wking

      主题默认的更窄……我还加宽了一些……技术有限,无法修改的更美观,凑合看吧 :mrgreen:

      2020年06月03日
      • Lvtu

        目测你至少在原主题上缩减了差不多200px :mrgreen:

        2020年06月04日
      • Lvtu

        在你的CSS文件中修改这个:
        .container {
        max-width: 61.8%;
        }
        61.8%真的太窄了,改大点。。。。

        2020年06月04日
  • Lvtu

    终于宽敞了。。。。。 :biggrin:

    2020年06月04日
    • wking

      主题默认是固定像素的宽度,我改成百分比了。固定像素在分辨率低显示器上就合适,我用27 2K屏,固定的很小

      2020年06月04日