Freigeben über


RegistrySecurity.AddAccessRule(RegistryAccessRule) Methode

Definition

Sucht nach einer übereinstimmenden Zugriffssteuerung, mit der die neue Regel zusammengeführt werden kann. Wenn keine Regel gefunden wurde, wird die neue Regel hinzugefügt.

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)

Parameter

rule
RegistryAccessRule

Die hinzuzufügende Zugriffssteuerungsregel.

Ausnahmen

rule ist null.

Beispiele

Im folgenden Codebeispiel werden Registrierungszugriffsregeln erstellt und einem RegistrySecurity -Objekt hinzugefügt, um zu zeigen, wie Regeln, die Rechte zulassen und verweigern, getrennt bleiben, während kompatible Regeln derselben Art zusammengeführt werden.

Hinweis

In diesem Beispiel wird das Sicherheitsobjekt nicht an ein RegistryKey Objekt angefügt. Beispiele zum Anfügen von Sicherheitsobjekten finden Sie in RegistryKey.GetAccessControl und RegistryKey.SetAccessControl.

Ein Codebeispiel, das Vererbungs- und Weitergabeflags veranschaulicht, finden Sie in der RegistryAccessRule -Klasse.

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

Hinweise

Die AddAccessRule -Methode sucht nach Regeln mit demselben Benutzer oder derselben Gruppe und der gleichen AccessControlType wie rule. Wenn keine gefunden wird, rule wird hinzugefügt. Wenn eine übereinstimmende Regel gefunden wird, werden die Rechte in rule mit der vorhandenen Regel zusammengeführt.

Regeln können nicht zusammengeführt werden, wenn sie unterschiedliche Vererbungsflags aufweisen. Wenn einem Benutzer beispielsweise Lesezugriff ohne Vererbungsflags erlaubt ist und AddAccessRule zum Hinzufügen einer Regel verwendet wird, die dem Benutzer Schreibzugriff mit Vererbung für Unterschlüssel (InheritanceFlags.ContainerInherit) gewährt, können die beiden Regeln nicht zusammengeführt werden.

Regeln mit unterschiedlichen AccessControlType Werten werden nie zusammengeführt.

Regeln drücken Rechte auf wirtschaftlichste Weise aus. Wenn ein Benutzer QueryValuesbeispielsweise über Rechte Notify und verfügt ReadPermissions und Sie eine Regel hinzufügen, die Rechte zulässt EnumerateSubKeys , verfügt der Benutzer über alle Bestandteile der ReadKey Rechte. Wenn Sie die Rechte des Benutzers abfragen, wird eine Regel mit ReadKey Rechten angezeigt. Wenn Sie Rechte entfernen EnumerateSubKeys , werden auch die anderen Rechtebestandteile ReadKey wieder angezeigt.

Gilt für: