windows重启后或注销重新登录后explorer自动重置默认应用的原因分析
windows重启后或注销重新登录后explorer自动重置默认应用的原因分析
在Windows系统中,用户经常会遇到设置默认应用后,重启或注销重新登录时explorer.exe自动重置默认应用的问题。本文将详细分析这一现象的原因,并提供具体的解决方案。
昨天某位网友又遇到之前的问题:改了默认浏览器或默认pdf软件后,重启电脑后,资源管理器explorer.exe自动重置回系统默认的打开方式。
上一次我是重建了用户配置文件ntuser.dat解决的。但问题这么频发的话老重建也不是解决办法。
已知文件关联注册表有:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts.XXX\UserChoice
HKEY_CURRENT_USER\SOFTWARE\Classes.XXX
HKEY_LOCAL_MACHINE\SOFTWARE\Classes.XXX
优先级从上到下依次降低。设置默认应用改的是第一个注册表右侧的Progid和Hash(好像是win10开始才有hash这项)。
用火绒自定义规则第一条注册表路径创建修改询问,发现是explorer.exe修改的,可以用规则阻止创建,但是阻止不了删除。排查了很久,最后在事件查看器日志Microsoft-Windows-Shell-Core/AppDefaults里找到原因:
事件id 62440的日志:
检测到的哈希代码不匹配https. ProgId: MSEdgeHTM. UserSid: S-1-5-21-3550746935-1558288452-1655126001-1002. HashInRegistry: 16HC7/VH+uk=. ComputedHash: BPO/7gBQ3x4=. Date: 2024 : 5: 5 : 10 : 10 : 43
日志里告知了重置默认应用的原因,userchoice右侧ProgId对应的hash值不正确。就算不改默认应用,清除日志后注销重新登录也会出现62440日志,而正常系统是没有这个id的日志。
hash值是由ProgId字符串和userchoice注册表最后写入日期、xxx文件类型等信息生成的。用regworkshop查看userchoice属性,发现写入日期在注销重启后有变化(explorer.exe改名阻止重置后观察得知),导致了hash无效。注销后在新管理员账户里加载用户注册表,查看userchoice最后写入日期没有变化,说明日期是登录过程中修改的。
于是用procmon打开开机日志,看是谁修改userchoice注册表。
然后就看到了:
是User Profile Service服务在登录时改了文件关联注册表的权限,导致最后写入日期变化、hash失效。然而正常系统的日志里User Profile Service不会改注册表项权限。对比两者日志,发现端倪:
从HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings注册表项开始有出入,然后看这项权限,发现少了ALL APPLICATION PACKAGES权限。
刚好我之前写过的工具fixautocfgurl有重置这项权限的功能,管理员身份运行这个工具后,注销重新登录62440日志没有了,文件关联自动重置的问题也解决了!!!