2011-06-23 19 views
6

Mam obecnie problem podczas pisania aplikacji, aby ustawić uprawnienia dla niektórych kluczy Legacy. Klucze starszego typu są dość zablokowane i aby je zmodyfikować w regedit, musisz wziąć na siebie prawo własności, a następnie dodać siebie z pełną kontrolą. Podczas próby replikacji w kodzie nie można uzyskać klucza do zapisu z błędem "Odmowa dostępu". Przykładowy kod:Dostęp do rejestru Registry Access jest zabroniony. C#

RegistrySecurity rs = new RegistrySecurity(); 
rs.AddAccessRule(new RegistryAccessRule("Administrators", RegistryRights.FullControl, AccessControlType.Allow)); 
rs.SetOwner(new NTAccount("Administrators")); 
return LocalMachine.CreateSubKey(post, RegistryKeyPermissionCheck.ReadWriteSubTree, rs); 

Wszelkie pomysły będą mile widziane. Próbowałem również OpenSubKey z żądaniem dostępu do zapisu i po prostu nie mogę uzyskać klucza.

Dzięki chłopaki.

Odpowiedz

7

W końcu znalazłem rozwiązanie. Trzeba było otworzyć klucz z "ChangePermissions", a następnie zmienić pozwolenie dla siebie ... TO ponownie otworzyć klucz z pełną kontrolą, aby zmienić właściciela. Oto jak.

RegistryKey rk = LocalMachine.OpenSubKey(subkey, RegistryKeyPremissionsCheck.ReadWriteSubTree, RegistryRights.ChangePermissions | RegistryRights.ReadKey);//Get the registry key desired with ChangePermissions Rights. 
RegistrySecurity rs = new RegistrySecurity(); 
rs.AddAccessRule(new RegistryAccessRule("Administrator", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));//Create access rule giving full control to the Administrator user. 
rk.SetAccessControl(rs); //Apply the new access rule to this Registry Key. 
rk = LocalMachine.OpenSubKey(subkey, RegistryKeyPremissionsCheck.ReadWriteSubTree, RegistryRights.FullControl); // Opens the key again with full control. 
rs.SetOwner(new NTAccount("Administrator"));// Set the securitys owner to be Administrator 
rk.SetAccessControl(rs);// Set the key with the changed permission so Administrator is now owner. 

To działa dla mnie. Daj mi znać, czy to działa dla ciebie :)

Oczywiście zmień administratora na innego użytkownika, jeśli nie jesteś zalogowany jako administrator lub jeśli potrzebujesz uprawnień dla innego użytkownika.

0

Po uruchomieniu aplikacji z tym kodem, należy kliknąć prawym klawiszem exe i wybrać "Uruchom jako administrator"?

+0

Cześć Steve, uruchomić program Visual Studios jako administrator więc diagnostycznych powinien działać jako admin? Próbowałem również uruchomić jako administrator i nie działa nadal. Klucze Legacy są całkowicie zablokowane, a dostęp do Systemu i Wszyscy są ustawieni jako tylko do odczytu. Znalazłem rozwiązanie i wkrótce opublikuję. – Skintkingle

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

Najpierw należy ustawić uprawnienia z prawej pełnego dostępu do podklucz

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: nazwa konta

-2

Microsoft Visual Studio 2015 (Administrator)

_subKey = SOFTWARE\Wow6432Node\Norton

rkey.SetAccessControl(_registrySecurity);-> "Próba na stanowić nieautoryzowane działanie. "`

+0

Co dokładnie odpowiadasz w tej sprawie? Przepraszam, że nie rozumiem. – Skintkingle

-1
 RegistryKey rkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Norton\SecurityStatusSDK", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.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); 
     try 
     { 
      rkey.SetAccessControl(_registrySecurity);// <---"Attempted to perform an unauthorized operation." 
     } 
     catch (UnauthorizedAccessException e) 
     { 

     } 

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

Po zainstalowaniu programu Norton Internet Security

Powiązane problemy