Программно назначить разрешение для раздела реестра - PullRequest
7 голосов
/ 28 октября 2011

Вот как мы manually назначаем разрешения для раздела реестра:

Чтобы назначить разрешения для раздела реестра

  • Открыть редактор реестра. Нажмите клавишу, которой вы хотите назначить права доступа.

  • В меню «Правка» выберите пункт «Разрешения».

  • Назначить уровень доступа для выбранной клавиши следующим образом:

  • Предоставление пользователю разрешения читать содержимое ключа, но не сохранять любые изменения, внесенные в файл в разделе «Разрешения для имени» для Read , установите флажок Разрешить.

  • Чтобы предоставить пользователю разрешение открывать, редактировать и вступать во владение выбранный ключ, в разделе Разрешения для имени, для Полный доступ , выберите флажок Разрешить.

  • Чтобы предоставить пользователю специальное разрешение для выбранного ключа, нажмите Дополнительно.

Итак, мой вопрос, возможно ли сделать это программно? Скажем, если я хочу предоставить пользователям полный доступ к определенному подразделу, как мне написать код на C #? Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 15 января 2015
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine;
RegistrySecurity rs = new RegistrySecurity();
rs = key.GetAccessControl();
string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName;
rs.AddAccessRule(new RegistryAccessRule(currentUserStr, RegistryRights.WriteKey |  RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.FullControl, AccessControlType.Allow));

Это назначит права доступа указанному пользователю ключу реестра 'key'

3 голосов
/ 08 июня 2012

RegistrySecurity класс также полезен здесь.Таким образом, мы можем написать следующий код, чтобы применить правила доступа к разделу реестра для текущего пользователя.

RegistrySecurity rs = new RegistrySecurity(); // it is right string for this code
string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName;
rs.AddAccessRule(new RegistryAccessRule(currentUserStr, RegistryRights.WriteKey | RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.FullControl, AccessControlType.Allow));
1 голос
/ 28 октября 2011

Это около RegSetKeySecurity API, который связан с кодом .NET через RegistryKey.SetAccessControl, см. Использование RegSetKeySecurity для предотвращения перенаправления реестра

...