Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren

RegistryRights-Enumeration

Aktualisiert: November 2007

Gibt die Zugriffssteuerungsrechte an, die auf Registrierungsobjekte angewendet werden können.

Diese Enumeration verfügt über ein FlagsAttribute-Attribut, das die bitweise Kombination der Memberwerte zulässt.

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

[FlagsAttribute]
public enum RegistryRights
/** @attribute FlagsAttribute */
public enum RegistryRights
public enum RegistryRights

MembernameBeschreibung
QueryValuesDas Recht, die Name-Wert-Paare in einem Registrierungsschlüssel abzufragen.
SetValueDas Recht, Name-Wert-Paare in einem Registrierungsschlüssel zu erstellen, zu löschen und festzulegen.
CreateSubKeyDas Recht, Unterschlüssel von einem Registrierungsschlüssel zu erstellen.
EnumerateSubKeysDas Recht, die Unterschlüssel eines Registrierungsschlüssel aufzulisten.
NotifyDas Recht, Benachrichtigungen über Änderungen eines Registrierungsschlüssels anzufordern.
CreateLinkFür Verwendung durch das System vorgesehen.
ExecuteKeyIdentisch mit ReadKey.
ReadKeyDas Recht, die Name-Wert-Paare in einem Registrierungsschlüssel abzufragen, die Unterschlüssel zu enumerieren und die Zugriffs- und Überwachungsregeln zu lesen.
WriteKeyDas Recht, die Name-Wert-Paare in einem Registrierungsschlüssel zu erstellen, zu löschen und festzulegen, Unterschlüssel zu erstellen und zu löschen, die Unterschlüssel zu enumerieren und die Zugriffs- und Überwachungsregeln zu lesen.
DeleteDas Recht, einen Registrierungsschlüssel zu löschen.
ReadPermissionsDas Recht, die Zugriffsregeln und die Überwachungsregeln eines Registrierungsschlüssels zu öffnen und zu kopieren.
ChangePermissionsDas Recht, die einem Registrierungsschlüssel zugeordneten Zugriffsregeln und die Überwachungsregeln zu ändern.
TakeOwnershipDas Recht, den Besitzer eines Registrierungsschlüssels zu ändern.
FullControlDas Recht, die vollständige Kontrolle über einen Registrierungsschlüssel auszuüben und seine Zugriffsregeln und Überwachungsregeln zu ändern.

Geben Sie mit der RegistryRights-Enumeration die Registrierungszugriffsrechte an, wenn Sie RegistrySecurity-Objekte erstellen. Fügen Sie zum Anwenden von Zugriffsrechten auf einen Registrierungsschlüssel zuerst einem RegistrySecurity-Objekt RegistryAccessRule-Objekte hinzu, und fügen Sie dann das RegistrySecurity-Objekt mit der RegistryKey.SetAccessControl-Methode oder einer geeigneten Überladung der RegistryKey.CreateSubKey-Methode an den Schlüssel an.

Im folgenden Codebeispiel wird die Verwendung von RegistryRights veranschaulicht. Im Codebeispiel wird ein Testschlüssel erstellt, der dem aktuellen Benutzer die Zugriffsrechte ReadKey und Delete gewährt und die Zugriffsrechte ChangePermissions und WriteKey verweigert. Je nach Berechtigungen sind nachfolgende Schlüsselbearbeitungsversuche erfolgreich oder scheitern.

Bevor der Schlüssel gelöscht wird, hält der Code an. Sie können den Registrierungseditor (Regedit.exe oder Regedt32.exe) aufrufen und überprüfen, ob für den Zugriff mit dem Registrierungseditor die gleichen Zugriffsrechte gelten.

In diesem Beispiel sollte der Registrierungseditor in der Befehlszeile mit RunAs und der Beispielcode als lokaler Benutzer ohne Administratorrechte ausgeführt werden. Wenn Sie z. B. einen lokalen Benutzer TestUser angelegt haben, öffnet der Befehl runas /user:TestUser cmd ein Befehlsfenster, in dem Sie den Registrierungseditor und den Beispielcode ausführen können.

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

public class Example
{
    public static void Main()
    {
        // Delete the example key if it exists.
        try
        {
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key has been deleted.");
        }
        catch (ArgumentException)
        {
            // ArgumentException is thrown if the key does not exist. In
            // this case, there is no reason to display a message.
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
            return;
        }

        string user = Environment.UserDomainName + "\\" + Environment.UserName;

        RegistrySecurity rs = new RegistrySecurity();

        // Allow the current user to read and delete the key.
        //
        rs.AddAccessRule(new RegistryAccessRule(user, 
            RegistryRights.ReadKey | RegistryRights.Delete, 
            InheritanceFlags.None, 
            PropagationFlags.None, 
            AccessControlType.Allow));

        // Prevent the current user from writing or changing the
        // permission set of the key. Note that if Delete permission
        // were not allowed in the previous access rule, denying
        // WriteKey permission would prevent the user from deleting the 
        // key.
        rs.AddAccessRule(new RegistryAccessRule(user, 
            RegistryRights.WriteKey | RegistryRights.ChangePermissions, 
            InheritanceFlags.None, 
            PropagationFlags.None, 
            AccessControlType.Deny));

        // Create the example key with registry security.
        RegistryKey rk = null;
        try
        {
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", 
                RegistryKeyPermissionCheck.Default, rs);
            Console.WriteLine("\r\nExample key created.");
            rk.SetValue("ValueName", "StringValue");
        }
        catch (Exception ex)
        {
            Console.WriteLine("\r\nUnable to create the example key: {0}", ex);
        }
        if (rk != null) rk.Close();

        rk = Registry.CurrentUser;

        RegistryKey rk2;

        // Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", false);
        Console.WriteLine("\r\nRetrieved value: {0}", rk2.GetValue("ValueName"));
        rk2.Close();

        // Attempt to open the key with write access.
        try
        {
            rk2 = rk.OpenSubKey("RegistryRightsExample", true);
        }
        catch (SecurityException ex)
        {
            Console.WriteLine("\nUnable to write to the example key." +
                " Caught SecurityException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        // Attempt to change permissions for the key.
        try
        {
            rs = new RegistrySecurity();
            rs.AddAccessRule(new RegistryAccessRule(user, 
                RegistryRights.WriteKey, 
                InheritanceFlags.None, 
                PropagationFlags.None, 
                AccessControlType.Allow));
            rk2 = rk.OpenSubKey("RegistryRightsExample", false);
            rk2.SetAccessControl(rs);
            Console.WriteLine("\r\nExample key permissions were changed.");
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("\nUnable to change permissions for the example key." +
                " Caught UnauthorizedAccessException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        Console.WriteLine("\r\nPress Enter to delete the example key.");
        Console.ReadLine();

        try
        {
            rk.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key was deleted.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
        }

        rk.Close();
    }
}

/* This code example produces the following output:

Example key created.

Retrieved value: StringValue

Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.

Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.

Press Enter to delete the example key.

Example key was deleted.
 */


import System.*;
import System.Reflection.*;
import System.Security.*;
import System.Security.AccessControl.*;
import Microsoft.Win32.*;

public class Example
{
    public static void main(String[] args)
    {
        // Delete the example key if it exists.
        try {
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key has been deleted.");
        }
        catch (ArgumentException exp) {
            // ArgumentException is thrown if the key does not exist. In
            // this case, there is no reason to display a message.
        }
        catch (System.Exception ex) {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
            return;
        }

        String user = Environment.get_UserDomainName() + "\\" 
            + Environment.get_UserName();

        RegistrySecurity rs = new RegistrySecurity();
        // Allow the current user to read and delete the key.
        //
        rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.ReadKey 
            | RegistryRights.Delete, InheritanceFlags.None, 
            PropagationFlags.None, AccessControlType.Allow));
        // Prevent the current user from writing or changing the
        // permission set of the key. Note that if Delete permission
        // were not allowed in the previous access rule, denying
        // WriteKey permission would prevent the user from deleting the 
        // key.
        rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.WriteKey 
            | RegistryRights.ChangePermissions, InheritanceFlags.None, 
            PropagationFlags.None, AccessControlType.Deny));
        // Create the example key with registry security.
        RegistryKey rk = null;
        try {
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", 
                RegistryKeyPermissionCheck.Default, rs);
            Console.WriteLine("\r\nExample key created.");
            rk.SetValue("ValueName", "StringValue");
        }
        catch (System.Exception ex) {
            Console.WriteLine("\r\nUnable to create the example key: {0}", ex);
        }
        if (rk != null) {
            rk.Close();
        }
        rk = Registry.CurrentUser;
        RegistryKey rk2;
        // Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", false);
        Console.WriteLine("\r\nRetrieved value: {0}", rk2.GetValue("ValueName"));
        rk2.Close();
        // Attempt to open the key with write access.
        try {
            rk2 = rk.OpenSubKey("RegistryRightsExample", true);
        }
        catch (System.Security.SecurityException ex) {
            Console.WriteLine("\r\nUnable to write to the example key." +
                " Caught SecurityException: {0}", ex.get_Message());
        }
        if (rk2 != null) {
            rk2.Close();
        }
        // Attempt to change permissions for the key.
        try {
            rs = new RegistrySecurity();
            rs.AddAccessRule(new RegistryAccessRule(user, 
                RegistryRights.WriteKey, InheritanceFlags.None, 
                PropagationFlags.None, AccessControlType.Allow));
            rk2 = rk.OpenSubKey("RegistryRightsExample", false);
            rk2.SetAccessControl(rs);
            Console.WriteLine("\r\nExample key permissions were changed.");
        }
        catch (System.UnauthorizedAccessException ex) {
            Console.WriteLine("\r\nUnable to change permissions for the example key." +
                " Caught UnauthorizedAccessException: {0}", ex.get_Message());
        }
        if (rk2 != null) {
            rk2.Close();
        }
        Console.WriteLine("\r\nPress Enter to delete the example key.");
        Console.ReadLine();
        try {
            rk.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key was deleted.");
        }
        catch (System.Exception ex) {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
        }
        rk.Close();
    } //main
} //Example

/* This code example produces the following output:

Example key created.

Retrieved value: StringValue

Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.

Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.

Press Enter to delete the example key.

Example key was deleted.
 */


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

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

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft