RegistryKeyPermissionCheck Énumération

Définition

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
RegistryKeyPermissionCheck

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.

S’applique à