4

I'm trying to set an registry access rule on a remote machine:

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); } } 

this produces the following exception:

 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)... 

Does anyone know how to make this working? Thanks!

2
  • Are both computers on the same domain, and does the user you run your code under have access on the other machine? Commented May 31, 2010 at 21:45
  • Yes, both computers are in the same domain. Yes, the user is in the built in Administrator group on both machines. Commented Jun 1, 2010 at 11:06

1 Answer 1

2

Using WinRM might be an option. How to access WinRM in C#

This link suggests that along with a bit more information:

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

Part of the link suggests that it is not possible set this remotely. However, at the bottom, Shaka_01 mentions calling.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. 
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you Jason for your answer. At the moment, I cannot check, if your answer solves my problem, that's why I just upvote your answer.
I confirm that SetAccessRuleProtection(true,true) does prevent the error. However be aware what this does. It turns off 'Include inheritable permissions from this object's parent'. You might not want to do that without understanding the implications.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.