Прочитать на английском

Поделиться через


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

Определение

Определяет, выполняются ли проверки безопасности при открытии разделов реестра и доступе к соответствующим парам "имя-значение".

C#
public enum RegistryKeyPermissionCheck
Наследование
RegistryKeyPermissionCheck

Поля

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

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

ReadSubTree 1

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

ReadWriteSubTree 2

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

Примеры

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

C#
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.
 */

Комментарии

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

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

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

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

Продукт Версии
.NET 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5