RegistryRights Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt die Zugriffssteuerungsrechte an, die auf Registrierungsobjekte angewendet werden können.
Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.
public enum class RegistryRights
[System.Flags]
public enum RegistryRights
[<System.Flags>]
type RegistryRights =
Public Enum RegistryRights
- Vererbung
- Attribute
Felder
| Name | Wert | Beschreibung |
|---|---|---|
| QueryValues | 1 | Das Recht, die Namen/Wert-Paare in einem Registrierungsschlüssel abzufragen. |
| SetValue | 2 | Das Recht zum Erstellen, Löschen oder Festlegen von Name/Wert-Paaren in einem Registrierungsschlüssel. |
| CreateSubKey | 4 | Das Recht zum Erstellen von Unterschlüsseln eines Registrierungsschlüssels. |
| EnumerateSubKeys | 8 | Die Rechte zum Auflisten der Unterschlüssel eines Registrierungsschlüssels. |
| Notify | 16 | Das Recht, Benachrichtigungen über Änderungen an einem Registrierungsschlüssel anzufordern. |
| CreateLink | 32 | Reserviert für die Systemverwendung. |
| Delete | 65536 | Das Recht, einen Registrierungsschlüssel zu löschen. |
| ReadPermissions | 131072 | Das Recht, die Zugriffsregeln und Überwachungsregeln für einen Registrierungsschlüssel zu öffnen und zu kopieren. |
| WriteKey | 131078 | Das Recht zum Erstellen, Löschen und Festlegen der Namen/Wert-Paare in einem Registrierungsschlüssel, zum Erstellen oder Löschen von Unterschlüsseln, zum Anfordern von Benachrichtigungen über Änderungen, zum Aufzählen seiner Unterschlüssel und zum Lesen der Zugriffsregeln und Überwachungsregeln. |
| ExecuteKey | 131097 | Dasselbe wie ReadKey. |
| ReadKey | 131097 | Das Recht zum Abfragen der Namen-Wert-Paare in einem Registrierungsschlüssel, zum Anfordern von Benachrichtigungen über Änderungen, zum Aufzählen seiner Unterschlüssel und zum Lesen der Zugriffsregeln und Überwachungsregeln. |
| ChangePermissions | 262144 | Das Recht, die Zugriffsregeln und Überwachungsregeln zu ändern, die einem Registrierungsschlüssel zugeordnet sind. |
| TakeOwnership | 524288 | Das Recht, den Besitzer eines Registrierungsschlüssels zu ändern. |
| FullControl | 983103 | Das Recht, die volle Kontrolle über einen Registrierungsschlüssel auszuüben und seine Zugriffs- und Überwachungsregeln zu ändern. |
Beispiele
Im folgenden Codebeispiel wird die Verwendung der RegistryRights Enumeration veranschaulicht. Der Code erstellt einen Testschlüssel, sodass der aktuelle Benutzer Zugriffsberechtigungen lesen und löschen kann, aber ChangePermissions- und WriteKey-Rechte verweigert. Nachfolgende Versuche, den Schlüssel zu bearbeiten, können je nach diesen Berechtigungen erfolgreich sein oder fehlschlagen.
Bevor der Schlüssel gelöscht wird, wird der Code angehalten. Sie können zum Registrierungs-Editor (Regedit.exe oder Regedt32.exe) wechseln und überprüfen, ob dieselben Zugriffsrechte gelten, wenn auf den Schlüssel über den Registrierungs-Editor zugegriffen wird.
Dieses Beispiel funktioniert am besten, wenn Sie RunAs über die Befehlszeile verwenden, um den Registrierungs-Editor und den Beispielcode als lokaler Benutzer ohne Administratorrechte auszuführen. Wenn Sie beispielsweise einen lokalen Benutzer namens TestUser definiert haben, öffnet der Befehl runas /user:TestUser cmd ein Befehlsfenster, aus dem Sie den Registrierungs-Editor und dann 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.
*/
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.
Hinweise
Verwenden Sie die RegistryRights Aufzählung, um registrierungszugriffsrechte anzugeben, wenn Sie Objekte erstellen RegistrySecurity . Um Zugriffsrechte auf einen Registrierungsschlüssel anzuwenden, fügen Sie RegistryAccessRule zunächst Einem Objekt Objekte hinzu RegistrySecurity , fügen Sie das RegistrySecurity Objekt dann mithilfe der RegistryKey.SetAccessControl Methode oder einer entsprechenden Überladung der RegistryKey.CreateSubKey Methode an den Schlüssel an.