Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

RegistryAccessRule-Klasse

Stellt eine Gruppe von Zugriffsrechten dar, die einem Benutzer oder einer Gruppe gewährt oder verweigert werden. Diese Klasse kann nicht vererbt werden.

System.Object
  System.Security.AccessControl.AuthorizationRule
    System.Security.AccessControl.AccessRule
      System.Security.AccessControl.RegistryAccessRule

Namespace:  System.Security.AccessControl
Assembly:  mscorlib (in mscorlib.dll)
public sealed class RegistryAccessRule : AccessRule

Der RegistryAccessRule-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode RegistryAccessRule(IdentityReference, RegistryRights, AccessControlType) Initialisiert eine neue Instanz der RegistryAccessRule-Klasse und gibt den Benutzer oder die Gruppe an, für den bzw. die die Regel gilt. Außerdem werden die Zugriffsrechte angegeben und ob diese gewährt oder verweigert werden.
Öffentliche Methode RegistryAccessRule(String, RegistryRights, AccessControlType) Initialisiert eine neue Instanz der RegistryAccessRule-Klasse und gibt den Namen des Benutzers oder der Gruppe an, für den bzw. die die Regel gilt. Außerdem werden die Zugriffsrechte angegeben und ob diese gewährt oder verweigert werden.
Öffentliche Methode RegistryAccessRule(IdentityReference, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType) Initialisiert eine neue Instanz der RegistryAccessRule-Klasse und gibt den Benutzer oder die Gruppe an, für den bzw. die die Regel gilt, sowie die Zugriffsrechte, die Vererbungsflags und die Weitergabeflags. Außerdem wird angegeben, ob die angegebenen Zugriffsrechte gewährt oder verweigert werden.
Öffentliche Methode RegistryAccessRule(String, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType) Initialisiert eine neue Instanz der RegistryAccessRule-Klasse und gibt den Namen des Benutzers oder der Gruppe an, für den bzw. die die Regel gilt, sowie die Zugriffsrechte, die Vererbungsflags und die Weitergabeflags. Außerdem wird angegeben, ob die angegebenen Zugriffsrechte gewährt oder verweigert werden.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Eigenschaft AccessControlType Ruft den AccessControlType-Wert ab, der diesem AccessRule-Objekt zugeordnet ist. (Von AccessRule geerbt.)
Geschützte Eigenschaft AccessMask Ruft die Zugriffsmaske für diese Regel ab. (Von AuthorizationRule geerbt.)
Öffentliche Eigenschaft IdentityReference Ruft die IdentityReference ab, für die diese Regel gilt. (Von AuthorizationRule geerbt.)
Öffentliche Eigenschaft InheritanceFlags Ruft den Wert von Flags ab, mit denen bestimmt wird, wie diese Regel von untergeordneten Objekten geerbt wird. (Von AuthorizationRule geerbt.)
Öffentliche Eigenschaft IsInherited Ruft einen Wert ab, der angibt, ob diese Regel explizit festgelegt oder von einem übergeordneten Containerobjekt geerbt wird. (Von AuthorizationRule geerbt.)
Öffentliche Eigenschaft PropagationFlags Ruft den Wert der Weitergabeflags ab, die bestimmen, wie die Vererbung dieser Regel an untergeordnete Objekte weitergegeben wird. Diese Eigenschaft ist nur dann relevant, wenn der Wert der InheritanceFlags-Enumeration nicht None ist. (Von AuthorizationRule geerbt.)
Öffentliche Eigenschaft RegistryRights Ruft die von der Zugriffsregel gewährten oder verweigerten Rechte ab.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Methode Equals(Object) Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der automatische Speicherbereinigung freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

Die RegistryAccessRule-Klasse gehört zu einer von .NET Framework bereitgestellten Gruppe von Klassen zur Verwaltung der Windows-Zugriffssteuerungssicherheit für Registrierungsschlüssel. Eine Übersicht über diese Klassen und ihre Beziehung zu den zugrunde liegenden Windows-Zugriffssteuerungsstrukturen finden Sie unter RegistrySecurity.

Hinweis Hinweis

Die Windows-Zugriffssteuerungssicherheit kann nur auf Registrierungsschlüssel angewendet werden. Sie kann nicht für einzelne in einem Schlüssel gespeicherte Schlüssel-Wert-Paare übernommen werden.

Wenn Sie eine Liste der derzeit auf einen Registrierungsschlüssel angewendeten Regeln erhalten möchten, rufen Sie mit der RegistryKey.GetAccessControl-Methode ein RegistrySecurity-Objekt ab, und rufen Sie anschließend mit der zugehörigen GetAccessRules-Methode eine Auflistung von RegistryAccessRule-Objekten ab.

RegistryAccessRule-Objekte können Einträgen für die Zugriffssteuerung in der zugrunde liegenden freigegebenen DACL (Discretionary Access List, freigegebene Zugriffssteuerungsliste) nicht eins zu eins zugeordnet werden. Die Gruppe der für einen Registrierungsschlüssel abgerufenen Zugriffsregeln enthält nur die minimale Anzahl von Regeln, die zur Beschreibung der Zugriffssteuerungseinträge erforderlich ist.

Hinweis Hinweis

Die zugrunde liegenden Zugriffssteuerungseinträge ändern sich, wenn Sie Regeln anwenden oder entfernen. Die Informationen in Regeln werden, wenn möglich, zusammengeführt, um die Anzahl der Zugriffssteuerungseinträge möglichst gering zu halten. Beim Lesen der aktuellen Regelliste kann es daher möglicherweise zu Abweichungen gegenüber der Liste aller von Ihnen hinzugefügten Regeln kommen.

Verwenden Sie RegistryAccessRule-Objekte, um Zugriffsrechte anzugeben, die einem Benutzer oder einer Gruppe gewährt oder verweigert werden sollen. Ein RegistryAccessRule-Objekt stellt immer entweder einen gewährten oder einen verweigerte Zugriff dar, nie beide.

Sie können eine Regel auf einen Registrierungsschlüssel anwenden, indem Sie die RegistryKey.GetAccessControl-Methode verwenden, um das RegistrySecurity-Objekt abzurufen. Ändern Sie das RegistrySecurity-Objekt, indem Sie seine Methoden verwenden, um die Regel hinzuzufügen, und verwenden Sie anschließend die RegistryKey.SetAccessControl-Methode, um das Sicherheitsobjekt erneut anzufügen.

Wichtiger Hinweis Wichtig

Änderungen an einem RegistrySecurity-Objekt wirken sich erst dann auf die Zugriffsebenen des Registrierungsschlüssels aus, wenn die RegistryKey.SetAccessControl-Methode aufgerufen wird, um dem Registrierungsschlüssel das geänderte Sicherheitsobjekt zuzuweisen.

RegistryAccessRule-Objekte sind unveränderlich. Die Sicherheitseinstellungen für einen Registrierungsschlüssel werden geändert, indem mit den Methoden der RegistrySecurity-Klasse Regeln hinzugefügt oder entfernt werden. Dabei werden die zugrunde liegenden Zugriffssteuerungseinträge geändert.

Im folgenden Codebeispiel werden Zugriffsregeln mit Vererbung und Weitergabe veranschaulicht. Im Beispiel wird ein RegistrySecurity-Objekt erstellt, und anschließend werden zwei Regeln erstellt und hinzugefügt, die über das ContainerInherit-Flag verfügen. Die erste Regel verfügt über keine Weitergabeflags, während die zweite Regel über NoPropagateInherit und InheritOnly verfügt.

Das Programm zeigt die Regeln im RegistrySecurity-Objekt an und erstellt dann mithilfe des Objekts einen Unterschlüssel. Das Programm erstellt einen untergeordneten Unterschlüssel sowie einen untergeordneten Unterschlüssel zweiter Ordnung und zeigt dann die Sicherheit für jeden Unterschlüssel an. Schließlich löscht das Programm die Testschlüssel.



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
 */


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?