Назад | Перейти на главную страницу

Как я могу сменить владельца ключа реестра, к которому у меня нет доступа?

У меня возникла странная проблема, когда я обновил некоторые машины до Windows 10, когда неправильные разрешения в RuntimeBroker вызывали проблемы. я нашел решение онлайн который рекомендовал изменить разрешения (сначала в реестре, затем в конфигурации DCOM), и я пытаюсь написать сценарий Powershell для автоматизации процесса.

Я пытаюсь выполнить следующий скрипт Powershell, который (теоретически) должен делать то, что мне нужно. Однако при последней команде (Set-Acl) я получаю исключение SecurityException, в котором говорится: «Запрошенный доступ к реестру не разрешен».

$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;

В настоящее время владельцем этого ключа реестра является NT SERVICE\TrustedInstaller, и я пытаюсь изменить его на Administrators. Я уже запускаю Powershell с правами администратора но этого явно недостаточно ... я предполагаю, что здесь у меня проблема с курицей и яйцом.

Если я вручную отредактирую разрешения этого ключа, используя regedit, Мне разрешено делать это без проблем. Чем отличается этот regedit от моего скрипта? Как я могу сделать это программно?

ОБНОВИТЬ: По предложению бриантистов я попытался запустить эти команды как СИСТЕМУ с помощью psexec. Я сохранил приведенные выше команды Powershell в файл на своем рабочем столе под названием chowner.ps1, а затем выполнил следующую команду:

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

К сожалению, я все еще получаю то же сообщение SecurityException. Я считаю, что причина в том, что даже SYSTEM не имеет прав доступа к этому конкретному ключу реестра; помните, что он принадлежит TrustedInstaller.

Вы можете использовать отличный инструмент Set-ACL CLI Helge Kleins: 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, a.k.a. Local System.

Для этого вы можете использовать psexec из SysInternals, или вы можете запустить код как запланированную задачу, которая настроена на запуск как SYSTEM. Это должно позволить вам изменить любые разрешения.