Добавьте правило доступа к реестру к ключу, к которому у меня нет доступа, но я администратор - PullRequest
0 голосов
/ 29 марта 2011

Я пытаюсь добавить некоторые правила доступа к разделу реестра, на который у меня нет прав, но я администратор и использую команду "Run as administrator" в меню правой кнопки мыши.
К сожалению, исключение выдается (System.UnauthorizedAccessException).
При запуске regedit.exe в качестве администратора я могу изменить права на этот ключ без каких-либо проблем.
Как добавить любое правило доступа к этому ключу в моем приложении?

RegistryKey root = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\some_key", RegistryKeyPermissionCheck.ReadWriteSubTree);
RegistrySecurity security = new RegistrySecurity();
SecurityIdentifier sec = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
RegistryAccessRule rule = new RegistryAccessRule(sec, RegistryRights.ReadKey | RegistryRights.QueryValues, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow);
security.AddAccessRule(rule);
root.SetAccessControl(security);
root.Close();

Ответы [ 3 ]

0 голосов
/ 29 марта 2011

Документация довольно понятна:

UnauthorizedAccessException: текущий объект RegistryKey представляет ключ с безопасностью контроля доступа, а вызывающая сторона не имеет прав RegistryRights.ChangePermissions..

См. Также документацию для RegistryRights.

0 голосов
/ 03 декабря 2014

Я знаю, что это старая тема, но я сталкивался с этой проблемой раньше. Я обнаружил, что сначала нужно открыть ключ с помощью RegistryRights.ChangePermissions , затем вы можете изменить управление доступом.

Попробуйте открыть ключ так:

    RegistryKey root = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\some_key",
RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions);

И затем изменение правил AccessControl.

0 голосов
/ 29 марта 2011

Я думаю, вы должны использовать метод GetAccessControl (), чтобы получить объект RegistrySecurity:

RegistryKey root = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\some_key", RegistryKeyPermissionCheck.ReadWriteSubTree);
RegistrySecurity security = root.GetAccessControl();

Вероятно, вы получите исключение, потому что вы пытаетесь переписать правила безопасности, а не изменять их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...