2014-01-17 3 views
0

그래서 내가확인 쓰기 권한이

try 
{ 
    RegistryPermission perm = new RegistryPermission(RegistryPermissionAccess.Write, networkRegistryPath); 
    perm.Demand(); 
} 
catch (Exception ex) 
{ 
    throw new ArgumentException("Write Access Denied"); 
} 

rk.SetValue("PnPCapabilities", powerOff[0]); 
networkCards.Add(networkRegistryPath, powerOff[0]); 

아래의 코드를 사용하여 레지스트리에 대한 쓰기 권한이 있는지 확인하고 있습니다 레지스트리에 하지만 그렇게하지 않으면 가치를 씁니다. 그런 다음 레지스트리에 쓸 수 없다는 오류가 발생합니다.

나는 캐치에도 rk.SetValue를 넣었지만 쓸 필요는 없다고 생각합니다. 필자는 쓰기 능력이 있다면 손을 미리 확인하고 있기 때문입니다.

여기에 뭔가가 있습니까?

+5

검사를 중지하십시오. 레지스트리에 씁니다. 실패하면 작성할 수 없습니다. –

+0

Demand'호출 스택의 상위에있는 모든 호출자에게 현재 인스턴스가 지정한 권한이 부여되지 않은 경우 런타임에 SecurityException을 강제 실행합니다. '원하는 시점에 항상 실패 할 것이라고 생각하지 않습니다. – Jonesopolis

답변

1

CAS 액세스 권한이 Windows 액세스 권한과 혼동됩니다. 그들은 완전히 다릅니다. RegistryPermission은 레지스트리에 액세스하기에 충분한 신뢰로 .NET 프로그램이 실행되고 있는지 확인합니다. 이는 사용자 계정에 레지스트리 키에 대한 쓰기 권한을 부여하는 기본 Windows 액세스 권한을 넘어서고 있습니다. .NET 확인은 신뢰할 수없는 코드 인 샌드 박스에 유용합니다. 예를 들어 플러그인으로로드하는 종류입니다.

이 검사는 RegistryKey.SetValue()가 수행 한 기존 검사에 아무 것도 추가하지 않습니다. 이미 작성 및 쓰기 권한을 확인합니다. 그래서 그것을 제거 할 수도 있습니다.

충분한 Windows 액세스 권한을 확인하는 것은 꽤 힘듭니다. RegistrySecurity 클래스에 대한 MSDN 라이브러리 기사에서 몇 가지 예제 코드를 찾을 수 있습니다. 아무 것도 프로그램에 포함시킬 수있는 코드는 없습니다. 그것에 대한 자세한 기사가 있습니다 here, 얼마나 믿을만한 지 전혀 모릅니다.

이것은 꽤 보편적으로 Windows가 검사를 수행하고 예외적 인 경우를 다루는 것으로 처리됩니다. SecurityException을 포착합니다. 그리고 으로 사전에으로 예외가 발생하지 않도록 보장합니다. 따라서 예외적입니다. UAC 고도를 물을 필요가 있습니다. 에 의해 덮여 this answer.

관련 문제