RegistryKeyPermissionCheck 列舉

定義

指定開啟登錄機碼並且存取其名稱/值組時,是否執行安全性檢查。

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
繼承
RegistryKeyPermissionCheck

欄位

Default 0

此登錄機碼繼承其父系的模式。 在嘗試存取子機碼或值的時候,執行安全性檢查,除非其父系是以 ReadSubTreeReadWriteSubTree 模式開啟。

ReadSubTree 1

存取子機碼或值的時候,不執行安全性檢查。 在嘗試開啟目前機碼的時候,執行安全性檢查,除非其父系是以 ReadSubTreeReadWriteSubTree 開啟。

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 Default 或 ReadSubTree 開啟目前的金鑰或其值時,不會執行任何安全性檢查。
ReadSubTree ReadWriteSubTree 嘗試開啟目前金鑰時,會執行安全性檢查。
ReadWriteSubTree 任意 開啟目前的金鑰或其值時,不會執行任何安全性檢查。

適用於