RegistryKeyPermissionCheck Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje, jestli se při otevírání klíčů registru a přístupu k jejich párům název/hodnota budou provádět kontroly zabezpečení.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Dědičnost
Pole
Default | 0 | Klíč registru dědí režim nadřazeného objektu. Kontroly zabezpečení se provádějí při pokusu o přístup k podklíčům nebo hodnotám, pokud nebyl nadřazený objekt otevřen v ReadSubTree režimu nebo ReadWriteSubTree . |
ReadSubTree | 1 | Při přístupu k podklíčům nebo hodnotám se neprovádí kontroly zabezpečení. Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení, pokud nebyl nadřazený klíč otevřen pomocí ReadSubTree nebo ReadWriteSubTree. |
ReadWriteSubTree | 2 | Při přístupu k podklíčům nebo hodnotám se neprovádí kontroly zabezpečení. Kontrola zabezpečení se provede při pokusu o otevření aktuálního klíče, pokud nadřazený objekt nebyl otevřen pomocí ReadWriteSubTree. |
Příklady
Následující příklad kódu vytvoří podklíč obsahující 100 párů klíč/hodnota a zavře ho. V příkladu se otevře podklíč s hodnotou Default a zaznamená se doba potřebná ke čtení všech hodnot. Potom příklad otevře podklíč s ReadSubTree a zaznamená čas, který trvá čtení všech hodnot. Nakonec příklad vypočítá a zobrazí procentuální zlepšení.
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.
'
Poznámky
Když aplikace uloží nebo načte velký počet nastavení registru ze sady podklíčů, provede se řada redundantních kontrol zabezpečení. Tento výčet určuje, kdy mají být vynechány kontroly zabezpečení klíče.
Následující tabulka ukazuje, kdy se provádějí kontroly zabezpečení na základě způsobu otevření nadřazeného a aktuálního klíče.
Nadřazený klíč otevřený pomocí | Aktuální klíč otevřen pomocí | Výsledek |
---|---|---|
Výchozí | Výchozí | Kontrola zabezpečení se provádí při přístupu k libovolné hodnotě v aktuálním klíči nebo při pokusu o přístup k podklíči. Toto je chování v rozhraní .NET Framework verze 1.0 a 1.1. |
Default | Readsubtree | Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení. |
Default | ReadWriteSubTree | Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení. |
Readsubtree | Výchozí nebo ReadSubTree | Při otevření aktuálního klíče nebo jeho hodnot se neprovádí žádné kontroly zabezpečení. |
Readsubtree | ReadWriteSubTree | Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení. |
ReadWriteSubTree | Všechny | Při otevření aktuálního klíče nebo jeho hodnot se neprovádí žádné kontroly zabezpečení. |