RegistryKeyPermissionCheck Enum
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger om säkerhetskontroller utförs när registernycklar öppnas och deras namn/värde-par öppnas.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Arv
Fält
| Name | Värde | Description |
|---|---|---|
| Default | 0 | Registernyckeln ärver läget för dess överordnade. Säkerhetskontroller utförs när du försöker komma åt undernycklar eller värden, såvida inte den överordnade filen har öppnats med ReadSubTree eller ReadWriteSubTree läge. |
| ReadSubTree | 1 | Säkerhetskontroller utförs inte vid åtkomst till undernycklar eller värden. En säkerhetskontroll utförs när du försöker öppna den aktuella nyckeln, såvida inte den överordnade nyckeln öppnades med ReadSubTree eller ReadWriteSubTree. |
| ReadWriteSubTree | 2 | Säkerhetskontroller utförs inte vid åtkomst till undernycklar eller värden. En säkerhetskontroll utförs när du försöker öppna den aktuella nyckeln, såvida inte den överordnade nyckeln öppnades med ReadWriteSubTree. |
Exempel
I följande kodexempel skapas en undernyckel som innehåller 100 nyckel/värde-par och stänger den. Exemplet öppnar undernyckeln med Standard och registrerar den tid det tar att läsa alla värden. Sedan öppnar exemplet undernyckeln med ReadSubTree och registrerar den tid det tar att läsa alla värden. Slutligen beräknar exemplet och visar den procentuella förbättringen.
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.
'
Kommentarer
När ett program sparar eller hämtar ett stort antal registerinställningar från en uppsättning undernycklar utförs flera redundanta säkerhetskontroller. Den här uppräkningen anger när säkerhetskontroller på en nyckel ska utelämnas.
Följande tabell visar när säkerhetskontroller utförs, baserat på hur den överordnade nyckeln och den aktuella nyckeln öppnas.
| Överordnad nyckel öppnas med | Aktuell nyckel öppnas med | Result |
|---|---|---|
| Standardinställning | Standardinställning | En säkerhetskontroll utförs vid åtkomst till ett värde i den aktuella nyckeln eller när du försöker komma åt en undernyckel. Det här är beteendet i .NET Framework-versionerna 1.0 och 1.1. |
| Standardinställning | ReadSubTree | En säkerhetskontroll utförs när du försöker öppna den aktuella nyckeln. |
| Standardinställning | ReadWriteSubTree | En säkerhetskontroll utförs när du försöker öppna den aktuella nyckeln. |
| ReadSubTree | Standard eller ReadSubTree | Inga säkerhetskontroller utförs när den aktuella nyckeln eller dess värden öppnas. |
| ReadSubTree | ReadWriteSubTree | En säkerhetskontroll utförs när du försöker öppna den aktuella nyckeln. |
| ReadWriteSubTree | Vilket som helst | Inga säkerhetskontroller utförs när den aktuella nyckeln eller dess värden öppnas. |