RegistryKeyPermissionCheck Énumération

Définition

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
RegistryKeyPermissionCheck

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.

S’applique à