RegistryKeyPermissionCheck Enumeración

Definición

Especifica si se deben realizar comprobaciones de seguridad al abrir las claves del Registro y al tener acceso a sus pares de nombre y valor.Specifies whether security checks are performed when opening registry keys and accessing their name/value pairs.

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
Herencia
RegistryKeyPermissionCheck

Campos

Default 0

La clave del Registro hereda el modo de su elemento primario.The registry key inherits the mode of its parent. Se realizan comprobaciones de seguridad al intentar el acceso a las subclaves o valores, a menos que el elemento primario se haya abierto con el modo ReadSubTree o ReadWriteSubTree.Security checks are performed when trying to access subkeys or values, unless the parent was opened with ReadSubTree or ReadWriteSubTree mode.

ReadSubTree 1

No se realizan comprobaciones de seguridad al tener acceso a subclaves o valores.Security checks are not performed when accessing subkeys or values. Se realiza una comprobación de seguridad al intentar abrir la clave actual, a menos que el elemento primario se haya abierto con ReadSubTree o ReadWriteSubTree.A security check is performed when trying to open the current key, unless the parent was opened with ReadSubTree or ReadWriteSubTree.

ReadWriteSubTree 2

No se realizan comprobaciones de seguridad al tener acceso a subclaves o valores.Security checks are not performed when accessing subkeys or values. Se realiza una comprobación de seguridad al intentar abrir la clave actual, a menos que el elemento primario se haya abierto con ReadWriteSubTree.A security check is performed when trying to open the current key, unless the parent was opened with ReadWriteSubTree.

Ejemplos

En el ejemplo de código siguiente se crea una subclave que contiene pares de clave y valor 100 y se cierra.The following code example creates a subkey containing 100 key/value pairs and closes it. En el ejemplo se abre la subclave con default y se registra el tiempo que se tarda en leer todos los valores.The example opens the subkey with Default and records the time it takes to read all the values. A continuación, en el ejemplo se abre la subclave con ReadSubTree y se registra el tiempo que se tarda en leer todos los valores.Then the example opens the subkey with ReadSubTree and records the time it takes to read all the values. Por último, el ejemplo calcula y muestra el porcentaje de mejora.Finally, the example computes and displays the percentage improvement.

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

Comentarios

Cuando una aplicación guarda o recupera un gran número de valores del registro de un conjunto de subclaves, se realizan numerosas comprobaciones de seguridad redundantes.When an application saves or retrieves a large number of registry settings from a set of subkeys, numerous redundant security checks are performed. Esta enumeración especifica cuándo se omitirán las comprobaciones de seguridad en una clave.This enumeration specifies when security checks on a key are to be omitted.

En la tabla siguiente se muestra Cuándo se realizan las comprobaciones de seguridad, en función de la forma en que se abren la clave principal y la clave actual.The following table shows when security checks are performed, based on the way the parent key and the current key are opened.

Clave principal abierta conParent key opened with Clave actual abierta conCurrent key opened with ResultadoResult
DefaultDefault DefaultDefault Se realiza una comprobación de seguridad al obtener acceso a cualquier valor de la clave actual o al intentar tener acceso a una subclave.A security check is performed when accessing any value in the current key, or when attempting to access a subkey. Este es el comportamiento en las versiones 1,0 y 1,1 de .NET Framework.This is the behavior in the .NET Framework versions 1.0 and 1.1.
DefaultDefault ReadSubTreeReadSubTree Se realiza una comprobación de seguridad al intentar abrir la clave actual.A security check is performed when trying to open the current key.
DefaultDefault ReadWriteSubTreeReadWriteSubTree Se realiza una comprobación de seguridad al intentar abrir la clave actual.A security check is performed when trying to open the current key.
ReadSubTreeReadSubTree Default o ReadSubTreeDefault or ReadSubTree No se realizan comprobaciones de seguridad al abrir la clave actual o sus valores.No security checks are performed when opening the current key or its values.
ReadSubTreeReadSubTree ReadWriteSubTreeReadWriteSubTree Se realiza una comprobación de seguridad al intentar abrir la clave actual.A security check is performed when trying to open the current key.
ReadWriteSubTreeReadWriteSubTree CualquieraAny No se realizan comprobaciones de seguridad al abrir la clave actual o sus valores.No security checks are performed when opening the current key or its values.

Se aplica a