RegistryRights 열거형

정의

레지스트리 개체에 적용할 수 있는 액세스 제어 권한을 지정합니다.

이 열거형은 멤버 값의 비트 조합을 지원합니다.

public enum class RegistryRights
[System.Flags]
public enum RegistryRights
[<System.Flags>]
type RegistryRights = 
Public Enum RegistryRights
상속
RegistryRights
특성

필드

Name Description
QueryValues 1

레지스트리 키에서 이름/값 쌍을 쿼리할 수 있는 권한입니다.

SetValue 2

레지스트리 키에서 이름/값 쌍을 만들거나 삭제하거나 설정할 수 있는 권한입니다.

CreateSubKey 4

레지스트리 키의 하위 키를 만들 수 있는 권한입니다.

EnumerateSubKeys 8

레지스트리 키의 하위 키를 나열할 수 있는 권한입니다.

Notify 16

레지스트리 키에 대한 변경 내용 알림을 요청할 수 있는 권한입니다.

32

시스템 사용을 위해 예약되어 있습니다.

Delete 65536

레지스트리 키를 삭제할 수 있는 권한입니다.

ReadPermissions 131072

레지스트리 키에 대한 액세스 규칙 및 감사 규칙을 열고 복사할 수 있는 권한입니다.

WriteKey 131078

레지스트리 키에서 이름/값 쌍을 만들고, 삭제하고, 하위 키를 만들거나 삭제하고, 변경 알림을 요청하고, 하위 키를 열거하고, 액세스 규칙 및 감사 규칙을 읽을 수 있는 권한입니다.

ExecuteKey 131097

ReadKey와 동일합니다.

ReadKey 131097

레지스트리 키의 이름/값 쌍을 쿼리하고, 변경 알림을 요청하고, 하위 키를 열거하고, 액세스 규칙 및 감사 규칙을 읽을 수 있는 권한입니다.

ChangePermissions 262144

레지스트리 키와 연결된 액세스 규칙 및 감사 규칙을 변경할 수 있는 권한입니다.

TakeOwnership 524288

레지스트리 키의 소유자를 변경할 수 있는 권한입니다.

FullControl 983103

레지스트리 키를 완전히 제어하고 액세스 규칙 및 감사 규칙을 수정할 수 있는 권한입니다.

예제

다음 코드 예제에서는 열거형의 RegistryRights 사용을 보여 줍니다. 이 코드는 테스트 키를 만들어 현재 사용자 ReadKey 및 Delete 액세스 권한을 허용하지만 ChangePermissions 및 WriteKey 권한을 거부합니다. 이러한 권한에 따라 키를 조작하려는 후속 시도가 성공하거나 실패합니다.

키를 삭제하기 전에 코드가 일시 중지됩니다. 레지스트리 편집기(Regedit.exe 또는 Regedt32.exe)로 전환하고 레지스트리 편집기를 사용하여 키에 액세스할 때 동일한 액세스 권한이 적용되는지 확인할 수 있습니다.

이 예제는 명령줄에서 RunAs 를 사용하여 레지스트리 편집기 및 샘플 코드를 관리자 권한이 없는 로컬 사용자로 실행하는 경우에 가장 적합합니다. 예를 들어 TestUser라는 로컬 사용자를 정의한 경우 명령은 runas /user:TestUser cmd 레지스트리 편집기를 실행한 다음 예제 코드를 실행할 수 있는 명령 창을 엽니다.

using System;
using System.Reflection;
using System.Security;
using System.Security.AccessControl;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete the example key if it exists.
        try
        {
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key has been deleted.");
        }
        catch (ArgumentException)
        {
            // ArgumentException is thrown if the key does not exist. In
            // this case, there is no reason to display a message.
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
            return;
        }

        string user = Environment.UserDomainName + "\\" + Environment.UserName;

        RegistrySecurity rs = new RegistrySecurity();

        // Allow the current user to read and delete the key.
        //
        rs.AddAccessRule(new RegistryAccessRule(user,
            RegistryRights.ReadKey | RegistryRights.Delete,
            InheritanceFlags.None,
            PropagationFlags.None,
            AccessControlType.Allow));

        // Prevent the current user from writing or changing the
        // permission set of the key. Note that if Delete permission
        // were not allowed in the previous access rule, denying
        // WriteKey permission would prevent the user from deleting the
        // key.
        rs.AddAccessRule(new RegistryAccessRule(user,
            RegistryRights.WriteKey | RegistryRights.ChangePermissions,
            InheritanceFlags.None,
            PropagationFlags.None,
            AccessControlType.Deny));

        // Create the example key with registry security.
        RegistryKey rk = null;
        try
        {
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample",
                RegistryKeyPermissionCheck.Default, rs);
            Console.WriteLine("\r\nExample key created.");
            rk.SetValue("ValueName", "StringValue");
        }
        catch (Exception ex)
        {
            Console.WriteLine("\r\nUnable to create the example key: {0}", ex);
        }
        if (rk != null) rk.Close();

        rk = Registry.CurrentUser;

        RegistryKey rk2;

        // Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", false);
        Console.WriteLine("\r\nRetrieved value: {0}", rk2.GetValue("ValueName"));
        rk2.Close();

        // Attempt to open the key with write access.
        try
        {
            rk2 = rk.OpenSubKey("RegistryRightsExample", true);
        }
        catch (SecurityException ex)
        {
            Console.WriteLine("\nUnable to write to the example key." +
                " Caught SecurityException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        // Attempt to change permissions for the key.
        try
        {
            rs = new RegistrySecurity();
            rs.AddAccessRule(new RegistryAccessRule(user,
                RegistryRights.WriteKey,
                InheritanceFlags.None,
                PropagationFlags.None,
                AccessControlType.Allow));
            rk2 = rk.OpenSubKey("RegistryRightsExample", false);
            rk2.SetAccessControl(rs);
            Console.WriteLine("\r\nExample key permissions were changed.");
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("\nUnable to change permissions for the example key." +
                " Caught UnauthorizedAccessException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        Console.WriteLine("\r\nPress Enter to delete the example key.");
        Console.ReadLine();

        try
        {
            rk.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key was deleted.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
        }

        rk.Close();
    }
}

/* This code example produces the following output:

Example key created.

Retrieved value: StringValue

Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.

Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.

Press Enter to delete the example key.

Example key was deleted.
 */
Imports System.Reflection
Imports System.Security
Imports System.Security.AccessControl
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete the example key if it exists.
        Try
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key has been deleted.")
        Catch ex As ArgumentException
            ' ArgumentException is thrown if the key does not exist. In
            ' this case, there is no reason to display a message.
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
            Return
        End Try

        Dim user As String = Environment.UserDomainName & "\" & Environment.UserName

        Dim rs As New RegistrySecurity()

        ' Allow the current user to read and delete the key.
        '
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.ReadKey Or RegistryRights.Delete, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Allow))

        ' Prevent the current user from writing or changing the
        ' permission set of the key. Note that if Delete permission
        ' were not allowed in the previous access rule, denying
        ' WriteKey permission would prevent the user from deleting the 
        ' key.
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.WriteKey Or RegistryRights.ChangePermissions, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Deny))

        ' Create the example key with registry security.
        Dim rk As RegistryKey = Nothing
        Try
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", _
                RegistryKeyPermissionCheck.Default, rs)
            Console.WriteLine(vbCrLf & "Example key created.")
            rk.SetValue("ValueName", "StringValue")
        Catch ex As Exception
            Console.WriteLine(vbCrLf & "Unable to create the example key: {0}", ex)
        End Try

        If rk IsNot Nothing Then rk.Close()

        rk = Registry.CurrentUser

        Dim rk2 As RegistryKey
        
        ' Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", False)
        Console.WriteLine(vbCrLf & "Retrieved value: {0}", rk2.GetValue("ValueName"))
        rk2.Close()

        ' Attempt to open the key with write access.
        Try
            rk2 = rk.OpenSubKey("RegistryRightsExample", True)
        Catch ex As SecurityException
            Console.WriteLine(vbCrLf & "Unable to write to the example key." _
                & " Caught SecurityException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        ' Attempt to change permissions for the key.
        Try
            rs = New RegistrySecurity()
            rs.AddAccessRule(new RegistryAccessRule(user, _
                RegistryRights.WriteKey, _
                InheritanceFlags.None, _
                PropagationFlags.None, _
                AccessControlType.Allow))
            rk2 = rk.OpenSubKey("RegistryRightsExample", False)
            rk2.SetAccessControl(rs)
            Console.WriteLine(vbCrLf & "Example key permissions were changed.")
        Catch ex As UnauthorizedAccessException
            Console.WriteLine(vbCrLf & "Unable to change permissions for the example key." _
                & " Caught UnauthorizedAccessException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        Console.WriteLine(vbCrLf & "Press Enter to delete the example key.")
        Console.ReadLine()

        Try
            rk.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key was deleted.")
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
        End Try

        rk.Close()
    End Sub
End Class

' This code produces the following output:
'
'Example key created.
'
'Retrieved value: StringValue
'
'Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.
'
'Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.
'
'Press Enter to delete the example key.
'
'Example key was deleted.

설명

개체를 RegistryRights 만들 RegistrySecurity 때 열거형을 사용하여 레지스트리 액세스 권한을 지정합니다. 레지스트리 키에 액세스 권한을 적용하려면 먼저 개체에 개체를 RegistryAccessRule 추가 RegistrySecurity 한 다음 메서드 또는 메서드의 적절한 오버로드를 사용하여 RegistrySecurity 개체를 키에 RegistryKey.SetAccessControl 연결 RegistryKey.CreateSubKey 합니다.

적용 대상

추가 정보