Język

RegistryAccessRule Konstruktory

Definicja

Inicjuje nowe wystąpienie klasy RegistryAccessRule.

Przeciążenia

Nazwa Opis
RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType)

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając użytkownika lub grupę, do których ma zastosowanie reguła, prawa dostępu i czy określone prawa dostępu są dozwolone, czy blokowane.

RegistryAccessRule(String, RegistryRights, AccessControlType)

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając nazwę użytkownika lub grupy, do których ma zastosowanie reguła, prawa dostępu i czy określone prawa dostępu są dozwolone, czy blokowane.

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

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając użytkownika lub grupę, do których ma zastosowanie reguła, prawa dostępu, flagi dziedziczenia, flagi propagacji i czy określone prawa dostępu są dozwolone, czy blokowane.

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

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając nazwę użytkownika lub grupy, do których ma zastosowanie reguła, prawa dostępu, flagi dziedziczenia, flagi propagacji i czy określone prawa dostępu są dozwolone lub blokowane.

RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType)

Źródło:
RegistrySecurity.cs

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając użytkownika lub grupę, do których ma zastosowanie reguła, prawa dostępu i czy określone prawa dostępu są dozwolone, czy blokowane.

public:
 RegistryAccessRule(System::Security::Principal::IdentityReference ^ identity, System::Security::AccessControl::RegistryRights registryRights, System::Security::AccessControl::AccessControlType type);
public RegistryAccessRule(System.Security.Principal.IdentityReference identity, System.Security.AccessControl.RegistryRights registryRights, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.RegistryAccessRule : System.Security.Principal.IdentityReference * System.Security.AccessControl.RegistryRights * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.RegistryAccessRule
Public Sub New (identity As IdentityReference, registryRights As RegistryRights, type As AccessControlType)

Parametry

identity
IdentityReference

Użytkownik lub grupa, do których ma zastosowanie reguła. Musi być typu SecurityIdentifier lub typu, takiego jak NTAccount , który można przekonwertować na typ SecurityIdentifier.

registryRights
RegistryRights

Bitowa kombinacja wartości wskazująca RegistryRights dozwolone lub niedozwolone prawa.

type
AccessControlType

AccessControlType Jedna z wartości wskazujących, czy prawa są dozwolone, czy niedozwolone.

Wyjątki

registryRights określa nieprawidłową wartość.

— lub —

type określa nieprawidłową wartość.

Parametr identity ma wartość null.

— lub —

eventRights jest zero.

identity nie jest typem ani typem SecurityIdentifier , takim jak NTAccount ten, który można przekonwertować na typ SecurityIdentifier.

Uwagi

Ten konstruktor określa domyślną propagację i dziedziczenie. Oznacza to, InheritanceFlags.None i PropagationFlags.None.

Dotyczy

RegistryAccessRule(String, RegistryRights, AccessControlType)

Źródło:
RegistrySecurity.cs

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając nazwę użytkownika lub grupy, do których ma zastosowanie reguła, prawa dostępu i czy określone prawa dostępu są dozwolone, czy blokowane.

public:
 RegistryAccessRule(System::String ^ identity, System::Security::AccessControl::RegistryRights registryRights, System::Security::AccessControl::AccessControlType type);
public RegistryAccessRule(string identity, System.Security.AccessControl.RegistryRights registryRights, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.RegistryAccessRule : string * System.Security.AccessControl.RegistryRights * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.RegistryAccessRule
Public Sub New (identity As String, registryRights As RegistryRights, type As AccessControlType)

Parametry

identity
String

Nazwa użytkownika lub grupy, do których ma zastosowanie reguła.

registryRights
RegistryRights

Bitowa kombinacja wartości wskazująca RegistryRights dozwolone lub niedozwolone prawa.

type
AccessControlType

AccessControlType Jedna z wartości wskazujących, czy prawa są dozwolone, czy niedozwolone.

Wyjątki

registryRights określa nieprawidłową wartość.

— lub —

type określa nieprawidłową wartość.

registryRights jest zero.

Parametr identity ma wartość null.

— lub —

identity jest ciągiem o zerowej długości.

— lub —

identity jest dłuższa niż 512 znaków.

Przykłady

Poniższy przykład kodu tworzy reguły dostępu do rejestru i dodaje je do RegistrySecurity obiektu, pokazując, jak reguły zezwalające i odmawiające praw pozostają oddzielne, podczas gdy zgodne reguły tego samego rodzaju są scalane.

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

public class Example
{
    public static void Main()
    {
        // Create a string representing the current user.
        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 the key.
        RegistryAccessRule rule = new RegistryAccessRule(user, 
            RegistryRights.ReadKey, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Add a rule that denies the current user the 
        // right to change permissions on the Registry.
        rule = new RegistryAccessRule(user, 
            RegistryRights.ChangePermissions, 
            AccessControlType.Deny);
        mSec.AddAccessRule(rule);

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

        // Add a rule that allows the current user the 
        // right to read permissions on the Registry. This 
        // rule is merged with the existing Allow rule.
        rule = new RegistryAccessRule(user, 
            RegistryRights.WriteKey, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        ShowSecurity(mSec);
    }

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

/* This code example produces output similar to following:

Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: ReadKey


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, ReadKey
 */
Imports Microsoft.Win32
Imports System.Security.AccessControl
Imports System.Security.Principal

Public Class Example

    Public Shared Sub Main()

        ' Create a string representing the current user.
        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 the key.
        Dim rule As New RegistryAccessRule(user, _
            RegistryRights.ReadKey, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ' Add a rule that denies the current user the 
        ' right to change permissions on the Registry.
        rule = New RegistryAccessRule(user, _
            RegistryRights.ChangePermissions, _
            AccessControlType.Deny)
        mSec.AddAccessRule(rule)

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

        ' Add a rule that allows the current user the 
        ' right to read permissions on the Registry. This 
        ' rule is merged with the existing Allow rule.
        rule = New RegistryAccessRule(user, _
            RegistryRights.WriteKey, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ShowSecurity(mSec)

    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()
        Next

    End Sub
End Class 

'This code example produces output similar to following:
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Deny
'      Rights: ChangePermissions
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: ReadKey
'
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Deny
'      Rights: ChangePermissions
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, ReadKey

Uwagi

Ten konstruktor określa domyślną propagację i dziedziczenie. Oznacza to, InheritanceFlags.None i PropagationFlags.None.

Ten konstruktor jest odpowiednikiem tworzenia NTAccount obiektu, przekazując identity go do NTAccount.NTAccount(String) konstruktora i przekazując nowo utworzony NTAccount obiekt do konstruktora RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType) .

Dotyczy

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

Źródło:
RegistrySecurity.cs

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając użytkownika lub grupę, do których ma zastosowanie reguła, prawa dostępu, flagi dziedziczenia, flagi propagacji i czy określone prawa dostępu są dozwolone, czy blokowane.

public:
 RegistryAccessRule(System::Security::Principal::IdentityReference ^ identity, System::Security::AccessControl::RegistryRights registryRights, System::Security::AccessControl::InheritanceFlags inheritanceFlags, System::Security::AccessControl::PropagationFlags propagationFlags, System::Security::AccessControl::AccessControlType type);
public RegistryAccessRule(System.Security.Principal.IdentityReference identity, System.Security.AccessControl.RegistryRights registryRights, System.Security.AccessControl.InheritanceFlags inheritanceFlags, System.Security.AccessControl.PropagationFlags propagationFlags, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.RegistryAccessRule : System.Security.Principal.IdentityReference * System.Security.AccessControl.RegistryRights * System.Security.AccessControl.InheritanceFlags * System.Security.AccessControl.PropagationFlags * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.RegistryAccessRule
Public Sub New (identity As IdentityReference, registryRights As RegistryRights, inheritanceFlags As InheritanceFlags, propagationFlags As PropagationFlags, type As AccessControlType)

Parametry

identity
IdentityReference

Użytkownik lub grupa, do których ma zastosowanie reguła. Musi być typu SecurityIdentifier lub typu, takiego jak NTAccount , który można przekonwertować na typ SecurityIdentifier.

registryRights
RegistryRights

Bitowa kombinacja RegistryRights wartości określających dozwolone lub niedozwolone prawa.

inheritanceFlags
InheritanceFlags

Bitowa kombinacja InheritanceFlags flag określających, jak prawa dostępu są dziedziczone z innych obiektów.

propagationFlags
PropagationFlags

Bitowa kombinacja PropagationFlags flag określających sposób propagacji praw dostępu do innych obiektów.

type
AccessControlType

Jedną z wartości określających AccessControlType , czy prawa są dozwolone, czy niedozwolone.

Wyjątki

registryRights określa nieprawidłową wartość.

— lub —

type określa nieprawidłową wartość.

— lub —

inheritanceFlags określa nieprawidłową wartość.

— lub —

propagationFlags określa nieprawidłową wartość.

Parametr identity ma wartość null.

— lub —

registryRights jest zero.

identity nie ma typu SecurityIdentifier, ani typu, takiego jak NTAccount , który można przekonwertować na typ SecurityIdentifier.

Uwagi

Wszystkie klucze rejestru są kontenerami, więc jedyną flagą dziedziczenia zrozumiałą dla kluczy rejestru jest flaga InheritanceFlags.ContainerInherit . Jeśli ta flaga nie jest określona, flagi propagacji są ignorowane i dotyczy to tylko klucza bezpośredniego. Jeśli flaga jest obecna, reguła jest propagowana, jak pokazano w poniższej tabeli. W tabeli założono, że istnieje podklucz S z podrzędnym podkluczem CS i podkluczem wnuka GS. Oznacza to, że ścieżka dla podklucza wnuka to S\CS\GS.

Flagi propagacji S Informatyka GS
None X X X
NoPropagateInherit X X
InheritOnly X X
NoPropagateInherit, InheritOnly X

Wzorzec podklucza wnuka zarządza wszystkimi podkluczami zawartymi w podkluczu wnuka.

Jeśli na przykład określono ContainerInherit flagę inheritanceFlags i InheritOnly flaga propagacji jest określona dla propagationFlagsparametru , ta reguła nie ma zastosowania do bezpośredniego podklucza, ale dotyczy wszystkich jego natychmiastowych podkluczy podrzędnych i wszystkich podkluczy, które zawierają.

Note

Chociaż można określić flagę dla InheritanceFlags.ObjectInheritparametru inheritanceFlags , nie ma w tym żadnego punktu. Na potrzeby kontroli dostępu pary nazw/wartości w podkluczu nie są oddzielnymi obiektami. Prawa dostępu do par nazwa/wartość są kontrolowane przez prawa podklucza. Ponadto, ponieważ wszystkie podklucze są kontenerami (czyli mogą zawierać inne podklucze), nie mają one wpływu na flagę ObjectInherit . Na koniec określenie flagi ObjectInherit niepotrzebnie komplikuje konserwację reguł, ponieważ zakłóca kombinację w inny sposób zgodnych reguł.

Dotyczy

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

Źródło:
RegistrySecurity.cs

Inicjuje nowe wystąpienie RegistryAccessRule klasy, określając nazwę użytkownika lub grupy, do których ma zastosowanie reguła, prawa dostępu, flagi dziedziczenia, flagi propagacji i czy określone prawa dostępu są dozwolone lub blokowane.

public:
 RegistryAccessRule(System::String ^ identity, System::Security::AccessControl::RegistryRights registryRights, System::Security::AccessControl::InheritanceFlags inheritanceFlags, System::Security::AccessControl::PropagationFlags propagationFlags, System::Security::AccessControl::AccessControlType type);
public RegistryAccessRule(string identity, System.Security.AccessControl.RegistryRights registryRights, System.Security.AccessControl.InheritanceFlags inheritanceFlags, System.Security.AccessControl.PropagationFlags propagationFlags, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.RegistryAccessRule : string * System.Security.AccessControl.RegistryRights * System.Security.AccessControl.InheritanceFlags * System.Security.AccessControl.PropagationFlags * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.RegistryAccessRule
Public Sub New (identity As String, registryRights As RegistryRights, inheritanceFlags As InheritanceFlags, propagationFlags As PropagationFlags, type As AccessControlType)

Parametry

identity
String

Nazwa użytkownika lub grupy, do których ma zastosowanie reguła.

registryRights
RegistryRights

Bitowa kombinacja wartości wskazująca RegistryRights dozwolone lub niedozwolone prawa.

inheritanceFlags
InheritanceFlags

Bitowa kombinacja InheritanceFlags flag określających, jak prawa dostępu są dziedziczone z innych obiektów.

propagationFlags
PropagationFlags

Bitowa kombinacja PropagationFlags flag określających sposób propagacji praw dostępu do innych obiektów.

type
AccessControlType

Jedną z wartości określających AccessControlType , czy prawa są dozwolone, czy niedozwolone.

Wyjątki

registryRights określa nieprawidłową wartość.

— lub —

type określa nieprawidłową wartość.

— lub —

inheritanceFlags określa nieprawidłową wartość.

— lub —

propagationFlags określa nieprawidłową wartość.

eventRights jest zero.

Parametr identity ma wartość null.

— lub —

identity jest ciągiem o zerowej długości.

— lub —

identity jest dłuższa niż 512 znaków.

Przykłady

W poniższym przykładzie kodu przedstawiono reguły dostępu z dziedziczeniem i propagacją. Przykład tworzy RegistrySecurity obiekt, a następnie tworzy i dodaje dwie reguły, które mają flagę ContainerInherit . Pierwsza reguła nie ma flag propagacji, a druga ma NoPropagateInherit wartości i InheritOnly.

Program wyświetla reguły w RegistrySecurity obiekcie, a następnie używa RegistrySecurity obiektu do utworzenia podklucza. Program tworzy podrzędny podklucz i podklucz wnuka, a następnie wyświetla reguły dla każdego podklucza. Na koniec program usuwa klucze testowe.


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

Uwagi

Wszystkie klucze rejestru są kontenerami, więc jedyną flagą dziedziczenia zrozumiałą dla kluczy rejestru jest flaga InheritanceFlags.ContainerInherit . Jeśli ta flaga nie jest określona, flagi propagacji są ignorowane i dotyczy to tylko klucza bezpośredniego. Jeśli flaga jest obecna, reguła jest propagowana, jak pokazano w poniższej tabeli. W tabeli założono, że istnieje podklucz S z podrzędnym podkluczem CS i podkluczem wnuka GS. Oznacza to, że ścieżka dla podklucza wnuka to S\CS\GS.

Flagi propagacji S Informatyka GS
None X X X
NoPropagateInherit X X
InheritOnly X X
NoPropagateInherit, InheritOnly X

Wzorzec podklucza wnuka zarządza wszystkimi podkluczami zawartymi w podkluczu wnuka.

Jeśli na przykład określono ContainerInherit flagę inheritanceFlags i InheritOnly flaga propagacji jest określona dla propagationFlagsparametru , ta reguła nie ma zastosowania do bezpośredniego podklucza, ale dotyczy wszystkich jego natychmiastowych podkluczy podrzędnych i wszystkich podkluczy, które zawierają.

Note

Chociaż można określić flagę dla InheritanceFlags.ObjectInheritparametru inheritanceFlags , nie ma w tym żadnego punktu. Na potrzeby kontroli dostępu pary nazw/wartości w podkluczu nie są oddzielnymi obiektami. Prawa dostępu do par nazwa/wartość są kontrolowane przez prawa podklucza. Ponadto, ponieważ wszystkie podklucze są kontenerami (czyli mogą zawierać inne podklucze), nie mają one wpływu na flagę ObjectInherit . Na koniec określenie flagi ObjectInherit niepotrzebnie komplikuje konserwację reguł, ponieważ zakłóca kombinację w inny sposób zgodnych reguł.

Ten konstruktor jest odpowiednikiem tworzenia NTAccount obiektu, przekazując identity go do NTAccount.NTAccount(String) konstruktora i przekazując nowo utworzony NTAccount obiekt do konstruktora RegistryAccessRule(IdentityReference, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType) .

Dotyczy