2009-08-31 5 views
1

사용자가 해당 키로 작성된 일부 설정을 변경할 수있는 양식을 표시하기 전에 레지스트리의 특정 키에 대한 쓰기 권한이 있는지 확인하려고합니다.RegistryPermission은 어떻게 작동합니까?

코드는 내가 읽기 전용 액세스 한 사용자를 사용하여 응용 프로그램을 실행하고

public bool CanWrite() 
{ 
    string key = @"HKEY_LOCAL_MACHINE\SOFTWARE\MyHaccpPlan, Inc.\2.0"; 

    try 
    { 
     RegistryPermission permission = new RegistryPermission(RegistryPermissionAccess.Write, key); 
     permission.Demand(); 
     return true; 
    } 
    catch(SecurityException) 
    { 
     return false; 
    } 
} 

명확에 대한 소독. 문제는이 함수는 사용자가 쓰기 권한이없는 경우에도 true를 반환한다는 것입니다.

나중에

Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyHaccpPlan, Inc.\2.0", "Language", "fr-CA"); 

같은 호출은 UnauthorizedAccessException 실패합니다.

어떻게 레지스트리에 쓰기 전에 레지스트리 권한을 올바르게 확인합니까?

편집

나는 현재 사용자가 쓸 수 싶지 않아요. 나는이 레지스트리 엔트리를 소프트웨어의 기능을 사용할 수 없게하는 플래그로 사용하고자한다. 그러나 사용자가 관리자 인 경우 소프트웨어에서이 기능을 허용해야합니다. 목표는 네트워크 관리자가 설정을 미리 설정할 수 있고 사용자가 설정을 변경할 수 없게하는 것입니다.

실제로 작성하고 충돌을 기다리는 것 외에 가능한 경우 .NET에서 제공되는 권한 시스템을 사용하여 보안을 확인하고 싶습니다.

답변

1

; 코드에서 명시 적으로 검사해야합니다. 이 방법으로 사용자는 여전히 레지스트리 편집기를 사용하고 모든 액세스 검사를 건너 뛸 수 있습니다.

대신 사용자가 키에 쓸 수있는 것을 제한하려면 적절한 ACL을 사용해야합니다.

키에 액세스 할 수 있는지 여부를 런타임에 테스트하려면 쓰기 위해 키를 열어 SecurityException을 catch해야합니다 (이 경우 응용 프로그램을 실행하는 사용자는 키를 수정할 수있는 권한이 없습니다).).

+0

나는 설명하기가 힘듭니다. 클라이언트 (예 : 대학)에 따라 네트워크 관리자는 해당 위치에 키를 생성하고 해당 레지스트리에 ACL을 사용하여 액세스를 제한하여 학생들이 해당 키에 대한 읽기 전용 액세스 권한을 갖도록합니다. 다른 유형의 설정의 경우 LOCAL_MACHINE에서 설정이 무시되지 않는 한 사용자는 CURRENT_USER에 자체 설정을 작성합니다. –

+0

하지만 그래, 그게 내가 한거야, 내가 쓰기 액세스 OpenSubKey 사용하고 completly RegistryPermission 떨어졌다. 이것이 내가 한 일이므로이 대답을 받아 들일 것입니다. –

0

mmm Lutz Roeder 's Reflector와 같은 도구를 사용하면 Registry.SetValue Method의 내용을 볼 수 있습니다.

이 찾고 그것에 조금, 그것은 코드의 다음 줄 함께 할 것 같다 :

레지스트리에 액세스 제어를 관리하기위한 .NET 코드 액세스 보안에 의존해서는 안
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); 
+0

이 확인은 키가 원격 키인 경우에만 수행됩니다. –