(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

RegistrySecurity.RemoveAccessRule-Methode

Sucht nach einer Zugriffssteuerungsregel mit demselben Benutzer und demselben AccessControlType (gewähren oder verweigern) wie die angegebene Zugriffsregel sowie mit kompatiblen Vererbungs- und Weitergabeflags. Wenn eine solche Regel gefunden wird, werden die in der angegebenen Zugriffsregel enthaltenen Rechte daraus entfernt.

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

public bool RemoveAccessRule(
	RegistryAccessRule rule
)

Parameter

rule
Typ: System.Security.AccessControl.RegistryAccessRule
Eine RegistryAccessRule, die den Benutzer und den AccessControlType angibt, nach denen gesucht werden soll, sowie eine Reihe von Vererbungs- und Weitergabeflags, mit denen eine übereinstimmende Regel (falls vorhanden) kompatibel sein muss. Gibt die Rechte an, die aus der kompatiblen Regel entfernt werden sollen (falls vorhanden).

Rückgabewert

Typ: System.Boolean
true , wenn eine kompatible Regel gefunden wurde, andernfalls false.

AusnahmeBedingung
ArgumentNullException

rule ist null.

In der aktuellen RegistrySecurity wird nach einer Regel gesucht, die über denselben Benutzer und denselben AccessControlType-Wert wie rule verfügt. Wenn keine derartige Regel gefunden wurde, wird keine Aktion ausgeführt, und die Methode gibt false zurück. Wenn übereinstimmende Regeln gefunden werden, werden ihre Vererbungs- und Kompatibilitätsflags auf Kompatibilität mit den in rule angegebenen Flags überprüft. Wenn keine kompatible Regel gefunden wurde, wird keine Aktion ausgeführt, und die Methode gibt false zurück. Wenn eine Regel mit kompatiblen Flags gefunden wird, werden die in rule angegebenen Rechte aus der kompatiblen Regel entfernt, und die Methode gibt true zurück. Wenn rule Rechte angibt, die nicht in der kompatiblen Regel enthalten sind, werden keine Aktionen in Bezug auf diese Rechte ausgeführt. Wenn alle Rechte aus der kompatiblen Regel entfernt werden, wird die ganze Regel aus dem aktuellen RegistrySecurity-Objekt entfernt.

Das folgende Codebeispiel illustriert, wie die RemoveAccessRule-Methode Rechte aus einer kompatiblen Regel entfernt und wie die AddAccessRule-Methode Rechte mit kompatiblen Regeln zusammenführt.

Im Beispiel wird ein RegistrySecurity-Objekt erstellt und eine Regel hinzugefügt, die dem aktuellen Benutzer RegistryRights.ReadKey-Rechte gewährt. Anschließend wird im Beispiel eine Regel erstellt, die dem Benutzer RegistryRights.SetValue gewährt, mit denselben Vererbungs- und Verteilungsrechten wie die erste Regel. Mit der RemoveAccessRule-Methode wird diese neue Regel aus dem RegistrySecurity-Objekt entfernt. SetValue ist ein Bestandteil von ReadKey und wird deshalb aus der kompatiblen Regel entfernt. Die Regeln im RegistrySecurity-Objekt werden angezeigt und zeigen die übrigen Bestandteile von ReadKey an.

Im Beispielcode wird anschließend die RemoveAccessRule-Methode aufgerufen, um SetValue wieder mit der Regel im RegistrySecurity-Objekt zusammenzuführen.

HinweisHinweis

In diesem Beispiel wird das Sicherheitsobjekt nicht an ein RegistryKey-Objekt angefügt. Im zweiten Beispiel in diesem Abschnitt wird ein Sicherheitsobjekt angefügt. Dies erfolgt auch in den Beispielen in RegistryKey.GetAccessControlRegistryKey.SetAccessControl.



using System;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Security;
using Microsoft.Win32;

public class Example
{

    public static void Main()
    {

        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 ReadKey
        // rights. ReadKey is a combination of four other 
        // rights. The rule is inherited by all 
        // contained subkeys.
        RegistryAccessRule rule = new RegistryAccessRule(user, 
            RegistryRights.ReadKey, 
            InheritanceFlags.ContainerInherit, 
            PropagationFlags.None, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Create a rule that allows the current user only the 
        // right to query the key/value pairs of a key, using  
        // the same inheritance and propagation flags as the
        // first rule. QueryValues is a constituent of 
        // ReadKey, so when this rule is removed, using the 
        // RemoveAccessRule method, ReadKey is broken into
        // its constituent parts.
        rule = new RegistryAccessRule(user, 
            RegistryRights.QueryValues, 
            InheritanceFlags.ContainerInherit, 
            PropagationFlags.None, 
            AccessControlType.Allow);
        mSec.RemoveAccessRule(rule);

        // Display the rules in the security object.
        ShowSecurity(mSec);

        // Add the second rule back. It merges with the 
        // existing rule, so that the rule is now displayed
        // as ReadKey.
        mSec.AddAccessRule(rule);

        // Display the rules in the security object.
        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(" 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: EnumerateSubKeys, Notify, ReadPermissions
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? False


Current access rules:

        User: TestDomain\TestUser
        Type: Allow
      Rights: ReadKey
 Inheritance: ContainerInherit
 Propagation: None
   Inherited? False
 */


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft