RegistryRights Enum

Definitie

Hiermee geeft u de toegangsbeheerrechten op die kunnen worden toegepast op registerobjecten.

Deze opsomming ondersteunt een bitsgewijze combinatie van de waarden van de leden.

public enum class RegistryRights
[System.Flags]
public enum RegistryRights
[<System.Flags>]
type RegistryRights = 
Public Enum RegistryRights
Overname
RegistryRights
Kenmerken

Velden

Name Waarde Description
QueryValues 1

Het recht om een query uit te voeren op de naam/waardeparen in een registersleutel.

SetValue 2

Het recht om naam-/waardeparen in een registersleutel te maken, te verwijderen of in te stellen.

CreateSubKey 4

Het recht om subsleutels van een registersleutel te maken.

EnumerateSubKeys 8

Het recht om de subsleutels van een registersleutel weer te geven.

Notify 16

Het recht om een melding van wijzigingen op een registersleutel aan te vragen.

32

Gereserveerd voor systeemgebruik.

Delete 65536

Het recht om een registersleutel te verwijderen.

ReadPermissions 131072

Het recht om de toegangsregels en controleregels voor een registersleutel te openen en te kopiƫren.

WriteKey 131078

Het recht om de naam/waardeparen in een registersleutel te maken, te verwijderen en in te stellen, subsleutels te maken of te verwijderen, melding van wijzigingen aan te vragen, subsleutels op te sommen en de toegangsregels en controleregels te lezen.

ExecuteKey 131097

Hetzelfde als ReadKey.

ReadKey 131097

Het recht om een query uit te voeren op de naam/waardeparen in een registersleutel, om meldingen van wijzigingen aan te vragen, de subsleutels te inventariseren en de toegangsregels en controleregels te lezen.

ChangePermissions 262144

Het recht om de toegangsregels en controleregels te wijzigen die zijn gekoppeld aan een registersleutel.

TakeOwnership 524288

Het recht om de eigenaar van een registersleutel te wijzigen.

FullControl 983103

Het recht om volledige controle uit te oefenen over een registersleutel en om de toegangsregels en controleregels te wijzigen.

Voorbeelden

In het volgende codevoorbeeld ziet u het gebruik van de RegistryRights opsomming. De code maakt een testsleutel, waardoor de huidige gebruiker ReadKey- en Delete-toegangsrechten toestaat, maar changePermissions- en WriteKey-rechten weigert. Volgende pogingen om de sleutel te manipuleren, slagen of mislukken, afhankelijk van deze machtigingen.

Voordat de sleutel wordt verwijderd, wordt de code onderbroken. U kunt overschakelen naar de Register-editor (Regedit.exe of Regedt32.exe) en controleren of dezelfde toegangsrechten van toepassing zijn wanneer de sleutel wordt geopend met behulp van de Register-editor.

Dit voorbeeld werkt het beste als u RunAs vanaf de opdrachtregel gebruikt om de Register-editor en de voorbeeldcode uit te voeren als lokale gebruiker zonder beheerdersrechten. Als u bijvoorbeeld een lokale gebruiker met de naam TestUser hebt gedefinieerd, wordt met de opdracht runas /user:TestUser cmd een opdrachtvenster geopend waaruit u de Register-editor en vervolgens de voorbeeldcode kunt uitvoeren.

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.
 */
Imports System.Reflection
Imports System.Security
Imports System.Security.AccessControl
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete the example key if it exists.
        Try
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key has been deleted.")
        Catch ex As ArgumentException
            ' ArgumentException is thrown if the key does not exist. In
            ' this case, there is no reason to display a message.
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
            Return
        End Try

        Dim user As String = Environment.UserDomainName & "\" & Environment.UserName

        Dim rs As New RegistrySecurity()

        ' Allow the current user to read and delete the key.
        '
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.ReadKey Or 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 Or RegistryRights.ChangePermissions, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Deny))

        ' Create the example key with registry security.
        Dim rk As RegistryKey = Nothing
        Try
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", _
                RegistryKeyPermissionCheck.Default, rs)
            Console.WriteLine(vbCrLf & "Example key created.")
            rk.SetValue("ValueName", "StringValue")
        Catch ex As Exception
            Console.WriteLine(vbCrLf & "Unable to create the example key: {0}", ex)
        End Try

        If rk IsNot Nothing Then rk.Close()

        rk = Registry.CurrentUser

        Dim rk2 As RegistryKey
        
        ' Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", False)
        Console.WriteLine(vbCrLf & "Retrieved value: {0}", rk2.GetValue("ValueName"))
        rk2.Close()

        ' Attempt to open the key with write access.
        Try
            rk2 = rk.OpenSubKey("RegistryRightsExample", True)
        Catch ex As SecurityException
            Console.WriteLine(vbCrLf & "Unable to write to the example key." _
                & " Caught SecurityException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then 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(vbCrLf & "Example key permissions were changed.")
        Catch ex As UnauthorizedAccessException
            Console.WriteLine(vbCrLf & "Unable to change permissions for the example key." _
                & " Caught UnauthorizedAccessException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        Console.WriteLine(vbCrLf & "Press Enter to delete the example key.")
        Console.ReadLine()

        Try
            rk.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key was deleted.")
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
        End Try

        rk.Close()
    End Sub
End Class

' This code 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.

Opmerkingen

Gebruik de RegistryRights opsomming om registertoegangsrechten op te geven wanneer u objecten maakt RegistrySecurity . Als u toegangsrechten wilt toepassen op een registersleutel, voegt u eerst objecten toe RegistryAccessRule aan een RegistrySecurity object en koppelt u het RegistrySecurity object vervolgens aan de sleutel met behulp van de RegistryKey.SetAccessControl methode of een juiste overbelasting van de RegistryKey.CreateSubKey methode.

Van toepassing op

Zie ook