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

Определение

Определяет, выполняются ли проверки безопасности при открытии разделов реестра и доступе к соответствующим парам "имя-значение".Specifies whether security checks are performed when opening registry keys and accessing their name/value pairs.

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

Поля

Default 0

Раздел реестра наследует режим родительского раздела.The registry key inherits the mode of its parent. Проверки безопасности выполняются при попытке доступа к вложенным разделам или значениям, если родительский раздел не был открыт в режиме ReadSubTree или ReadWriteSubTree.Security checks are performed when trying to access subkeys or values, unless the parent was opened with ReadSubTree or ReadWriteSubTree mode.

ReadSubTree 1

Никакие проверки безопасности не выполняются при доступе к вложенным разделам или значениям.Security checks are not performed when accessing subkeys or values. Проверка безопасности выполняется при попытке открыть текущий раздел, если родительский раздел был открыт с помощью поля ReadSubTree или ReadWriteSubTree.A security check is performed when trying to open the current key, unless the parent was opened with ReadSubTree or ReadWriteSubTree.

ReadWriteSubTree 2

Никакие проверки безопасности не выполняются при доступе к вложенным разделам или значениям.Security checks are not performed when accessing subkeys or values. Проверка безопасности выполняется при попытке открыть текущий раздел, если родительский раздел был открыт с помощью поля ReadWriteSubTree.A security check is performed when trying to open the current key, unless the parent was opened with ReadWriteSubTree.

Примеры

В следующем примере кода создается подраздел, содержащий пары "ключ-значение" 100 и закрывающий его.The following code example creates a subkey containing 100 key/value pairs and closes it. В примере открывается подраздел со значением по умолчанию и записывается время, затрачиваемое на чтение всех значений.The example opens the subkey with Default and records the time it takes to read all the values. Затем в примере открывается подраздел с ReadSubTree и записывается время, затрачиваемое на чтение всех значений.Then the example opens the subkey with ReadSubTree and records the time it takes to read all the values. Наконец, в примере вычисляются и отображаются улучшения в процентах.Finally, the example computes and displays the percentage improvement.

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

Комментарии

Когда приложение сохраняет или извлекает большое количество параметров реестра из набора подразделов, выполняется множество избыточных проверок безопасности.When an application saves or retrieves a large number of registry settings from a set of subkeys, numerous redundant security checks are performed. Это перечисление указывает, когда следует опускать проверку безопасности для ключа.This enumeration specifies when security checks on a key are to be omitted.

В следующей таблице показано, когда выполняются проверки безопасности в зависимости от способа открытия родительского ключа и текущего ключа.The following table shows when security checks are performed, based on the way the parent key and the current key are opened.

Родительский ключ, Открытый с помощьюParent key opened with Текущий ключ открыт с помощьюCurrent key opened with РезультатResult
Значение по умолчаниюDefault Значение по умолчаниюDefault Проверка безопасности выполняется при доступе к любому значению в текущем ключе или при попытке доступа к подразделу.A security check is performed when accessing any value in the current key, or when attempting to access a subkey. Это поведение в платформа .NET Framework версиях 1,0 и 1,1.This is the behavior in the .NET Framework versions 1.0 and 1.1.
По умолчаниюDefault ReadSubTreeReadSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.A security check is performed when trying to open the current key.
По умолчаниюDefault реадвритесубтриReadWriteSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.A security check is performed when trying to open the current key.
ReadSubTreeReadSubTree По умолчанию или ReadSubTreeDefault or ReadSubTree При открытии текущего раздела или его значений не выполняются никакие проверки безопасности.No security checks are performed when opening the current key or its values.
ReadSubTreeReadSubTree реадвритесубтриReadWriteSubTree Проверка безопасности выполняется при попытке открыть текущий ключ.A security check is performed when trying to open the current key.
реадвритесубтриReadWriteSubTree ЛюбойAny При открытии текущего раздела или его значений не выполняются никакие проверки безопасности.No security checks are performed when opening the current key or its values.

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