即使具有正确的权限,注册表项访问也会被拒绝

即使具有正确的权限,注册表项访问也会被拒绝

我正在运行 Windows 10 家庭版 64 位的全新安装(仅几天前),在访问特定注册表项时遇到问题。当 Office VBA 编辑器(我自己的受限用户帐户下的 32 位进程)扫描注册表以查找可用控件时,它会命中{0002DF01-0000-0000-C000-000000000046}HKCR\CLSIDs 分支中的 CLSID,并在以读取模式打开该项时出现“访问被拒绝”提示,从而阻止其继续运行。此键仅存在于 HKLM 分支中,而不存在于 HKCU 分支中。查看它的默认值,它适用于“Internet Explorer(Ver 1.0)”。它有两个副本;一个直接位于 Classes\CLSID 路径中,另一个位于 32 位进程的 Classes\WOW6432Node\CLSID 路径中。由于这是 Office 32 位,因此我首先关注 WOW6432Node 版本。

我迄今为止的测试:

  • 此密钥已具有我的用户帐户的读取权限...发生了什么?
  • 所有者是 TrustedInstaller(为什么是他?),并且此密钥的权限被明确覆盖(即没有像我怀疑的那样被继承 - 为什么?)
  • 我将所有者更改为管理员,并添加了具有完全权限的特定用户帐户。RegEdit 的“有效访问”选项卡确认此用户对其具有完全权限,但是当 VBA IDE(在同一用户帐户下运行)尝试读取它时,仍然会触发访问被拒绝?
  • 我临时重命名了该键(例如,将第一个“0”替换为“1”)。根据 Process Monitor,VBA IDE 现在可以正常读取重命名的键 - 不再拒绝访问!?重命名后又会出现以前的行为...
  • 考虑到这可能是同一密钥的 32 位和 64 位“版本”之间的冲突,我尝试对该密钥的 64 位版本执行相同操作。结果:默认权限已经足够好,将所有权设置为管理员有效,授予管理员完全控制权也有效,但不允许在 RegEdit 中将密钥重命名为管理员?RegEdit 抛出“重命名密钥错误 - 注册表编辑器无法重命名 {0002DF01-0000-0000-C000-000000000046}。重命名密钥时出错。”(哇,这是很有用的信息!)使用进程监视器显示 RegEdit 的 RegRenameKey 操作也导致此处访问被拒绝。
  • 使用系统帐户运行 RegEdit PsExec -s -i regedit.exe(通过任务管理器确认的帐户),仍然无法重命名该项。

因此,这似乎不是权限问题本身;看起来好像其他进程正在通过名称主动监视对此密钥的访问并拒绝访问?无论设置了正确的权限,管理员都无法重命名密钥的 64 位版本,并且尝试读取密钥的 32 位版本的 32 位进程也会被“拒绝访问”。我假设由于 32 位进程查询通用 Classes\CLSID... 路径(即不像我的 RegEdit 重命名那样明确包含 WOW6432Node 路径),这会触发此处的相同捕获。

补充一下:我真的不记得这种情况是什么时候开始发生的;几周前,当我再次需要这个 VBA IDE 功能时,我第一次注意到了它。我安装了 Sandboxie v5.18 和默认的 Windows Defender。所有软件都已打补丁并保持最新。除此之外,没有安装任何其他侵入性安全软件。关闭 Sandboxie 服务和 Windows Defender 也无济于事,在安全模式下运行 Windows 也无济于事。

有人知道会发生什么事吗?

对于任何好奇和/或需要帮助修复此问题的人,上下文如下:我使用的是 Office 2010 专业版 32 位,我遇到了 VBA IDE 错误,导致在 IDE 中设计表单时无法向工具箱添加其他控件。我可以整天选择“其他控件”(从菜单以及工具箱本身的弹出上下文菜单中),但除了光标改变表单的短暂闪烁外,什么都没有发生 - 没有打开任何“其他控件”对话框,没有显示任何错误,什么都没有。发生这种情况的原因是,当遍历注册表以搜索“控件”类型 CLSID 时,VBA IDE 在读取注册表项时遇到“访问被拒绝”错误时会退出正在执行的操作。使用进程监视器,您可以找到哪个键触发了权限错误,纠正设置的权限可以让 VBA 再次正常运行。不幸的是,这个错误已经存在很长时间了,虽然它并不经常遇到,但在我看来,它仍然是一个糟糕的设计,还没有得到修复。

相关内容