本机环境:Windows 10 x64 企业版 1909 18363.778(详细版本是补丁打好以后才查看的),使用好几年也没重装过,C盘也各种清理优化过。以前windows update都可以正常自动更新,当遇到4月累积更新KB4549951终于卡壳了,无论更新几次都是0x80070003错误。后经过自己研究,终于解决了这个错误。由于全网都没有相关分析文章,因此记录下分析过程,供大家参考。
故障现象
通过windows更新自动安装或者手动下载安装KB4549951补丁,第一阶段都是显示安装正常,提示需要重启电脑。同意重启后,电脑关机时会出来一段蓝底白字的更新进度文字,当百分比到7%时,会立刻关机重启;重启后,仍然出来蓝底白字更新进度文字,显示更新失败回滚到之前状态,之后会再次重启;重启后,正常进入windows。这时到windows更新里查看更新,就会提示更新失败,0x80070003错误。
分析解决
谷歌了几个小时0x80070003 错误解决,国内都是互相复制答案驴头不对马嘴的废话,国外的一些论坛和微软官方支持论坛也没有针对性的答复,都是常规错误检查套路,比如DISM修复、SFC修复、重置windows update之类的,但几个帖子最终的能解决问题的方法都是载入windows安装ISO,运行安装程序选择升级windows。但这样很多配置就丢了,我没法这么做。最后还是决定自己研究吧。
清除日志
首先清除所有windows目录的log日志文件,排除干扰。按win+x键,选命令提示符(管理员),输入命令运行:
1 | [code]del /f /s /q %systemdrive%\*.log[/code] |
之后再次打一次补丁并重启,当然,更新会失败,不过我们是为了产生日志供分析。
错误定位
根据微软官方对windows update错误代码的解释,0x80070003是在safeOS阶段驱动程序安装失败的错误。并且微软给的解决方案是查看分析日志setupact.log,然而我打开setupact.log里面是一堆这样的信息。和微软给的例子完全不一样。
1 | 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</code><br><code>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</code><br><code>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</code><br><code>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内容很短。往下翻一翻,就遇到最新的一个错误
1 | inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\percsas2i.inf_amd64_a7f5d94e6751c911\percsas2i.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_percsas3i.inf_31bf3856ad364e35_10.0.18362.1_none_48c7989df92084d1\percsas3i.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\percsas3i.inf_amd64_c17a63dada1eaa02\percsas3i.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_qd3x64.inf_31bf3856ad364e35_10.0.18362.1_none_6cdcbd2214ea35d4\qd3x64.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\qd3x64.inf_amd64_fd7b06296b7ac679\qd3x64.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_sisraid2.inf_31bf3856ad364e35_10.0.18362.1_none_5543a42fef02f7dd\sisraid2.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\sisraid2.inf_amd64_845e008c32615283\sisraid2.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_sisraid4.inf_31bf3856ad364e35_10.0.18362.1_none_a7675072e0cee9db\sisraid4.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\sisraid4.inf_amd64_65ab84e9830f6f4b\sisraid4.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_smartsamd.inf_31bf3856ad364e35_10.0.18362.1_none_5e424370d9dd4b68\SmartSAMD.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\smartsamd.inf_amd64_6ed5e8b82aa557c6\smartsamd.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_stexstor.inf_31bf3856ad364e35_10.0.18362.1_none_e630b231c3b13e26\stexstor.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\stexstor.inf_amd64_fefc1160d15aa667\stexstor.inf' ([strings])</code><br><code> inf: Opened INF: 'C:\WINDOWS\WinSxS\amd64_dual_tape.inf_31bf3856ad364e35_10.0.18362.1_none_4e3ae19a5add327a\tape.inf' ([strings])</code><br><code>! inf: Unable to load INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf'(00000003)</code><br><code>! inf: Error 3: The system cannot find the path specified.</code><br><code>!!! inf: Invalid INF 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf', parsing error on line 0. Code = 1002</code><br><code>!!! sto: Failed to get version info for driver update 'C:\WINDOWS\System32\DriverStore\FileRepository\tape.inf_amd64_32387ea16b29de65\tape.inf'. Error = 0x00000003</code><br><code><<< Section end 2020/04/27 17:17:52.594</code><br><code><<< [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(远程执行代码)级别的安全更新补丁。
页面查看链接:https://msrc.microsoft.com/update-guide/
不打安全补丁,就跟你身揣百万现金在强盗窝里奔跑没什么区别。因为微软发布了一个修补漏洞的安全补丁,就表示这个漏洞可能已经是黑客界都知道、可以利用的漏洞了(有些是第三方安全公司发现的漏洞,直接私下告诉微软处理)。这种Remote Code Execution级别漏洞,只要你在网络中,对方可以直接发送一个特殊数据包就获取你系统的管理员权限,完全不用你同意,你也无法察觉,对方就已经可以控制你电脑。好多年前的熊猫烧香病毒、近几年的勒索病毒,都是利用Remote Code Execution级别漏洞传播的。而杀毒软件是根据病毒特征码来识别的,对于一个新病毒,杀毒软件是无法做到第一时间识别的。即使是使用了“云识别”之类的技术,那也是A杀毒软件在发现很多安装A杀毒软件的电脑都感染了相同特征的病毒以后,A杀毒软件才可以把“新病毒”确定为病毒。至于安装了B杀毒软件的电脑,还有已经中了病毒的电脑就……呵呵。甚至如果你的“价值”很高,会有黑客团伙专门针对你定制化攻击,如果不打补丁导致电脑数据被盗,会造成严重后果。
所以,一定要打补丁,勤备份!不要等中毒了面对被格式化的硬盘或者勒索界面时,才追悔莫及。
文章评论
感谢博主,文章很硬核。按照你的思路我也解决了更新失败的问题,我的是找不到usb的inf文件,已经成功修复。支持博主!
@Eco 管用就好。说明我这个分析思路还是具有普遍性的
我也是0x80070003错误,但是setupapi.dev.log里没有error
@划小船 setupapi.dev.log里你找找有没有行最开始是!!!三个感叹号的
针对 Windows 10 的功能更新,版本 1903,正在准备安装-84%,在这个时候出现0x80070003
你这用了插件给宽度调小了
@Mr.Seaning 我改了css的整体宽度。插件也影响了吗
@wking 我查看样式是这样的,具体什么原因不知道,只能猜测
@Mr.Seaning 太难了,算了就这样吧。我一个躺尸博客,也无所谓了其实。感谢大佬帮忙
你可以试试在custom.css中加如以下的css
@media (min-width: 1320px){
.container {
max-width: 1320px;
}
}试试
好难受,宽度整这么窄?
@Lvtu 主题默认的更窄……我还加宽了一些……技术有限,无法修改的更美观,凑合看吧
@wking 目测你至少在原主题上缩减了差不多200px
@wking 在你的CSS文件中修改这个:
.container {
max-width: 61.8%;
}
61.8%真的太窄了,改大点。。。。
终于宽敞了。。。。。
@Lvtu 主题默认是固定像素的宽度,我改成百分比了。固定像素在分辨率低显示器上就合适,我用27 2K屏,固定的很小
来晚辽,时隔一年多,挖下
最近在给我的win 20H2 打更新补丁时,也遇到了 0x80070003 报错代码,于是赶紧来谷歌找下解决方法,搜出的结果开头前两页就像大大你在文章开头的分析解决部分说的:国内都是互相复制答案驴头不对马嘴的废话,翻到第四页时,才看到大大你的博文标题,点进来大概浏览了下,这才是我想要的方法,顿时哭了,感觉找到一篇原创文章,这年头在谷歌上都这么难么??
先感谢大大出的过程分析并提供解决方法的教程,分析找出问题源头不易,大大辛苦了
此外,我在看到文章最后总结部分时,看大大说:系统漏洞补丁一定要第一时间安装!尤其是微软划分的这种 Remote Code Execution(远程执行代码)级别的安全更新补丁;下面附了张截图,貌似是微软的各个漏洞报告及对应补丁下载,看大大没有将截图中的这个网站地址贴出来吖,能否麻烦大大甩我个截图中这个网站地址,以便日后我想单独下载某更新补丁,直接找到对应下载地址
还有看到大大在这篇文章开头提到自己的电脑C盘已各种清理优化过,不知大大是用的一些清理工具或脚本来清理优化C盘,我在知乎/吾爱等一些社区找过一些大佬自制的Windows 清理/优化工具,使用后,感觉效果不大,而且用过这些清理工具后没多久,C盘又快接近爆红,哭了;跪求大大分享下自己清理及优化C盘的方法呗(简要说说就行)
@ano酱重症患者 最后,写的留言字数有丶多,还望大大谅解,从头到尾看完我上述两条评论了
@ano酱重症患者 查看漏洞网页是:https://msrc.microsoft.com/update-guide
清理C盘没有什么好的工具。工具和脚本都只能删除明显的垃圾比如回收站、临时目录什么的,没多大用处。占空间的主要是系统自己产生的和软件使用过程中产生的文件,比如QQ和微信就是产垃圾头号选手,你可以看看“我的文档”里Tencent Files和WeChat Files占了多大空间。
清理的话,使用系统自带的“磁盘清理”可以清理掉系统自己产生的垃圾。再使用SpaceSniffer软件可以分析哪些目录体积很大,具体能不能删除就要看你自己经验了。