Udostępnij za pośrednictwem


RegistryKeyPermissionCheck Wyliczenie

Definicja

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
RegistryKeyPermissionCheck

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ń.

Dotyczy