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

Я столкнулся с странной проблемой, когда обновлял некоторые машины до 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 , и я пытаюсь чтобы изменить его на Администраторы . Я уже запускаю 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.

1
задан 19 July 2016 в 22:55
2 ответа

Вы можете использовать отличный инструмент командной строки Set-ACL от 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"

Думаю, этот трюк поможет . Необходимо запускать с повышенными разрешениями.

2
ответ дан 3 December 2019 в 20:36

Вы должны запустить свой код как SYSTEM , иначе Local System .

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

0
ответ дан 3 December 2019 в 20:36

Теги

Похожие вопросы