Как установить правило доступа к реестру на удаленной машине с помощью c # - PullRequest
4 голосов
/ 31 мая 2010

Я пытаюсь установить правило доступа к реестру на удаленной машине:

using (RegistryKey localMachineKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, serverName))
{
  RegistrySecurity rs = new RegistrySecurity();
  rs.AddAccessRule(new RegistryAccessRule(userName, RegistryRights.FullControl, AccessControlType.Allow));

  using (RegistryKey subKey = localMachineKey.CreateSubKey(registryKey))
  {
    subKey.SetValue(name, value);
    subKey.SetAccessControl(rs);
  }
}

это вызывает следующее исключение:

    System.NotSupportedException: The supplied handle is invalid. This can happen when trying to set an ACL on an anonymous kernel object.
   at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
   at System.Security.AccessControl.NativeObjectSecurity.Persist(SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
   at System.Security.AccessControl.RegistrySecurity.Persist(SafeRegistryHandle hKey, String keyName)...

Кто-нибудь знает, как заставить это работать? Спасибо!

1 Ответ

2 голосов
/ 08 июня 2011

Возможно использование WinRM. Как получить доступ к WinRM в C #

Эта ссылка предполагает, что наряду с немного большей информацией:

http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/0beee366-ee8d-4052-b1b9-8ad9bf0f8ff0/

Часть ссылки предполагает, что невозможно установить это удаленно. Однако в нижней части Shaka_01 упоминается вызов. SetAccessRuleProtection.

RegistryKey rk = RegistryKey.OpenRemoteBaseKey(...);
RegistrySecurity rs = rk.GetAccessControl(AccessControlSections.All);
rs.SetAccessRuleProtection(true, true); //this line you need to set  ACL on a remote machines registry key.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...