RegistryKeyPermissionCheck 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 an, ob Sicherheitsüberprüfungen beim Öffnen von Registrierungsschlüsseln und beim Zugriff auf ihre Namen/Wert-Paare ausgeführt werden.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Vererbung
Felder
| Name | Wert | Beschreibung |
|---|---|---|
| Default | 0 | Der Registrierungsschlüssel erbt den Modus des übergeordneten Elements. Sicherheitsüberprüfungen werden ausgeführt, wenn sie versuchen, auf Unterschlüssel oder Werte zuzugreifen, es sei denn, das übergeordnete Element wurde mit ReadSubTree oder ReadWriteSubTree im Modus geöffnet. |
| ReadSubTree | 1 | Sicherheitsüberprüfungen werden beim Zugriff auf Unterschlüssel oder Werte nicht ausgeführt. Beim Versuch, den aktuellen Schlüssel zu öffnen, wird eine Sicherheitsüberprüfung ausgeführt, es sei denn, das übergeordnete Element wurde mit ReadSubTree oder ReadWriteSubTreegeöffnet. |
| ReadWriteSubTree | 2 | Sicherheitsüberprüfungen werden beim Zugriff auf Unterschlüssel oder Werte nicht ausgeführt. Beim Versuch, den aktuellen Schlüssel zu öffnen, wird eine Sicherheitsüberprüfung ausgeführt, es sei denn, das übergeordnete Element wurde mit ReadWriteSubTreegeöffnet. |
Beispiele
Im folgenden Codebeispiel wird ein Unterschlüssel mit 100 Schlüssel-Wert-Paaren erstellt und geschlossen. Das Beispiel öffnet den Unterschlüssel mit Default und zeichnet die Zeit auf, die zum Lesen aller Werte benötigt wird. Anschließend öffnet das Beispiel den Unterschlüssel mit ReadSubTree und zeichnet die Zeit auf, die zum Lesen aller Werte benötigt wird. Schließlich berechnet und zeigt das Beispiel die Prozentuale Verbesserung an.
using System;
using Microsoft.Win32;
using System.Diagnostics;
public class Example
{
public static void Main()
{
const int LIMIT = 100;
RegistryKey cu = Registry.CurrentUser;
const string testKey = "RegistryKeyPermissionCheckExample";
Console.WriteLine("Generating {0} key/value pairs.", LIMIT);
RegistryKey rk = cu.CreateSubKey(testKey);
for (int i = 0; i < LIMIT; i++)
{
rk.SetValue("Key" + i, i);
}
rk.Close();
Stopwatch s = new Stopwatch();
// On the default setting, security is checked every time
// a key/value pair is read.
rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.Default);
s.Start();
for (int i = 0; i < LIMIT; i++)
{
rk.GetValue("Key" + i, i);
}
s.Stop();
rk.Close();
long delta1 = s.ElapsedTicks;
s.Reset();
// When the key is opened with ReadSubTree, security is
// not checked when the values are read.
rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.ReadSubTree);
s.Start();
for (int i = 0; i < LIMIT; i++)
{
rk.GetValue("Key" + i, i);
}
s.Stop();
rk.Close();
long delta2 = s.ElapsedTicks;
double faster = (double) (delta1 - delta2) / (double) delta1;
Console.WriteLine("ReadSubTree is {0}% faster for {1} values.",
(faster * 100).ToString("0.0"), LIMIT);
cu.DeleteSubKey(testKey);
}
}
/* This code example produces output similar to the following:
Generating 100 key/value pairs.
ReadSubTree is 23.4% faster for 100 values.
*/
Imports Microsoft.Win32
Imports System.Diagnostics
Public Class Example
Public Shared Sub Main()
Const LIMIT As Integer = 100
Dim cu As RegistryKey = Registry.CurrentUser
Const testKey As String = "RegistryKeyPermissionCheckExample"
Console.WriteLine("Generating {0} key/value pairs.", LIMIT)
Dim rk As RegistryKey = cu.CreateSubKey(testKey)
For i As Integer = 0 To LIMIT
rk.SetValue("Key" & i, i)
Next i
rk.Close()
Dim s As New Stopwatch()
' On the default setting, security is checked every time
' a key/value pair is read.
rk = cu.OpenSubKey(testKey, _
RegistryKeyPermissionCheck.Default)
s.Start()
For i As Integer = 0 To LIMIT
rk.GetValue("Key" & i, i)
Next i
s.Stop()
rk.Close()
Dim delta1 As Long = s.ElapsedTicks
s.Reset()
' When the key is opened with ReadSubTree, security is
' not checked when the values are read.
rk = cu.OpenSubKey(testKey, _
RegistryKeyPermissionCheck.ReadSubTree)
s.Start()
For i As Integer = 0 To LIMIT
rk.GetValue("Key" & i, i)
Next i
s.Stop()
rk.Close()
Dim delta2 As Long = s.ElapsedTicks
Dim faster As Double = _
CDbl(delta1 - delta2) * 100.0 / CDbl(delta1)
Console.WriteLine("ReadSubTree is {0}% faster for {1} values.", _
faster.ToString("0.0"), LIMIT)
cu.DeleteSubKey(testKey)
End Sub
End Class
' This code example produces output similar to the following:
'
'Generating 100 key/value pairs.
'ReadSubTree is 23.4% faster for 100 values.
'
Hinweise
Wenn eine Anwendung eine große Anzahl von Registrierungseinstellungen aus einer Reihe von Unterschlüsseln speichert oder abruft, werden zahlreiche redundante Sicherheitsüberprüfungen ausgeführt. Diese Aufzählung gibt an, wann Sicherheitsprüfungen für einen Schlüssel weggelassen werden sollen.
Die folgende Tabelle zeigt, wann Sicherheitsprüfungen ausgeführt werden, basierend auf der Art und Weise, wie der übergeordnete Schlüssel und der aktuelle Schlüssel geöffnet werden.
| Übergeordneter Schlüssel, geöffnet mit | Aktueller Schlüssel geöffnet mit | Ergebnis |
|---|---|---|
| Vorgabe | Vorgabe | Beim Zugriff auf einen Beliebigen Wert im aktuellen Schlüssel oder beim Versuch, auf einen Unterschlüssel zuzugreifen, wird eine Sicherheitsüberprüfung ausgeführt. Dies ist das Verhalten in .NET Framework-Versionen 1.0 und 1.1. |
| Vorgabe | Readsubtree | Beim Versuch, den aktuellen Schlüssel zu öffnen, wird eine Sicherheitsüberprüfung ausgeführt. |
| Vorgabe | ReadWriteSubTree | Beim Versuch, den aktuellen Schlüssel zu öffnen, wird eine Sicherheitsüberprüfung ausgeführt. |
| Readsubtree | Standard- oder ReadSubTree | Beim Öffnen des aktuellen Schlüssels oder der zugehörigen Werte werden keine Sicherheitsüberprüfungen ausgeführt. |
| Readsubtree | ReadWriteSubTree | Beim Versuch, den aktuellen Schlüssel zu öffnen, wird eine Sicherheitsüberprüfung ausgeführt. |
| ReadWriteSubTree | Beliebig | Beim Öffnen des aktuellen Schlüssels oder der zugehörigen Werte werden keine Sicherheitsüberprüfungen ausgeführt. |