RegistryKeyPermissionCheck Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa, czy kontrole zabezpieczeń są wykonywane podczas otwierania kluczy rejestru i uzyskiwania dostępu do ich par nazw/wartości.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Dziedziczenie
Pola
Default | 0 | Klucz rejestru dziedziczy tryb jego elementu nadrzędnego. Kontrole zabezpieczeń są wykonywane podczas próby uzyskania dostępu do podkluczów lub wartości, chyba że element nadrzędny został otwarty w ReadSubTree trybie lub ReadWriteSubTree . |
ReadSubTree | 1 | Kontrole zabezpieczeń nie są wykonywane podczas uzyskiwania dostępu do podkluczów ani wartości. Podczas próby otwarcia bieżącego klucza jest wykonywane sprawdzanie zabezpieczeń, chyba że element nadrzędny został otwarty za pomocą polecenia ReadSubTree lub ReadWriteSubTree. |
ReadWriteSubTree | 2 | Kontrole zabezpieczeń nie są wykonywane podczas uzyskiwania dostępu do podkluczów ani wartości. Podczas próby otwarcia bieżącego klucza jest wykonywane sprawdzanie zabezpieczeń, chyba że element nadrzędny został otwarty za pomocą polecenia ReadWriteSubTree. |
Przykłady
Poniższy przykład kodu tworzy podklucz zawierający 100 par klucz/wartość i zamyka go. Przykład otwiera podklucz z wartością Default i rejestruje czas potrzebny do odczytania wszystkich wartości. Następnie przykład otwiera podklucz z funkcją ReadSubTree i rejestruje czas potrzebny na odczytanie wszystkich wartości. Na koniec przykład oblicza i wyświetla poprawę procentu.
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.
'
Uwagi
Gdy aplikacja zapisuje lub pobiera dużą liczbę ustawień rejestru z zestawu podkluczów, wykonywane są liczne nadmiarowe kontrole zabezpieczeń. Ta wyliczenie określa, kiedy należy pominąć kontrole zabezpieczeń klucza.
W poniższej tabeli przedstawiono, kiedy są wykonywane kontrole zabezpieczeń, na podstawie sposobu otwierania klucza nadrzędnego i bieżącego klucza.
Klucz nadrzędny otwarty za pomocą polecenia | Bieżący klucz otwarty za pomocą polecenia | Wynik |
---|---|---|
Domyślne | Domyślne | Sprawdzanie zabezpieczeń jest wykonywane podczas uzyskiwania dostępu do dowolnej wartości w bieżącym kluczu lub podczas próby uzyskania dostępu do podklucza. Jest to zachowanie w .NET Framework wersji 1.0 i 1.1. |
Default | Readsubtree | Podczas próby otwarcia bieżącego klucza jest wykonywane sprawdzanie zabezpieczeń. |
Default | ReadWriteSubTree | Podczas próby otwarcia bieżącego klucza jest wykonywane sprawdzanie zabezpieczeń. |
Readsubtree | Domyślna lub ReadSubTree | Podczas otwierania bieżącego klucza lub jego wartości nie są wykonywane żadne kontrole zabezpieczeń. |
Readsubtree | ReadWriteSubTree | Podczas próby otwarcia bieżącego klucza jest wykonywane sprawdzanie zabezpieczeń. |
ReadWriteSubTree | Dowolne | Podczas otwierania bieżącego klucza lub jego wartości nie są wykonywane żadne kontrole zabezpieczeń. |