Condividi tramite


RegistryAccessRule Costruttori

Definizione

Inizializza una nuova istanza della classe RegistryAccessRule.

Overload

RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType)

Inizializza una nuova istanza della classe RegistryAccessRule specificando l'utente o il gruppo a cui la regola viene applicata, i diritti di accesso e se i diritti di accesso specificati sono concessi o negati.

RegistryAccessRule(String, RegistryRights, AccessControlType)

Inizializza una nuova istanza della classe RegistryAccessRule specificando il nome dell'utente o del gruppo a cui la regola viene applicata, i diritti di accesso e se i diritti di accesso specificati sono concessi o negati.

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

Inizializza una nuova istanza della classe RegistryAccessRule specificando l'utente o il gruppo a cui la regola viene applicata, i diritti di accesso, i flag di ereditarietà, i flag di propagazione e se i diritti di accesso specificati sono concessi o negati.

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

Inizializza una nuova istanza della classe RegistryAccessRule specificando il nome dell'utente o del gruppo a cui la regola viene applicata, i diritti di accesso, i flag di ereditarietà, i flag di propagazione e se i diritti di accesso specificati sono concessi o negati.

RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType)

Origine:
RegistrySecurity.cs

Inizializza una nuova istanza della classe RegistryAccessRule specificando l'utente o il gruppo a cui la regola viene applicata, i diritti di accesso e se i diritti di accesso specificati sono concessi o negati.

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)

Parametri

identity
IdentityReference

Utente o gruppo a cui viene applicata la regola. Deve essere di tipo SecurityIdentifier o di un tipo quale NTAccount che può essere convertito nel tipo SecurityIdentifier.

registryRights
RegistryRights

Combinazione bit per bit di valori RegistryRights che indicano i diritti concessi o negati.

type
AccessControlType

Uno dei valori AccessControlType che indica se i diritti sono concessi o negati.

Eccezioni

registryRights specifica un valore non valido.

-oppure-

type specifica un valore non valido.

identity è null.

-oppure-

eventRights è zero.

identity non è di tipo SecurityIdentifier né di un tipo quale NTAccount che può essere convertito nel tipo SecurityIdentifier.

Commenti

Questo costruttore specifica la propagazione e l'ereditarietà predefinita. Ovvero, InheritanceFlags.None e PropagationFlags.None.

Si applica a

RegistryAccessRule(String, RegistryRights, AccessControlType)

Origine:
RegistrySecurity.cs

Inizializza una nuova istanza della classe RegistryAccessRule specificando il nome dell'utente o del gruppo a cui la regola viene applicata, i diritti di accesso e se i diritti di accesso specificati sono concessi o negati.

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)

Parametri

identity
String

Nome dell'utente o del gruppo a cui la regola viene applicata.

registryRights
RegistryRights

Combinazione bit per bit di valori RegistryRights che indicano i diritti concessi o negati.

type
AccessControlType

Uno dei valori AccessControlType che indica se i diritti sono concessi o negati.

Eccezioni

registryRights specifica un valore non valido.

-oppure-

type specifica un valore non valido.

registryRights è zero.

identity è null.

-oppure-

identity è una stringa di lunghezza zero.

-oppure-

La lunghezza di identity supera i 512 caratteri.

Esempio

Nell'esempio di codice seguente vengono create regole di accesso al Registro di sistema e le aggiunge a un RegistrySecurity oggetto, che illustra come le regole che consentono e negano i diritti rimangono separate, mentre le regole compatibili dello stesso tipo vengono unite.

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

Commenti

Questo costruttore specifica la propagazione e l'ereditarietà predefinita. Ovvero, InheritanceFlags.None e PropagationFlags.None.

Questo costruttore equivale alla creazione di un NTAccount oggetto, passando identity al NTAccount.NTAccount(String) costruttore e passando l'oggetto appena creato NTAccount al RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType) costruttore.

Si applica a

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

Origine:
RegistrySecurity.cs

Inizializza una nuova istanza della classe RegistryAccessRule specificando l'utente o il gruppo a cui la regola viene applicata, i diritti di accesso, i flag di ereditarietà, i flag di propagazione e se i diritti di accesso specificati sono concessi o negati.

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)

Parametri

identity
IdentityReference

Utente o gruppo a cui viene applicata la regola. Deve essere di tipo SecurityIdentifier o di un tipo quale NTAccount che può essere convertito nel tipo SecurityIdentifier.

registryRights
RegistryRights

Combinazione bit per bit di valori RegistryRights che specificano i diritti concessi o negati.

inheritanceFlags
InheritanceFlags

Combinazione bit per bit di flag InheritanceFlags che specificano come i diritti di accesso sono ereditati da altri oggetti.

propagationFlags
PropagationFlags

Combinazione bit per bit di flag PropagationFlags che specificano come i diritti di accesso sono propagati ad altri oggetti.

type
AccessControlType

Uno dei valori di AccessControlType che specificano se i diritti sono concessi o negati.

Eccezioni

registryRights specifica un valore non valido.

-oppure-

type specifica un valore non valido.

-oppure-

inheritanceFlags specifica un valore non valido.

-oppure-

propagationFlags specifica un valore non valido.

identity è null.

-oppure-

registryRights è zero.

identity non è di tipo SecurityIdentifier né di un tipo quale NTAccount convertibile nel tipo SecurityIdentifier.

Commenti

Tutte le chiavi del Registro di sistema sono contenitori, quindi l'unico flag di ereditarietà significativo per le chiavi del Registro di sistema è il InheritanceFlags.ContainerInherit flag. Se questo flag non è specificato, i flag di propagazione vengono ignorati e solo la chiave immediata è interessata. Se il flag è presente, la regola viene propagata come illustrato nella tabella seguente. La tabella presuppone che esista una sottochiave S con sottochiave figlio CS e sottochiave grandchild GS. Il percorso della sottochiave nipote è S\CS\GS.

Flag di propagazione S CS GS
None X X X
NoPropagateInherit X X
InheritOnly X X
NoPropagateInherit, InheritOnly X

Il modello per la sottochiave grandchild gestisce tutte le sottochiave contenute dalla sottochiave grandchild.

Ad esempio, se il flag viene specificato per inheritanceFlags e il InheritOnlyContainerInherit flag di propagazione viene specificato per propagationFlags, questa regola non si applica alla sottochiave immediata, ma si applica a tutte le sottochiavi figlio immediate e a tutte le sottochiavi che contengono.

Nota

Anche se è possibile specificare il flag per inheritanceFlags, non c'è InheritanceFlags.ObjectInherit alcun punto in questo modo. Ai fini del controllo di accesso, le coppie nome/valore in una sottochiave non sono oggetti separati. I diritti di accesso alle coppie nome/valore sono controllati dai diritti della sottochiave. Inoltre, poiché tutte le sottochiavi sono contenitori , ovvero possono contenere altre sottochiave, non sono interessate dal ObjectInherit flag. Infine, specificando il ObjectInherit flag senza bisogno complica la manutenzione delle regole, perché interferisce con la combinazione di regole altrimenti compatibili.

Si applica a

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

Origine:
RegistrySecurity.cs

Inizializza una nuova istanza della classe RegistryAccessRule specificando il nome dell'utente o del gruppo a cui la regola viene applicata, i diritti di accesso, i flag di ereditarietà, i flag di propagazione e se i diritti di accesso specificati sono concessi o negati.

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)

Parametri

identity
String

Nome dell'utente o del gruppo a cui la regola viene applicata.

registryRights
RegistryRights

Combinazione bit per bit di valori RegistryRights che indicano i diritti concessi o negati.

inheritanceFlags
InheritanceFlags

Combinazione bit per bit di flag InheritanceFlags che specificano come i diritti di accesso sono ereditati da altri oggetti.

propagationFlags
PropagationFlags

Combinazione bit per bit di flag PropagationFlags che specificano come i diritti di accesso sono propagati ad altri oggetti.

type
AccessControlType

Uno dei valori di AccessControlType che specificano se i diritti sono concessi o negati.

Eccezioni

registryRights specifica un valore non valido.

-oppure-

type specifica un valore non valido.

-oppure-

inheritanceFlags specifica un valore non valido.

-oppure-

propagationFlags specifica un valore non valido.

eventRights è zero.

identity è null.

-oppure-

identity è una stringa di lunghezza zero.

-oppure-

La lunghezza di identity supera i 512 caratteri.

Esempio

Nell'esempio di codice seguente vengono illustrate le regole di accesso con ereditarietà e propagazione. L'esempio crea un RegistrySecurity oggetto e quindi crea e aggiunge due regole con il ContainerInherit flag. La prima regola non ha flag di propagazione, mentre la seconda ha NoPropagateInherit e InheritOnly.

Il programma visualizza le regole nell'oggetto e quindi usa l'oggetto RegistrySecurityRegistrySecurity per creare una sottochiave. Il programma crea una sottochiave figlio e una sottochiave grandchild e quindi visualizza le regole per ogni sottochiave. Infine, il programma elimina le chiavi di test.


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

Commenti

Tutte le chiavi del Registro di sistema sono contenitori, quindi l'unico flag di ereditarietà significativo per le chiavi del Registro di sistema è il InheritanceFlags.ContainerInherit flag . Se questo flag non viene specificato, i flag di propagazione vengono ignorati e viene interessata solo la chiave immediata. Se il flag è presente, la regola viene propagata come illustrato nella tabella seguente. La tabella presuppone che sia presente una sottochiave S con sottochiave figlio CS e sottochiave nipote GS. Il percorso della sottochiave nipote è S\CS\GS.

Flag di propagazione S CS GS
None X X X
NoPropagateInherit X X
InheritOnly X X
NoPropagateInherit, InheritOnly X

Il modello per la sottochiave grandchild gestisce tutte le sottochiavi contenute nella sottochiave nipote.

Ad esempio, se il ContainerInherit flag viene specificato per inheritanceFlags e viene specificato il InheritOnly flag di propagazione per propagationFlags, questa regola non si applica alla sottochiave immediata, ma si applica a tutte le relative sottochiavi figlio immediate e a tutte le sottochiavi che contengono.

Nota

Anche se è possibile specificare il InheritanceFlags.ObjectInherit flag per inheritanceFlags, non è possibile farlo. Ai fini del controllo di accesso, le coppie nome/valore in una sottochiave non sono oggetti separati. I diritti di accesso alle coppie nome/valore sono controllati dai diritti della sottochiave. Inoltre, poiché tutte le sottochiavi sono contenitori , ovvero possono contenere altre sottochiavi, non sono interessate dal ObjectInherit flag. Infine, specificare il ObjectInherit flag complica inutilmente la manutenzione delle regole, perché interferisce con la combinazione di regole altrimenti compatibili.

Questo costruttore equivale alla creazione di un NTAccount oggetto, passando identity al NTAccount.NTAccount(String) costruttore e passando l'oggetto appena creato NTAccount al RegistryAccessRule(IdentityReference, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType) costruttore.

Si applica a