无法访问特定注册表项

无法访问特定注册表项

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

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

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

  • 我是“管理员”成员
  • 我是机器上唯一的非系统账户
  • 我已经重启了
  • 我在安装程序和 regedit.exe 上都选择了“以管理员身份运行”
  • 我已启用管理员帐户并以管理员身份登录
  • 我尝试授予自己密钥的权限
  • 我尝试授予密钥 SYSTEM 权限
  • 我曾尝试过获得钥匙

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

帮助!

编辑:

我使用的是 Windows 7

答案1

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

我无法访问的键是 ControlSet 类的 Properties 子键;当尝试对其进行任何操作时,无法获取它的所有权,也无法显示当前所有者,并且注册表编辑器会弹出大量错误框。

对我来说,这就是锁定的钥匙:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\Properties

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

我被引导至该键,同时从特定类键上的 SvcHost 获取大量 ACCESS DENIED 的 SysMon 日志行。

编辑:我尝试访问该密钥和注册表错误的情况与所有屏幕截图中描述的情况完全一致此 MS 论坛帖子

截至 2020 年,Heysoft 的 RegDACL 工具似乎建议多于Josh Compley 的博客已经不再可用。然后我想到了另一个解决方案。

  • 我改用 Process Hacker (https://processhacker.sourceforge.io) 使用其菜单“黑客 - 以...身份运行”功能启动以用户名 SYSTEM (NTAUTHORITY\SYSTEM) 运行的 Regedit。

    (该工具或多或少是 SysInternals 著名的 Process Explorer 的演变,并添加/增强了一些功能。您会注意到,为了能够做到这一点,它会构建然后删除一个临时提升的服务;它会通过托盘图标上的提示消息向您详细报告服务的创建和删除情况)。

    (请注意,这不是唯一的方法。还有其他工具。请阅读我的帖子末尾)。

  • 然后,使用这个 SYSTEM 提升权限的 Regedit 打开,并移动到 ControlSet001,原因如下所述,并且阅读了下面的注意事项后:

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

控制集

请注意,当以 SYSTEM 用户身份在 Regedit 中提升权限时,CurrentControlSet 并未显示预期的子键,尤其是我感兴趣的子键,而与此同时,ControlSet001 显示了预期的内容。

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

无论如何,注意到这一点后,我使用 ControlSet001 进行了更改,并且一切进展顺利。

注意事项

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

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

如果这些密钥出现严重问题,这可能是一个非常大的危险,但同时也是一个机遇。

好处

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

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

其他工具

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

另一个完全不同的解决方案涉及使用 SubInAcl Ms 实用程序此处(Ms 社区帖子 - 寻求 kitsune0 的回复)。这将重新处理所有注册表权限,但恕我直言,无论如何,我不会按照所述为简单用户添加完全访问权限。

实时 Windows 访问修补

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

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

最后说明

希望我的解决方案能够帮助遇到此问题的其他人。

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

免责声明:如果您使用此技巧破坏了您的 Windows 系统,我概不负责。请务必小心!

答案2

从以下位置下载 psexec https://learn.microsoft.com/en-us/sysinternals/downloads/psexec

psexec \\computerName -s reg delete {path to your key}

-s选项使用 SYSTEM 身份

值得在“ reg export”之前运行“ reg delete”,以防您想再次恢复内容。

我希望这有帮助

答案3

您是否尝试过获取密钥的所有权?在 WinXP 中,您需要打开权限对话框,单击“高级...”,然后单击“所有权”选项卡。不知道在 Win7 中是否仍然有效。

答案4

固定的!!!

对于将来遇到同样问题的人:

我去了http://www.heysoft.de/old/RegDACLe.htm并下载了 RegDACL。

然后我运行了以下命令:

regdacl HKLM\SOFTWARE\Classes\.map\OpenWithProgids /gga:F /ggu:R

这为管理员和用户提供了完全权限。我本来不需要为用户权限操心,但没关系。

相关内容