Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

RegistryAccessRule-Konstruktor: (String, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType)

 

Veröffentlicht: Oktober 2016

Initialisiert eine neue Instanz der RegistryAccessRule -Klasse gibt den Namen des Benutzers oder der Gruppe, die die Regel für die Zugriffsrechte, die Vererbungsflags und gilt die Weitergabe flags und gibt an, ob die angegebenen Zugriffsrechte gewährt oder verweigert werden.

Namespace:   System.Security.AccessControl
Assembly:  mscorlib (in mscorlib.dll)

public RegistryAccessRule(
	string identity,
	RegistryRights registryRights,
	InheritanceFlags inheritanceFlags,
	PropagationFlags propagationFlags,
	AccessControlType type
)

Parameter

identity
Type: System.String

Der Name des Benutzers oder der Gruppe gilt die Regel.

registryRights
Type: System.Security.AccessControl.RegistryRights

Eine bitweise Kombination von RegistryRights Werte, der angibt, die Rechte gewährt oder verweigert.

inheritanceFlags
Type: System.Security.AccessControl.InheritanceFlags

Eine bitweise Kombination von InheritanceFlags Flags, die angibt, wie die Zugriffsrechte von anderen Objekten geerbt werden.

propagationFlags
Type: System.Security.AccessControl.PropagationFlags

Eine bitweise Kombination von PropagationFlags Flags, die angibt, wie Zugriffsrechte an andere Objekte weitergegeben werden.

type
Type: System.Security.AccessControl.AccessControlType

Eines der AccessControlType Werte, die angeben, ob die Rechte gewährt oder verweigert werden.

Exception Condition
ArgumentOutOfRangeException

registryRights Gibt einen ungültigen Wert.

- oder -

type Gibt einen ungültigen Wert.

- oder -

inheritanceFlags Gibt einen ungültigen Wert.

- oder -

propagationFlags Gibt einen ungültigen Wert.

ArgumentNullException

eventRights ist NULL.

ArgumentException

identity ist null.

- oder -

identity ist eine Zeichenfolge der Länge 0 (null).

- oder -

identity ist länger als 512 Zeichen lang sein.

Alle Registrierungsschlüssel sind Container das einzige Vererbungsflag, das für Registrierungsschlüssel sinnvoll ist, wird die InheritanceFlags.ContainerInherit Flag. Wenn dieses Flag nicht angegeben ist, wird die Weitergabeflags werden ignoriert, und nur der unmittelbare Schlüssel wird beeinflusst. Wenn das Flag vorhanden ist, wird die Regel weitergegeben, wie in der folgenden Tabelle dargestellt. Die Tabelle wird davon ausgegangen, dass ein Unterschlüssel S mit einem untergeordneten Unterschlüssel CS und untergeordneten Unterschlüssel GS vorhanden ist. Der Pfad für den untergeordneten Unterschlüssel ist, lautet S\CS\GS.

Weitergabeflags

S

CS

GS

None

X

X

X

NoPropagateInherit

X

X

 

InheritOnly

 

X

X

NoPropagateInherit, InheritOnly

 

X

 

Das Muster für den untergeordneten Unterschlüssel steuert alle Unterschlüssel, die in den untergeordneten Unterschlüssel enthalten.

Z. B. wenn die ContainerInherit Flag angegeben ist, für die inheritanceFlags und die InheritOnly verteilungskennzeichen für angegeben ist propagationFlags, diese Regel gilt nicht für den unmittelbaren Unterschlüssel, jedoch gelten für alle unmittelbar untergeordneten Unterschlüssel und für alle Unterschlüssel, die sie enthalten.

System_CAPS_noteHinweis

Sie können zwar Festlegen der InheritanceFlags.ObjectInherit ein flag inheritanceFlags, ist es nicht sinnvoll, auf diese Weise. Für die Zwecke der Zugriffskontrolle sind Name/Wert-Paare in einem Unterschlüssel keine separate Objekte. Die Zugriffsrechte für die Name/Wert-Paare werden von den rechten des Unterschlüssels gesteuert. Darüber hinaus, da alle Unterschlüssel Container sind (d. h., sie können andere Unterschlüssel enthalten), sie werden nicht beeinflusst, indem die ObjectInherit Flag. Abschließend angeben der ObjectInherit Flag erschwert unnötig die Verwaltung der Regeln, da es die Kombination von andernfalls kompatible Regeln behindert.

Dieser Konstruktor entspricht dem Erstellen einer NTAccount -Objekts und durch übergeben identity an die NTAccount.NTAccount(String) Konstruktor und übergeben das neu erstellte NTAccount -Objekt die RegistryAccessRule(IdentityReference, RegistryRights, InheritanceFlags, PropagationFlags, AccessControlType) Konstruktor.

Das folgende Codebeispiel veranschaulicht die Zugriffsregeln mit Vererbung und Weitergabe. Das Beispiel erstellt eine RegistrySecurity -Objekt, und klicken Sie dann erstellt und zwei Regeln hinzugefügt, die über die ContainerInherit Flag. Die erste Regel hat keine Weitergabeflags, die zweite NoPropagateInherit und InheritOnly.

Das Programm zeigt die Regeln in der RegistrySecurity -Objekt und verwendet dann die RegistrySecurity Objekt einen Unterschlüssel. Das Programm erstellt einen untergeordneten Unterschlüssel sowie einen untergeordneten Unterschlüssel, und zeigt dann die Regeln für jeden Unterschlüssel. 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
Verfügbar seit 2.0
Zurück zum Anfang
Anzeigen: