Udostępnij za pośrednictwem


RegistryAccessRule Konstruktory

Definicja

Inicjuje nowe wystąpienie klasy RegistryAccessRule.

Przeciążenia

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 oraz czy określone prawa dostępu są dozwolone, czy odrzucane.

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 oraz czy określone prawa dostępu są dozwolone, czy odrzucane.

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 odrzucane.

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 oraz czy określone prawa dostępu są dozwolone, czy niedozwolone.

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 oraz czy określone prawa dostępu są dozwolone, czy odrzucane.

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 lub typu SecurityIdentifier , 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

Jedna z AccessControlType 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ść.

identity to 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 propagację domyślną 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 oraz czy określone prawa dostępu są dozwolone, czy odrzucane.

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

Jedna z AccessControlType 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.

identity to 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 propagację domyślną i dziedziczenie. Oznacza to, InheritanceFlags.None i PropagationFlags.None.

Ten konstruktor jest odpowiednikiem tworzenia NTAccount obiektu, przekazując identity go do konstruktora NTAccount.NTAccount(String) 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 odrzucane.

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 lub typu SecurityIdentifier , takiego jak NTAccount , który można przekonwertować na typ SecurityIdentifier.

registryRights
RegistryRights

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

inheritanceFlags
InheritanceFlags

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

propagationFlags
PropagationFlags

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

type
AccessControlType

Jedna 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ść.

identity to null.

-lub-

registryRights jest zero.

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

Uwagi

Wszystkie klucze rejestru są kontenerami, więc jedyną flagą dziedziczenia, która ma znaczenie dla kluczy rejestru, jest flaga InheritanceFlags.ContainerInherit . Jeśli ta flaga nie zostanie 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 grandchild GS. Oznacza to, że ścieżka dla podklucza wnuka to S\CS\GS.

Flagi propagacji S CS 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 ContainerInherit określono flagę i InheritOnly flaga propagacji jest określona inheritanceFlags dla propagationFlags, ta reguła nie ma zastosowania do natychmiastowego podklucza, ale ma zastosowanie do wszystkich jego natychmiastowych podkluczów podrzędnych i do wszystkich podkluczów, które zawierają.

Uwaga

Chociaż można określić flagę InheritanceFlags.ObjectInherit dla inheritanceFlagselementu , nie ma sensu tego robić. Na potrzeby kontroli dostępu pary nazw/wartości w podkluczu nie są oddzielnymi obiektami. Prawa dostępu do par name/value 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 połączenie innych reguł zgodnych.

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, czy 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 RegistryRights wartości wskazująca prawa dozwolone lub niedozwolone.

inheritanceFlags
InheritanceFlags

Bitowa kombinacja InheritanceFlags flag określających sposób dziedziczenia praw dostępu 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

Jedna z wartości określających AccessControlType , czy prawa są dozwolone, czy blokowane.

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.

identity to 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 przedstawia 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ść 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, która ma znaczenie dla kluczy rejestru, jest flaga InheritanceFlags.ContainerInherit . Jeśli ta flaga nie zostanie określona, flagi propagacji są ignorowane i dotyczy to tylko bezpośredniego klucza. 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 CS GS
None X X X
NoPropagateInherit X X
InheritOnly X X
NoPropagateInherit, InheritOnly X

Wzorzec podklucza wnuka rządzi wszystkimi podkluczami zawartymi w podkluczu wnuka.

Na przykład, jeśli flaga ContainerInherit jest określona dla inheritanceFlags i InheritOnly flaga propagacji jest określona dla propagationFlags, ta reguła nie ma zastosowania do natychmiastowego podklucza, ale ma zastosowanie do wszystkich jego natychmiastowych podrzędnych podklucze i do wszystkich podklucze, które zawierają.

Uwaga

Chociaż można określić flagę InheritanceFlags.ObjectInherit dla inheritanceFlags, nie ma sensu tego robić. Na potrzeby kontroli dostępu pary nazwa/wartość 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ę reguł zgodnych z innymi zasadami.

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