RegistrySecurity Access is denied. C#

前端 未结 5 1090
说谎
说谎 2021-01-18 11:49

I\'m currently having an issue when writing an app to set permissions on some Legacy keys. Legacy keys are quite locked down and to actually modify them in regedit you have

5条回答
  •  日久生厌
    2021-01-18 12:45

    using System.Security;
    using System.Security.AccessControl;
    using System.Security.Principal;
    using Microsoft.Win32;
    

    First must Set a permission with right FULL-ACCESS to subkey

    RegistryKey rkey = LocalMachine.OpenSubKey(_subKey, RegistryKeyPermissionCheck.ReadWriteSubTree, gistryRights.ChangePermissions);
    if (rkey == null)
     throw new Exception("Not Open");
    //-------
    RegistrySecurity _registrySecurity =new RegistrySecurity();//Or rkey.GetAccessControl();
    WindowsIdentity _windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
    RegistryAccessRule _accessRule = new RegistryAccessRule(_windowsIdentity.Name, RegistryRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow);
    _registrySecurity.AddAccessRule(_accessRule);
    _registrySecurity.SetAccessRuleProtection(false, true);
     rkey.SetAccessControl(_registrySecurity);
    
    //--------Now, Set owner
    
    _registrySecurity.SetGroup(new NTAccount("Administrators"));  //This is optional
    var SID = new System.Security.Principal.NTAccount("XXX\\Users");
    _registrySecurity.SetOwner(SID);
    rkey.SetAccessControl(_registrySecurity);
    

    XXX : your account name

提交回复
热议问题