RegistryKeyPermissionCheck 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定開啟登錄機碼並且存取其名稱/值組時,是否執行安全性檢查。
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- 繼承
欄位
Default | 0 | 此登錄機碼繼承其父系的模式。 在嘗試存取子機碼或值的時候,執行安全性檢查,除非其父系是以 ReadSubTree 或 ReadWriteSubTree 模式開啟。 |
ReadSubTree | 1 | 存取子機碼或值的時候,不執行安全性檢查。 在嘗試開啟目前機碼的時候,執行安全性檢查,除非其父系是以 ReadSubTree 或 ReadWriteSubTree 開啟。 |
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 | 任意 | 開啟目前的金鑰或其值時,不會執行任何安全性檢查。 |