Sdílet prostřednictvím


RegistryKeyPermissionCheck Výčet

Definice

Určuje, jestli se při otevírání klíčů registru a přístupu k jejich párům název/hodnota budou provádět kontroly zabezpečení.

public enum class RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck = 
Public Enum RegistryKeyPermissionCheck
Dědičnost
RegistryKeyPermissionCheck

Pole

Default 0

Klíč registru dědí režim nadřazeného objektu. Kontroly zabezpečení se provádějí při pokusu o přístup k podklíčům nebo hodnotám, pokud nebyl nadřazený objekt otevřen v ReadSubTree režimu nebo ReadWriteSubTree .

ReadSubTree 1

Při přístupu k podklíčům nebo hodnotám se neprovádí kontroly zabezpečení. Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení, pokud nebyl nadřazený klíč otevřen pomocí ReadSubTree nebo ReadWriteSubTree.

ReadWriteSubTree 2

Při přístupu k podklíčům nebo hodnotám se neprovádí kontroly zabezpečení. Kontrola zabezpečení se provede při pokusu o otevření aktuálního klíče, pokud nadřazený objekt nebyl otevřen pomocí ReadWriteSubTree.

Příklady

Následující příklad kódu vytvoří podklíč obsahující 100 párů klíč/hodnota a zavře ho. V příkladu se otevře podklíč s hodnotou Default a zaznamená se doba potřebná ke čtení všech hodnot. Potom příklad otevře podklíč s ReadSubTree a zaznamená čas, který trvá čtení všech hodnot. Nakonec příklad vypočítá a zobrazí procentuální zlepšení.

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

Poznámky

Když aplikace uloží nebo načte velký počet nastavení registru ze sady podklíčů, provede se řada redundantních kontrol zabezpečení. Tento výčet určuje, kdy mají být vynechány kontroly zabezpečení klíče.

Následující tabulka ukazuje, kdy se provádějí kontroly zabezpečení na základě způsobu otevření nadřazeného a aktuálního klíče.

Nadřazený klíč otevřený pomocí Aktuální klíč otevřen pomocí Výsledek
Výchozí Výchozí Kontrola zabezpečení se provádí při přístupu k libovolné hodnotě v aktuálním klíči nebo při pokusu o přístup k podklíči. Toto je chování v rozhraní .NET Framework verze 1.0 a 1.1.
Default Readsubtree Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení.
Default ReadWriteSubTree Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení.
Readsubtree Výchozí nebo ReadSubTree Při otevření aktuálního klíče nebo jeho hodnot se neprovádí žádné kontroly zabezpečení.
Readsubtree ReadWriteSubTree Při pokusu o otevření aktuálního klíče se provede kontrola zabezpečení.
ReadWriteSubTree Všechny Při otevření aktuálního klíče nebo jeho hodnot se neprovádí žádné kontroly zabezpečení.

Platí pro