-
Windows Vista 이상에서의 UAC 처리dev/.NET 2010. 7. 30. 17:46
http://dalbong2.net/entry/UAC-User-Account-Control
우선 UAC 에 관한 한글로된 간략한 설명은 위의 링크를 참고하면 이해가 된다.
링크의 글중 [그림] elevation 발생 아래부분의 내용을 보면 하나의 프로세스가 실행된 후에는 권한 토큰이 변할 수 없다고 되어있다. 프로세스 실행시에 권한 상승을 하여 실행하던지 하게 되는것이다.
나는 프로그램 내에서 관리자 권한이 필요한 동작이 있다면 해당 동작이 실행되기 전에 UAC 창을 열어 관리자 토큰(full access token)을 얻고 동작을 실행한 후 관리자 토큰을 반납하고 표준 사용자 토큰으로 돌아가는것이 가능할줄 알았는데 잘못 알고있었던것이다. 다른 프로그램들도 그렇게 보이도록 만들었을 것이다.
그래서 코드프로젝트같은 곳을 찾아봐도 내가 기존에 될것이라고 생각하던 코드의 예제는 없고,
관리자 권한이 필요한 동작에서 관리자 권한을 요청하면서 자신의 프로세스를 한번더 실행하고 기존의 프로세스는 종료하는 예제들만 있었던것이다.
http://www.codeproject.com/KB/vista-security/UACSelfElevation.aspx
http://www.codeproject.com/KB/vista-security/UAC_Shield_for_Elevation.aspx
그리하여 다시 좀더 검색해서 찾아낸것이 다음 링크.
http://code.msdn.microsoft.com/elevatedprivilegeuac위의 코드프로젝트와 방식은 거의 동일하고 하나의 차이점은, 관리자 권한이 필요한 동작에서 자신의 프로세스를 실행할때 해당 동작에 필요한 인자를 넘겨주면서 실행하게 하고 자신은 종료하지 않는다는 것이다.
따지고 보면 둘다 똑같긴 하지만 나중에 응용하는것은 후자의 방법대로 가는것이 맞을것 같다.