RegistryKeyPermissionCheck Enumerazione

Definizione

Specifica se i controlli di sicurezza vengono eseguiti durante l'apertura delle chiavi del Registro di sistema e l'accesso alle coppie nome/valore.

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
Ereditarietà
RegistryKeyPermissionCheck

Campi

Nome Valore Descrizione
Default 0

La chiave del Registro di sistema eredita la modalità del relativo elemento padre. I controlli di sicurezza vengono eseguiti quando si tenta di accedere a sottochiavi o valori, a meno che l'elemento padre non sia stato aperto in ReadSubTree modalità o ReadWriteSubTree .

ReadSubTree 1

I controlli di sicurezza non vengono eseguiti durante l'accesso a sottochiavi o valori. Quando si tenta di aprire la chiave corrente viene eseguito un controllo di sicurezza, a meno che l'elemento padre non sia stato aperto con ReadSubTree o ReadWriteSubTree.

ReadWriteSubTree 2

I controlli di sicurezza non vengono eseguiti durante l'accesso a sottochiavi o valori. Quando si tenta di aprire la chiave corrente, viene eseguito un controllo di sicurezza, a meno che l'elemento padre non sia stato aperto con ReadWriteSubTree.

Esempio

Nell'esempio di codice seguente viene creata una sottochiave contenente 100 coppie chiave/valore e la chiude. L'esempio apre la sottochiave con Default e registra il tempo necessario per leggere tutti i valori. L'esempio apre quindi la sottochiave con ReadSubTree e registra il tempo necessario per leggere tutti i valori. Infine, l'esempio calcola e visualizza il miglioramento percentuale.

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.
'

Commenti

Quando un'applicazione salva o recupera un numero elevato di impostazioni del Registro di sistema da un set di sottochiavi, vengono eseguiti numerosi controlli di sicurezza ridondanti. Questa enumerazione specifica quando i controlli di sicurezza di una chiave devono essere omessi.

Nella tabella seguente viene illustrato quando vengono eseguiti i controlli di sicurezza, in base alla modalità di apertura della chiave padre e della chiave corrente.

Chiave padre aperta con Chiave corrente aperta con Result
Predefinito Predefinito Quando si accede a un valore nella chiave corrente o quando si tenta di accedere a una sottochiave, viene eseguito un controllo di sicurezza. Questo è il comportamento in .NET Framework versioni 1.0 e 1.1.
Predefinito Readsubtree Quando si tenta di aprire la chiave corrente, viene eseguito un controllo di sicurezza.
Predefinito ReadWriteSubTree Quando si tenta di aprire la chiave corrente, viene eseguito un controllo di sicurezza.
Readsubtree Valore predefinito o ReadSubTree Non vengono eseguiti controlli di sicurezza quando si apre la chiave corrente o i relativi valori.
Readsubtree ReadWriteSubTree Quando si tenta di aprire la chiave corrente, viene eseguito un controllo di sicurezza.
ReadWriteSubTree Qualunque Non vengono eseguiti controlli di sicurezza quando si apre la chiave corrente o i relativi valori.

Si applica a