RegistryKeyPermissionCheck Enum

Definisi

Menentukan apakah pemeriksaan keamanan dilakukan saat membuka kunci registri dan mengakses pasangan nama/nilainya.

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
Warisan
RegistryKeyPermissionCheck

Bidang

Default 0

Kunci registri mewarisi mode induknya. Pemeriksaan keamanan dilakukan saat mencoba mengakses subkunci atau nilai, kecuali induk dibuka dengan ReadSubTree mode atau ReadWriteSubTree .

ReadSubTree 1

Pemeriksaan keamanan tidak dilakukan saat mengakses subkey atau nilai. Pemeriksaan keamanan dilakukan ketika mencoba membuka kunci saat ini, kecuali induk dibuka dengan ReadSubTree atau ReadWriteSubTree.

ReadWriteSubTree 2

Pemeriksaan keamanan tidak dilakukan saat mengakses subkey atau nilai. Pemeriksaan keamanan dilakukan ketika mencoba membuka kunci saat ini, kecuali induk dibuka dengan ReadWriteSubTree.

Contoh

Contoh kode berikut membuat subkunci yang berisi 100 pasangan kunci/nilai dan menutupnya. Contoh membuka subkey dengan Default dan merekam waktu yang diperlukan untuk membaca semua nilai. Kemudian contoh membuka subkey dengan ReadSubTree dan merekam waktu yang diperlukan untuk membaca semua nilai. Terakhir, contoh menghitung dan menampilkan peningkatan persentase.

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

Keterangan

Ketika aplikasi menyimpan atau mengambil sejumlah besar pengaturan registri dari sekumpulan subkunci, banyak pemeriksaan keamanan redundan dilakukan. Enumerasi ini menentukan kapan pemeriksaan keamanan pada kunci akan dihilangkan.

Tabel berikut menunjukkan kapan pemeriksaan keamanan dilakukan, berdasarkan cara kunci induk dan kunci saat ini dibuka.

Kunci induk dibuka dengan Kunci saat ini dibuka dengan Hasil
Default Default Pemeriksaan keamanan dilakukan saat mengakses nilai apa pun di kunci saat ini, atau saat mencoba mengakses subkunji. Ini adalah perilaku dalam versi .NET Framework 1.0 dan 1.1.
Default ReadSubTree Pemeriksaan keamanan dilakukan ketika mencoba membuka kunci saat ini.
Default ReadWriteSubTree Pemeriksaan keamanan dilakukan ketika mencoba membuka kunci saat ini.
ReadSubTree Default atau ReadSubTree Tidak ada pemeriksaan keamanan yang dilakukan saat membuka kunci saat ini atau nilainya.
ReadSubTree ReadWriteSubTree Pemeriksaan keamanan dilakukan ketika mencoba membuka kunci saat ini.
ReadWriteSubTree Apa pun Tidak ada pemeriksaan keamanan yang dilakukan saat membuka kunci saat ini atau nilainya.

Berlaku untuk