RegistryKeyPermissionCheck Enum
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u op of er beveiligingscontroles worden uitgevoerd bij het openen van registersleutels en het openen van hun naam/waardeparen.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Overname
Velden
| Name | Waarde | Description |
|---|---|---|
| Default | 0 | De registersleutel neemt de modus van de bovenliggende sleutel over. Beveiligingscontroles worden uitgevoerd bij het openen van subsleutels of waarden, tenzij het bovenliggende item is geopend met ReadSubTree of ReadWriteSubTree de modus. |
| ReadSubTree | 1 | Beveiligingscontroles worden niet uitgevoerd bij het openen van subsleutels of waarden. Er wordt een beveiligingscontrole uitgevoerd bij het openen van de huidige sleutel, tenzij het bovenliggende element is geopend met ReadSubTree of ReadWriteSubTree. |
| ReadWriteSubTree | 2 | Beveiligingscontroles worden niet uitgevoerd bij het openen van subsleutels of waarden. Er wordt een beveiligingscontrole uitgevoerd bij het openen van de huidige sleutel, tenzij het bovenliggende element is geopend met ReadWriteSubTree. |
Voorbeelden
In het volgende codevoorbeeld wordt een subsleutel gemaakt met 100 sleutel-/waardeparen en wordt deze gesloten. In het voorbeeld wordt de subsleutel met Standaard geopend en wordt de tijd vastgelegd die nodig is om alle waarden te lezen. Vervolgens opent het voorbeeld de subsleutel met ReadSubTree en registreert u de tijd die nodig is om alle waarden te lezen. Ten slotte wordt het voorbeeld berekend en wordt de percentageverbetering weergegeven.
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.
'
Opmerkingen
Wanneer een toepassing een groot aantal registerinstellingen opslaat of ophaalt uit een set subsleutels, worden talloze redundante beveiligingscontroles uitgevoerd. Deze opsomming geeft aan wanneer beveiligingscontroles op een sleutel moeten worden weggelaten.
In de volgende tabel ziet u wanneer er beveiligingscontroles worden uitgevoerd, op basis van de manier waarop de bovenliggende sleutel en de huidige sleutel worden geopend.
| Bovenliggende sleutel geopend met | Huidige sleutel geopend met | Resultaat |
|---|---|---|
| Verstek | Verstek | Er wordt een beveiligingscontrole uitgevoerd bij het openen van een waarde in de huidige sleutel of bij een poging om toegang te krijgen tot een subsleutel. Dit is het gedrag in .NET Framework-versies 1.0 en 1.1. |
| Verstek | ReadSubTree | Er wordt een beveiligingscontrole uitgevoerd bij het openen van de huidige sleutel. |
| Verstek | ReadWriteSubTree | Er wordt een beveiligingscontrole uitgevoerd bij het openen van de huidige sleutel. |
| ReadSubTree | Standaard of ReadSubTree | Er worden geen beveiligingscontroles uitgevoerd bij het openen van de huidige sleutel of de bijbehorende waarden. |
| ReadSubTree | ReadWriteSubTree | Er wordt een beveiligingscontrole uitgevoerd bij het openen van de huidige sleutel. |
| ReadWriteSubTree | Any | Er worden geen beveiligingscontroles uitgevoerd bij het openen van de huidige sleutel of de bijbehorende waarden. |