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 les vérifications de sécurité sont effectuées lors de l’ouverture des 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
| Nom | Valeur | Description |
|---|---|---|
| Default | 0 | La clé de Registre hérite du mode de son parent. Les vérifications de sécurité sont effectuées lors de la tentative d’accès aux sous-clés ou valeurs, sauf si le parent a été ouvert avec ReadSubTree ou ReadWriteSubTree en mode. |
| ReadSubTree | 1 | Les vérifications de sécurité ne sont pas effectuées lors de l’accès aux sous-clés ou valeurs. Une vérification de sécurité est effectuée lors de la tentative d’ouverture de la clé active, sauf si le parent a été ouvert avec ReadSubTree ou ReadWriteSubTree. |
| ReadWriteSubTree | 2 | Les vérifications de sécurité ne sont pas effectuées lors de l’accès aux sous-clés ou valeurs. Une vérification de sécurité est effectuée lors de la tentative d’ouverture de la clé active, sauf si le parent a é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 l’amélioration du pourcentage.
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 montre quand des vérifications de sécurité sont effectuées, en fonction de la façon dont la clé parente et la clé active sont ouvertes.
| Clé parente ouverte avec | Clé actuelle ouverte avec | Résultat |
|---|---|---|
| Default | Default | Une vérification de sécurité est effectuée lors de l’accès à n’importe quelle valeur dans la clé active ou lors d’une tentative d’accès à une sous-clé. Il s’agit du comportement dans .NET Framework versions 1.0 et 1.1. |
| Default | ReadSubTree | Une vérification de sécurité est effectuée lors de la tentative d’ouverture de la clé active. |
| Default | ReadWriteSubTree | Une vérification de sécurité est effectuée lors de la tentative d’ouverture de la clé active. |
| ReadSubTree | Valeur par défaut 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 vérification de sécurité est effectuée lors de la tentative d’ouverture de la clé active. |
| ReadWriteSubTree | N'importe lequel | Aucune vérification de sécurité n’est effectuée lors de l’ouverture de la clé actuelle ou de ses valeurs. |