사용자가 해당 키로 작성된 일부 설정을 변경할 수있는 양식을 표시하기 전에 레지스트리의 특정 키에 대한 쓰기 권한이 있는지 확인하려고합니다.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에서 제공되는 권한 시스템을 사용하여 보안을 확인하고 싶습니다.
나는 설명하기가 힘듭니다. 클라이언트 (예 : 대학)에 따라 네트워크 관리자는 해당 위치에 키를 생성하고 해당 레지스트리에 ACL을 사용하여 액세스를 제한하여 학생들이 해당 키에 대한 읽기 전용 액세스 권한을 갖도록합니다. 다른 유형의 설정의 경우 LOCAL_MACHINE에서 설정이 무시되지 않는 한 사용자는 CURRENT_USER에 자체 설정을 작성합니다. –
하지만 그래, 그게 내가 한거야, 내가 쓰기 액세스 OpenSubKey 사용하고 completly RegistryPermission 떨어졌다. 이것이 내가 한 일이므로이 대답을 받아 들일 것입니다. –