RegistryKeyPermissionCheck Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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. |