2011-06-23 12 views
6

いくつかのレガシーキーのアクセス許可を設定するためのアプリケーションを作成する際に、現在問題が発生しています。レガシーキーはかなりロックされており、実際にregeditでそれらを変更するには、所有権を取得してから自分自身をフルコントロールで追加する必要があります。コードでこれを複製しようとすると、 "アクセスが拒否されました"というエラーで書き込みのキーを取得できません。例コード:RegistrySecurityアクセスが拒否されました。 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); 

アイデアをいただければ幸いです。私はまた、書き込みアクセスが要求されたOpenSubKeyを試してみました。私はキーを取得できません。

ありがとうございます。

答えて

7

最終的に解決策が見つかりました。あなたは "ChangePermissions"でキーをオープンしてから、あなた自身の権限を変更しなければなりません...次に、オーナーを変更するためにフルコントロールでキーを再度開きます。 方法は次のとおりです。

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. 

これは私に役立ちます。

管理者としてログインしていない場合や、別のユーザーの権限が必要な場合は、明らかに別のユーザーに変更してください。

0

このコードでアプリケーションを実行すると、exeを右クリックして[管理者として実行]を選択していますか?

+0

こんにちはSteveをインストールし、私はそうは管理者として実行する必要があり、デバッグ、管理者としてビジュアル・スタジオを実行しますか?私はまた、管理者として実行しようとしたが、それはまだ動作しません。レガシーキーは完全にロックされ、システムおよびEveryoneへのアクセスのみが読み取り専用として設定されます。私は解決策を見つけて、まもなく投稿します。 – Skintkingle

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

まずサブキーに右FULL-ACCESS

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と権限を設定する必要があります。自分のアカウント名を

-2

マイクロソフトのVisual Studio 2015(管理者)

_subKey = SOFTWARE\Wow6432Node\Norton

rkey.SetAccessControl(_registrySecurity);-> "不正操作を形成する。 "`

+0

あなたは正確にこれに答えていますか?私は私が従わないで申し訳ありません。 – 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); 

を私はノートンインターネットセキュリティ

関連する問題