如何更改我无权访问的registry项的所有者?

当我将某些机器升级到Windows 10时,RuntimeBroker上的权限不正确导致问题,我遇到了一个奇怪的问题。 我在网上find了一个build议更改权限的解决scheme (首先在registry中,然后在DCOMconfiguration中),然后尝试编写一个Powershell脚本来自动执行该过程。

我试图执行下面的Powershell脚本,这应该(理论上)做我需要做的。 但是,在最后一个命令(Set-Acl)中,我得到一个SecurityException,说“请求的registry访问不被允许”。

$path = "Registry::HKEY_CLASSES_ROOT\AppID\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}"; $account = New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList 'Administrators'; $acl = Get-Acl -Path $path; $acl.SetOwner($account); Set-Acl -Path $path -AclObject $acl; 

目前,该registry项的所有者是NT SERVICE\TrustedInstaller ,我试图将其更改为Administrators我已经运行Powershell的pipe理权限,但显然似乎并不足够…我的猜测是,我遇到了一些鸡和鸡蛋的问题在这里。

如果我使用regedit手动编辑该密钥的权限,我可以毫无问题地执行该操作。 这里的registry与我的脚本有什么不同? 我怎样才能做到这一点编程?

更新:按照briantist的build议,我尝试使用psexec作为SYSTEM运行这些命令。 我将上面公布的Powershell命令保存到我的桌面上的文件chowner.ps1中,然后运行以下命令:

 PsExec64.exe -accepteula -d -i -s powershell -ExecutionPolicy Bypass -File C:\Users\User\Desktop\chowner.ps1 

不幸的是,我仍然得到相同的SecurityException消息。 我相信原因是因为甚至没有系统有权访问此特定的registry项; 请记住,TrustedInstaller拥有它。

您可以使用Helge Kleins出色的Set-ACL CLI工具: https ://helgeklein.com/setacl/。

 SetACL.exe -on "hkcr\AppID\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}" -ot reg -actn setowner -ownr "n:S-1-5-32-544" 

那一个会做我想的诡计。 必须以提升的权限运行。

你应该运行你的代码作为SYSTEM ,也就是Local System

为此,可以使用psexec ,也可以将代码作为设置为以SYSTEM身份运行的计划任务运行。 这应该允许你改变任何权限。