RegistryKeyPermissionCheck Перечисление

Определение

Указывает, выполняются ли проверки безопасности при открытии разделов реестра и доступе к парам имен и значений.

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
Наследование
RegistryKeyPermissionCheck

Поля

Имя Значение Описание
Default 0

Раздел реестра наследует режим родительского элемента. Проверки безопасности выполняются при попытке доступа к вложенным ключам или значениям, если родитель не был открыт с ReadSubTree помощью или ReadWriteSubTree режимом.

ReadSubTree 1

Проверки безопасности не выполняются при доступе к вложенным ключам или значениям. Проверка безопасности выполняется при попытке открыть текущий ключ, если родитель не был открыт с ReadSubTree или ReadWriteSubTree.

ReadWriteSubTree 2

Проверки безопасности не выполняются при доступе к вложенным ключам или значениям. Проверка безопасности выполняется при попытке открыть текущий ключ, если родитель не был открыт.ReadWriteSubTree

Примеры

В следующем примере кода создается подраздел, содержащий 100 пар "ключ-значение" и закрывается. В примере открывается подраздел с параметром Default и записывается время, необходимое для чтения всех значений. Затем в примере открывается подраздел с помощью ReadSubTree и записывается время, необходимое для чтения всех значений. Наконец, в примере вычисляется и отображается процентное улучшение.

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

Комментарии

Когда приложение сохраняет или извлекает большое количество параметров реестра из набора вложенных ключей, выполняются многочисленные избыточные проверки безопасности. Это перечисление указывает, когда проверки безопасности ключа должны быть опущены.

В следующей таблице показано, когда выполняются проверки безопасности на основе способа открытия родительского ключа и текущего ключа.

Родительский ключ, открытый с помощью Текущий ключ, открытый с помощью Результат
По умолчанию По умолчанию Проверка безопасности выполняется при доступе к любому значению в текущем ключе или при попытке доступа к подразделу. Это поведение в .NET Framework версии 1.0 и 1.1.
По умолчанию ReadSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.
По умолчанию ReadWriteSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.
ReadSubTree Значение по умолчанию или ReadSubTree При открытии текущего ключа или его значений проверка безопасности не выполняется.
ReadSubTree ReadWriteSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.
ReadWriteSubTree Любое При открытии текущего ключа или его значений проверка безопасности не выполняется.

Применяется к