RegistryKeyPermissionCheck Énumération
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Spécifie si des vérifications de la sécurité sont effectuées lors de l'ouverture de clés de Registre et de l'accès à leurs paires nom/valeur.
public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck =
Public Enum RegistryKeyPermissionCheck
- Héritage
Champs
Default | 0 | La clé de Registre hérite le mode de son parent. Des vérifications de la sécurité sont effectuées lors d'une tentative d'accès aux sous-clés ou aux valeurs, à moins que le parent n'ait été ouvert en mode ReadSubTree ou ReadWriteSubTree. |
ReadSubTree | 1 | Des vérifications de la sécurité ne sont pas effectuées lors de l'accès aux sous-clés ou aux valeurs. Une vérification de la sécurité est effectuée lors d'une tentative d'ouverture de la clé actuelle, à moins que le parent n'ait été ouvert avec ReadSubTree ou ReadWriteSubTree. |
ReadWriteSubTree | 2 | Des vérifications de la sécurité ne sont pas effectuées lors de l'accès aux sous-clés ou aux valeurs. Une vérification de la sécurité est effectuée lors d'une tentative d'ouverture de la clé actuelle, à moins que le parent n'ait été ouvert avec ReadWriteSubTree. |
Exemples
L’exemple de code suivant crée une sous-clé contenant 100 paires clé/valeur et la ferme. L’exemple ouvre la sous-clé avec Default et enregistre le temps nécessaire pour lire toutes les valeurs. Ensuite, l’exemple ouvre la sous-clé avec ReadSubTree et enregistre le temps nécessaire pour lire toutes les valeurs. Enfin, l’exemple calcule et affiche le pourcentage d’amélioration.
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.
'
Remarques
Lorsqu’une application enregistre ou récupère un grand nombre de paramètres de Registre à partir d’un ensemble de sous-clés, de nombreuses vérifications de sécurité redondantes sont effectuées. Cette énumération spécifie quand les vérifications de sécurité sur une clé doivent être omises.
Le tableau suivant indique quand des vérifications de sécurité sont effectuées, en fonction de la façon dont la clé parente et la clé actuelle sont ouvertes.
Clé parente ouverte avec | Clé actuelle ouverte avec | Résultats |
---|---|---|
Par défaut | Par défaut | Une case activée de sécurité est effectuée lors de l’accès à une valeur dans la clé actuelle ou lors de la tentative d’accès à une sous-clé. Il s’agit du comportement dans les versions 1.0 et 1.1 du .NET Framework. |
Par défaut | ReadSubTree | Une case activée de sécurité est effectuée lors de la tentative d’ouverture de la clé actuelle. |
Par défaut | ReadWriteSubTree | Une case activée de sécurité est effectuée lors de la tentative d’ouverture de la clé actuelle. |
ReadSubTree | Default ou ReadSubTree | Aucune vérification de sécurité n’est effectuée lors de l’ouverture de la clé actuelle ou de ses valeurs. |
ReadSubTree | ReadWriteSubTree | Une case activée de sécurité est effectuée lors de la tentative d’ouverture de la clé actuelle. |
ReadWriteSubTree | Quelconque | Aucune vérification de sécurité n’est effectuée lors de l’ouverture de la clé actuelle ou de ses valeurs. |