无法访问特定注册表项

Jos*_*ley 4 windows-registry

我正在尝试安装 Visual Studio 2008 的修补程序,但每次安装都会失败,并且日志文件中的报告是安装程序无权访问:

\\HKLM\Software\Classes\.map\OpenWithProgids

如果加载 regedit.exe 我无法访问该密钥,则会收到“访问被拒绝”错误。

  • 我是“管理员”的成员
  • 我是机器上唯一的非系统帐户
  • 我已经重新启动了
  • 我在安装程序和 regedit.exe 上“以管理员身份运行”
  • 我已启用管理员帐户并以此身份登录
  • 我尝试授予自己对密钥的权限
  • 我尝试授予该密钥 SYSTEM 权限
  • 我试图取得钥匙的所有权

我不知道还能尝试什么,我自己的注册表被锁定了!

帮助!

编辑:

我使用的是 Windows 7

Alb*_*P64 6

好吧,我遇到了同样的问题并找到了另一个可行的解决方案

我无法访问的键是 ControlSet 类的 Properties 子键;无法拥有,也无法向当前所有者显示,在尝试对其进行任何操作时,regedit 会弹出大量错误框。

这就是我的情况下锁定的钥匙:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\Properties
Run Code Online (Sandbox Code Playgroud)

(注意:从 CurrentControlSet 访问它时通常是相同的,但在该修复解决方案中则不同,请阅读为什么我要以这种方式访问​​)。

我被定向到该密钥,同时在特定类密钥上从 SvcHost 获取大量 ACCESS DENIED 的 SysMon 日志行。

编辑:我尝试访问该密钥的情况以及注册表错误,正是此 MS 论坛帖子中所有屏幕截图所描述的情况。

截至 2020 年, Josh Compley在上面建议的 Heysoft 的 RegDACL 工具似乎不再可用。然后我想到了另一个解决方案。

  • 相反,我使用 Process Hacker ( https://processhacker.sourceforge.io ),使用他的菜单“Hacker - Run As”功能来启动以用户名 SYSTEM (NTAUTHORITY\SYSTEM) 运行的 Regedit。

    (该工具或多或少是 SysInternals 著名的 Process Explorer 的演变,增加了一些/增加了功能。您会注意到,为了能够做到这一点,它会构建然后删除一个临时提升的服务;它会勤奋地将这一情况报告给您自己通过托盘图标中的 toast 消息来了解有关服务创建和删除的信息)。

    (请注意,这不是执行此操作的唯一方法。还有其他工具。请阅读我的文章末尾)。

  • 然后,打开此系统提升的 Regedit,并出于下面所述的原因移动到 ControlSet001 并阅读下面的注意事项后:

    • [安全通知:在执行任何操作之前,最好先进行完整的注册表备份;另外,在更改任何内容之前,从那时起您可以完全导出整个注册表,包括您以前无法访问的锁定密钥!]
    • 然后,我能够看到之前锁定的 Properties 键,甚至可以看到它的子键和值(之前隐藏的)。
    • 我还可以通过重新启用继承来更改锁定的 Properties 键的权限;
    • 然后退出并重新进入该密钥的权限对话框(只是为了确保所有更改都是真实存在的),最后删除了多余的固定系统密钥权限,而不是继承,就在那里。
    • 在将密钥继承重置为默认值后,甚至所有者设置也神奇地重置为管理员。
    • 在那里,我还检查了所有子键和子值权限,以确保所有都设置为继承,并且一切正常。只有“属性”键有这个问题。

控制集

请注意,在使用 SYSTEM 用户提升的 Regedit 中时,CurrentControlSet 没有显示预期的子键,尤其是我感兴趣的子键,而与此同时,ControlSet001 显示具有预期的内容。

也许,Ccs 将采用不同的当前控制集,具体取决于当前运行的用户。

不管怎样,注意到这一点后,我使用 ControlSet001 进行更改,一切都很顺利。

注意事项

无论如何都要小心并极其谨慎:通过使用这个系统提升的 Regedit,您几乎可以做任何事情,这是一个很大的危险。

我可以读取(并且可能修改,我还没有尝试过)任何通常受保护的部分,作为安全配置单元子密钥!

如果您在这些按键上遇到了严重问题,这可能是一个非常大的危险,但也是一个机会。

好处

重要的是,此过程同意我恢复锁定的密钥及其子密钥和数据,而不是尝试删除它(网上有工具可以删除锁定的密钥)。其下的子键和值均被保留,并可供系统再次访问。

这似乎是一种更通用的解决方案,并且不依赖于特定工具,只要有一种方法可以启动具有 SYSTEM 提升安全授权的 Regedit 实例,并且 Process Hacker 就可以做到这一点。

其他工具来执行此操作

我还遇到过使用 PsExec 在另一个线程中打开提升的 Regedit 的其他解决方案,但我已经安装了 Process Hacker,因此我使用了它:Scott Chamberlain 的 PsExec 解决方案

这里描述了另一个完全不同的解决方案,涉及使用 SubInAcl Ms 实用程序(Ms 社区 post-seek 回复,kitsune0)。这将重新设计所有注册表权限,但恕我直言,无论如何,我不会向简单用户添加完全访问权限。

实时Windows访问修补

仅打开此提升的 Regedit,并过滤运行进程监视器的实例(实时告诉我与普通用户不同的用户的注册表访问被拒绝消息),我可以“实时”修复许多不同的 Windows 注册表访问问题(如错误行出现在进程监视器上),同时恢复完整的密钥树,这些密钥树由于任何未知的原因甚至系统本身都无法访问,因此,肯定会修复大量出现故障的窗口,密集回合。

执行此操作时请注意,并非 SysMon 记录的所有 ACCESS DENIED 行都是需要解决的错误。有些是应用程序和系统组件的权限检查逻辑的一部分,不需要更改任何内容。您必须将注意力集中在与您的系统遇到的一些实际故障有关的组件的重复连续失败尝试上。

最后的笔记

希望我的解决方案可以帮助其他遇到这个问题的人。

在进行密集的注册表挖掘和修补之前,请务必备份整个系统和注册表配置单元。

免责声明:对于您通过此技巧破坏您的 Windows 系统,我不承担任何责任。要特别小心!