RegistrySecurity.AddAccessRule(RegistryAccessRule) Méthode

Définition

Recherche une règle de contrôle d'accès correspondante avec laquelle la nouvelle règle peut être fusionnée. Ajoute la nouvelle règle en cas de recherche infructueuse.

public:
 void AddAccessRule(System::Security::AccessControl::RegistryAccessRule ^ rule);
public void AddAccessRule (System.Security.AccessControl.RegistryAccessRule rule);
override this.AddAccessRule : System.Security.AccessControl.RegistryAccessRule -> unit
Public Sub AddAccessRule (rule As RegistryAccessRule)

Paramètres

rule
RegistryAccessRule

Règle de contrôle d'accès à ajouter.

Exceptions

rule a la valeur null.

Exemples

L’exemple de code suivant crée des règles d’accès au Registre et les ajoute à un RegistrySecurity objet, montrant comment les règles qui autorisent et refuser les droits restent distinctes, tandis que les règles compatibles du même type sont fusionnées.

Notes

Cet exemple n’attache pas l’objet de sécurité à un RegistryKey objet. Des exemples qui attachent des objets de sécurité sont disponibles dans RegistryKey.GetAccessControl et RegistryKey.SetAccessControl.

Un exemple de code qui illustre les indicateurs d’héritage et de propagation se trouve dans la RegistryAccessRule classe.

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

Remarques

La AddAccessRule méthode recherche des règles avec le même utilisateur ou groupe et la même AccessControlType que rule. Si aucun n’est trouvé, rule il est ajouté. Si une règle de correspondance est trouvée, les droits sont rule fusionnés avec la règle existante.

Les règles ne peuvent pas être fusionnées s’ils ont des indicateurs d’héritage différents. Par exemple, si un utilisateur est autorisé à accéder en lecture sans indicateur d’héritage et AddAccessRule qu’il est utilisé pour ajouter une règle donnant à l’utilisateur un accès en écriture avec l’héritage pour les sous-clés (InheritanceFlags.ContainerInherit), les deux règles ne peuvent pas être fusionnées.

Les règles avec différentes AccessControlType valeurs ne sont jamais fusionnées.

Les règles expriment les droits de manière la plus économique. Par exemple, si un utilisateur a des Notify droits et ReadPermissions des QueryValuesdroits et que vous ajoutez une règle autorisant EnumerateSubKeys des droits, l’utilisateur dispose de toutes les parties constituantes des ReadKey droits. Si vous interrogez les droits de l’utilisateur, vous verrez une règle contenant des ReadKey droits. De même, si vous supprimez EnumerateSubKeys des droits, les autres constituants des ReadKey droits réapparaîtront.

S’applique à