英語で読む

次の方法で共有


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

注釈

アプリケーションが一連のサブキーから多数のレジストリ設定を保存または取得すると、多数の冗長なセキュリティ チェックが実行されます。 この列挙体は、キーのセキュリティ チェックを省略するタイミングを指定します。

次の表は、親キーと現在のキーを開く方法に基づいて、セキュリティ チェックが実行されるタイミングを示しています。

で開かれた親キー で開かれた現在のキー 結果
Default Default セキュリティ チェックは、現在のキーの値にアクセスするとき、またはサブキーにアクセスしようとしたときに実行されます。 これは、.NET Framework バージョン 1.0 と 1.1 の動作です。
Default ReadSubTree 現在のキーを開こうとすると、セキュリティ チェックが実行されます。
Default ReadWriteSubTree 現在のキーを開こうとすると、セキュリティ チェックが実行されます。
ReadSubTree Default または ReadSubTree 現在のキーまたはその値を開くときにセキュリティ チェックは実行されません。
ReadSubTree ReadWriteSubTree 現在のキーを開こうとすると、セキュリティ チェックが実行されます。
ReadWriteSubTree Any 現在のキーまたはその値を開くときにセキュリティ チェックは実行されません。

適用対象

製品 バージョン
.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