RegistryAccessRule クラス

定義

ユーザーまたはグループに許可されたアクセス権セットまたは拒否されたアクセス権セットを表します。Represents a set of access rights allowed or denied for a user or group. このクラスは継承できません。This class cannot be inherited.

public ref class RegistryAccessRule sealed : System::Security::AccessControl::AccessRule
[System.Security.SecurityCritical]
public sealed class RegistryAccessRule : System.Security.AccessControl.AccessRule
type RegistryAccessRule = class
    inherit AccessRule
Public NotInheritable Class RegistryAccessRule
Inherits AccessRule
継承
RegistryAccessRule
属性

次のコード例は、継承と反映を含むアクセス規則を示しています。The following code example demonstrates access rules with inheritance and propagation. この例ではRegistrySecurity 、オブジェクトを作成し、 ContainerInheritフラグを持つ2つのルールを作成して追加します。The example creates a RegistrySecurity object, then creates and adds two rules that have the ContainerInherit flag. 最初のルールには伝達フラグがありませんがNoPropagateInheritInheritOnly2 番目のルールにはおよびがあります。The first rule has no propagation flags, while the second has NoPropagateInherit and InheritOnly.

プログラムによってRegistrySecurityオブジェクト内のルールが表示され、オブジェクトを使用してサブキーが作成されます。The program displays the rules in the RegistrySecurity object, and then uses the object to create a subkey. プログラムは、子サブキーと孫サブキーを作成し、各サブキーのセキュリティを表示します。The program creates a child subkey and a grandchild subkey, and then displays the security for each subkey. 最後に、プログラムはテストキーを削除します。Finally, the program deletes the test keys.


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

public class Example
{
    public static void Main()
    {
        const string TestKey = "TestKey3927";
        RegistryKey cu = Registry.CurrentUser;

        string user = Environment.UserDomainName + 
            "\\" + Environment.UserName;

        // Create a security object that grants no access.
        RegistrySecurity mSec = new RegistrySecurity();

        // Add a rule that grants the current user the right
        // to read and enumerate the name/value pairs in a key, 
        // to read its access and audit rules, to enumerate
        // its subkeys, to create subkeys, and to delete the key. 
        // The rule is inherited by all contained subkeys.
        //
        RegistryAccessRule rule = new RegistryAccessRule(user, 
           RegistryRights.ReadKey | RegistryRights.WriteKey 
               | RegistryRights.Delete, 
           InheritanceFlags.ContainerInherit, 
           PropagationFlags.None, 
           AccessControlType.Allow
        );
        mSec.AddAccessRule(rule);

        // Add a rule that allows the current user the right
        // right to set the name/value pairs in a key. 
        // This rule is inherited by contained subkeys, but
        // propagation flags limit it to immediate child 
        // subkeys.
        rule = new RegistryAccessRule(user, 
            RegistryRights.ChangePermissions, 
            InheritanceFlags.ContainerInherit, 
            PropagationFlags.InheritOnly | 
                PropagationFlags.NoPropagateInherit, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Display the rules in the security object.
        ShowSecurity(mSec);

        // Create the test key using the security object.
        //
        RegistryKey rk = cu.CreateSubKey(TestKey, 
            RegistryKeyPermissionCheck.ReadWriteSubTree, mSec);

        // Create a child subkey and a grandchild subkey, 
        // without security.
        RegistryKey rkChild = rk.CreateSubKey("ChildKey", 
            RegistryKeyPermissionCheck.ReadWriteSubTree);
        RegistryKey rkGrandChild = 
            rkChild.CreateSubKey("GrandChildKey", 
                RegistryKeyPermissionCheck.ReadWriteSubTree);

        Show(rk);
        Show(rkChild);
        Show(rkGrandChild);

        rkGrandChild.Close();
        rkChild.Close();
        rk.Close();

        cu.DeleteSubKeyTree(TestKey);
    }

    private static void Show(RegistryKey rk)
    {
        Console.WriteLine(rk.Name);
        ShowSecurity(rk.GetAccessControl());
    }

    private static void ShowSecurity(RegistrySecurity security)
    {
        Console.WriteLine("\r\nCurrent access rules:\r\n");

        foreach( RegistryAccessRule ar in security.GetAccessRules(true, true, typeof(NTAccount)) )
        {

            Console.WriteLine("        User: {0}", ar.IdentityReference);
            Console.WriteLine("        Type: {0}", ar.AccessControlType);
            Console.WriteLine("      Rights: {0}", ar.RegistryRights);
            Console.WriteLine(" Inheritance: {0}", ar.InheritanceFlags);
            Console.WriteLine(" Propagation: {0}", ar.PropagationFlags);
            Console.WriteLine("   Inherited? {0}", ar.IsInherited);
            Console.WriteLine();
        }

    }
}

/* This code example produces output similar to following:

Current access rules:

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, Delete, ReadKey
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? False

        User: TestDomain\TestUser
        Type: Allow
      Rights: ChangePermissions
 Inheritance: ContainerInherit
 Propagation: NoPropagateInherit, InheritOnly
   Inherited? False

HKEY_CURRENT_USER\TestKey3927

Current access rules:

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, Delete, ReadKey
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? False

        User: TestDomain\TestUser
        Type: Allow
      Rights: ChangePermissions
 Inheritance: ContainerInherit
 Propagation: NoPropagateInherit, InheritOnly
   Inherited? False

HKEY_CURRENT_USER\TestKey3927\ChildKey

Current access rules:

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, Delete, ReadKey
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? True

        User: TestDomain\TestUser
        Type: Allow
      Rights: ChangePermissions
 Inheritance: None
 Propagation: None
   Inherited? True

HKEY_CURRENT_USER\TestKey3927\ChildKey\GrandChildKey

Current access rules:

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, Delete, ReadKey
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? True
 */
Option Explicit
Imports System.Security.AccessControl
Imports System.Security.Principal
Imports System.Security
Imports Microsoft.Win32

Public Class Example

    Public Shared Sub Main()

        Const TestKey As String = "TestKey3927"
        Dim cu As RegistryKey = Registry.CurrentUser

        Dim user As String = Environment.UserDomainName _ 
            & "\" & Environment.UserName

        ' Create a security object that grants no access.
        Dim mSec As New RegistrySecurity()

        ' Add a rule that grants the current user the right
        ' to read and enumerate the name/value pairs in a key, 
        ' to read its access and audit rules, to enumerate
        ' its subkeys, to create subkeys, and to delete the key. 
        ' The rule is inherited by all contained subkeys.
        '
        Dim rule As New RegistryAccessRule(user, _
            RegistryRights.ReadKey Or RegistryRights.WriteKey _
                Or RegistryRights.Delete, _
            InheritanceFlags.ContainerInherit, _
            PropagationFlags.None, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ' Add a rule that allows the current user the right
        ' right to set the name/value pairs in a key. 
        ' This rule is inherited by contained subkeys, but
        ' propagation flags limit it to immediate child 
        ' subkeys.
        rule = New RegistryAccessRule(user, _
            RegistryRights.ChangePermissions, _
            InheritanceFlags.ContainerInherit, _
            PropagationFlags.InheritOnly Or PropagationFlags.NoPropagateInherit, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ' Display the rules in the security object.
        ShowSecurity(mSec)

        ' Create the test key using the security object.
        '
        Dim rk As RegistryKey = cu.CreateSubKey(TestKey, _
            RegistryKeyPermissionCheck.ReadWriteSubTree, _
            mSec)

        ' Create a child subkey and a grandchild subkey, 
        ' without security.
        Dim rkChild As RegistryKey= rk.CreateSubKey("ChildKey", _
            RegistryKeyPermissionCheck.ReadWriteSubTree)
        Dim rkGrandChild As RegistryKey = _
            rkChild.CreateSubKey("GrandChildKey", _
                RegistryKeyPermissionCheck.ReadWriteSubTree)

        Show(rk)
        Show(rkChild)
        Show(rkGrandChild)

        rkGrandChild.Close()
        rkChild.Close()
        rk.Close()

        cu.DeleteSubKeyTree(TestKey)
    End Sub 

    Private Shared Sub Show(ByVal rk As RegistryKey)
        Console.WriteLine(rk.Name)            
        ShowSecurity(rk.GetAccessControl())
    End Sub

    Private Shared Sub ShowSecurity(ByVal security As RegistrySecurity)
        Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)

        For Each ar As RegistryAccessRule In _
            security.GetAccessRules(True, True, GetType(NTAccount))

            Console.WriteLine("        User: {0}", ar.IdentityReference)
            Console.WriteLine("        Type: {0}", ar.AccessControlType)
            Console.WriteLine("      Rights: {0}", ar.RegistryRights)
            Console.WriteLine(" Inheritance: {0}", ar.InheritanceFlags)
            Console.WriteLine(" Propagation: {0}", ar.PropagationFlags)
            Console.WriteLine("   Inherited? {0}", ar.IsInherited)
            Console.WriteLine()
        Next

    End Sub
End Class 

'This code example produces output similar to following:
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, Delete, ReadKey
' Inheritance: ContainerInherit
' Propagation: None
'   Inherited? False
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: ChangePermissions
' Inheritance: ContainerInherit
' Propagation: NoPropagateInherit, InheritOnly
'   Inherited? False
'
'HKEY_CURRENT_USER\TestKey3927
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, Delete, ReadKey
' Inheritance: ContainerInherit
' Propagation: None
'   Inherited? False
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: ChangePermissions
' Inheritance: ContainerInherit
' Propagation: NoPropagateInherit, InheritOnly
'   Inherited? False
'
'HKEY_CURRENT_USER\TestKey3927\ChildKey
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, Delete, ReadKey
' Inheritance: ContainerInherit
' Propagation: None
'   Inherited? True
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: ChangePermissions
' Inheritance: None
' Propagation: None
'   Inherited? True
'
'HKEY_CURRENT_USER\TestKey3927\ChildKey\GrandChildKey
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, Delete, ReadKey
' Inheritance: ContainerInherit
' Propagation: None
'   Inherited? True

注釈

RegistryAccessRuleクラスは、レジストリキーの Windows アクセス制御セキュリティを管理するために .NET Framework が提供するクラスのセットの1つです。The RegistryAccessRule class is one of a set of classes that the .NET Framework provides for managing Windows access control security on registry keys. これらのクラスの概要と、基になる Windows アクセス制御構造との関係についRegistrySecurityては、「」を参照してください。For an overview of these classes, and their relationship to the underlying Windows access control structures, see RegistrySecurity.

注意

Windows アクセス制御セキュリティは、レジストリキーにのみ適用できます。Windows access control security can only be applied to registry keys. キーに格納されている個々のキーと値のペアには適用できません。It cannot be applied to individual key/value pairs stored in a key.

現在レジストリキーに適用されている規則の一覧を取得するにRegistryKey.GetAccessControlは、メソッドをRegistrySecurity使用してオブジェクトを取得GetAccessRulesし、そのメソッドを使用RegistryAccessRuleしてオブジェクトのコレクションを取得します。To get a list of the rules currently applied to a registry key, use the RegistryKey.GetAccessControl method to get a RegistrySecurity object, and then use its GetAccessRules method to obtain a collection of RegistryAccessRule objects.

RegistryAccessRuleオブジェクトは、基になる随意制御アクセスリスト (DACL) のアクセス制御エントリと一対一でマップされません。RegistryAccessRule objects do not map one-to-one with access control entries in the underlying discretionary control access list (DACL). レジストリキーのすべてのアクセス規則のセットを取得すると、そのセットには、すべてのアクセス制御エントリを表すために現在必要な規則の最小数が含まれます。When you get the set of all access rules for a registry key, the set contains the minimum number of rules currently required to express all the access control entries.

注意

ルールを適用および削除すると、基になるアクセス制御エントリが変わります。The underlying access control entries change as you apply and remove rules. 可能であれば、ルール内の情報を結合して、アクセス制御エントリの最小数を維持します。The information in rules is merged if possible, to maintain the smallest number of access control entries. したがって、現在のルールの一覧を読むと、追加したすべてのルールの一覧とまったく同じように表示されない場合があります。Thus, when you read the current list of rules, it might not look exactly like the list of all the rules you have added.

オブジェクトRegistryAccessRuleを使用して、ユーザーまたはグループに対して許可または拒否するアクセス権を指定します。Use RegistryAccessRule objects to specify access rights to allow or deny to a user or group. オブジェクトRegistryAccessRuleは常に、許可されたアクセスまたは拒否されたアクセスのいずれかを表します。A RegistryAccessRule object always represents either allowed access or denied access, never both.

レジストリキーに規則を適用するには、 RegistryKey.GetAccessControlメソッドを使用してRegistrySecurityオブジェクトを取得します。To apply a rule to a registry key, use the RegistryKey.GetAccessControl method to get the RegistrySecurity object. 規則を追加するメソッドを使用してRegistryKey.SetAccessControl オブジェクトを変更し、メソッドを使用してセキュリティオブジェクトを再アタッチします。RegistrySecurityModify the RegistrySecurity object by using its methods to add the rule, and then use the RegistryKey.SetAccessControl method to reattach the security object.

重要

RegistrySecurityオブジェクトに加えた変更は、変更されたセキュリティオブジェクトをレジストリキーに割り当てるためにRegistryKey.SetAccessControlメソッドを呼び出すまで、レジストリキーのアクセスレベルには影響しません。Changes you make to a RegistrySecurity object do not affect the access levels of the registry key until you call the RegistryKey.SetAccessControl method to assign the altered security object to the registry key.

RegistryAccessRuleオブジェクトは変更できません。RegistryAccessRule objects are immutable. レジストリキーのセキュリティは、 RegistrySecurityクラスのメソッドを使用して、規則を追加または削除することによって変更されます。これを行うと、基になるアクセス制御エントリが変更されます。Security for a registry key is modified using the methods of the RegistrySecurity class to add or remove rules; as you do this, the underlying access control entries are modified.

コンストラクター

RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType)

規則を適用するユーザーまたはグループ、アクセス権、および指定したアクセス権を許可するかどうかを指定して、RegistryAccessRule クラスの新しいインスタンスを初期化します。Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied.

RegistryAccessRule(IdentityReference, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType)

規則を適用するユーザーまたはグループ、アクセス権、継承フラグ、反映フラグ、および指定したアクセス権を許可するかどうかを指定して、RegistryAccessRule クラスの新しいインスタンスを初期化します。Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to, the access rights, the inheritance flags, the propagation flags, and whether the specified access rights are allowed or denied.

RegistryAccessRule(String, RegistryRights, AccessControlType)

規則を適用するユーザーまたはグループの名前、アクセス権、および指定したアクセス権を許可するかどうかを指定して、RegistryAccessRule クラスの新しいインスタンスを初期化します。Initializes a new instance of the RegistryAccessRule class, specifying the name of the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied.

RegistryAccessRule(String, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType)

規則を適用するユーザーまたはグループの名前、アクセス権、継承フラグ、反映フラグ、および指定したアクセス権を許可するかどうかを指定して、RegistryAccessRule クラスの新しいインスタンスを初期化します。Initializes a new instance of the RegistryAccessRule class, specifying the name of the user or group the rule applies to, the access rights, the inheritance flags, the propagation flags, and whether the specified access rights are allowed or denied.

プロパティ

AccessControlType

この AccessControlType オブジェクトに関連付けられている AccessRule 値を取得します。Gets the AccessControlType value associated with this AccessRule object.

(継承元 AccessRule)
AccessMask

この規則のアクセス マスクを取得します。Gets the access mask for this rule.

(継承元 AuthorizationRule)
IdentityReference

この規則を適用する IdentityReference を取得します。Gets the IdentityReference to which this rule applies.

(継承元 AuthorizationRule)
InheritanceFlags

この規則を子オブジェクトが継承する方法を決定するフラグの値を取得します。Gets the value of flags that determine how this rule is inherited by child objects.

(継承元 AuthorizationRule)
IsInherited

この規則を明示的に設定するか、または親コンテナー オブジェクトから継承するかを指定する値を取得します。Gets a value indicating whether this rule is explicitly set or is inherited from a parent container object.

(継承元 AuthorizationRule)
PropagationFlags

反映フラグの値を取得します。このフラグから、この規則を子オブジェクトに反映させる方法を判断します。Gets the value of the propagation flags, which determine how inheritance of this rule is propagated to child objects. このプロパティは、InheritanceFlags 列挙体の値が None でない場合にのみ重要です。This property is significant only when the value of the InheritanceFlags enumeration is not None.

(継承元 AuthorizationRule)
RegistryRights

アクセス規則で許可されたアクセス権または拒否されたアクセス権を取得します。Gets the rights allowed or denied by the access rule.

メソッド

Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(継承元 Object)

適用対象