Język

RegistryKeyPermissionCheck Wyliczenie

Definicja

Określa, czy testy 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

Nazwisko Wartość Opis
Default 0

Klucz rejestru dziedziczy tryb jego elementu nadrzędnego. Kontrole zabezpieczeń są wykonywane podczas próby uzyskania dostępu do podklucza lub wartości, chyba że element nadrzędny został otwarty w ReadSubTree trybie lub ReadWriteSubTree .

ReadSubTree 1

Sprawdzanie zabezpieczeń nie jest wykonywane podczas uzyskiwania dostępu do podkluczów ani wartości. Sprawdzanie zabezpieczeń jest wykonywane podczas próby otwarcia bieżącego klucza, chyba że element nadrzędny został otwarty za pomocą ReadSubTree polecenia lub ReadWriteSubTree.

ReadWriteSubTree 2

Sprawdzanie zabezpieczeń nie jest wykonywane podczas uzyskiwania dostępu do podkluczów ani wartości. Sprawdzanie zabezpieczeń jest wykonywane podczas próby otwarcia bieżącego klucza, chyba że element nadrzędny został otwarty za pomocą ReadWriteSubTreepolecenia .

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 do odczytania wszystkich wartości. Na koniec przykład oblicza i wyświetla poprawę procentową.

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, są wykonywane liczne nadmiarowe kontrole zabezpieczeń. Ta wyliczenie określa, kiedy należy pominąć sprawdzanie zabezpieczeń klucza.

W poniższej tabeli przedstawiono czas przeprowadzania kontroli 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 Result
Wartość domyślna Wartość domyślna 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 programie .NET Framework w wersjach 1.0 i 1.1.
Wartość domyślna Readsubtree Sprawdzanie zabezpieczeń jest wykonywane podczas próby otwarcia bieżącego klucza.
Wartość domyślna ReadWriteSubTree Sprawdzanie zabezpieczeń jest wykonywane podczas próby otwarcia bieżącego klucza.
Readsubtree Domyślne lub ReadSubTree Podczas otwierania bieżącego klucza lub jego wartości nie są wykonywane żadne kontrole zabezpieczeń.
Readsubtree ReadWriteSubTree Sprawdzanie zabezpieczeń jest wykonywane podczas próby otwarcia bieżącego klucza.
ReadWriteSubTree Dowolna Podczas otwierania bieżącego klucza lub jego wartości nie są wykonywane żadne kontrole zabezpieczeń.

Dotyczy