RegistryRights 열거형
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
레지스트리 개체에 적용할 수 있는 액세스 제어 권한을 지정합니다.
이 열거형은 멤버 값의 비트 조합을 지원합니다.
public enum class RegistryRights
[System.Flags]
public enum RegistryRights
[<System.Flags>]
type RegistryRights =
Public Enum RegistryRights
- 상속
- 특성
필드
| Name | 값 | Description |
|---|---|---|
| QueryValues | 1 | 레지스트리 키에서 이름/값 쌍을 쿼리할 수 있는 권한입니다. |
| SetValue | 2 | 레지스트리 키에서 이름/값 쌍을 만들거나 삭제하거나 설정할 수 있는 권한입니다. |
| CreateSubKey | 4 | 레지스트리 키의 하위 키를 만들 수 있는 권한입니다. |
| EnumerateSubKeys | 8 | 레지스트리 키의 하위 키를 나열할 수 있는 권한입니다. |
| Notify | 16 | 레지스트리 키에 대한 변경 내용 알림을 요청할 수 있는 권한입니다. |
| CreateLink | 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 합니다.