Windows Vista, IE7 환경의 ActiveX 컨트롤에서 관리자 권한을 주는 영역
Windows Vista, IE7
: Windows Vista 환경에서 IE Process(iexplore.exe)의 UAC 권한은 Low Level 입니다. 그렇기 때문에, 파일생성, 레지스트리 접근, 메시지 등 모든 API 에서 굉장히 많은 제약을 받게 됩니다. 즉, 시스템에 무언가를 하려면 IE 의 기본 Process 로는 할 수 없다는 것 입니다.
문제는 ActiveX 컨트롤은 IE Process 에 붙어서 실행된다는 것 입니다. 그렇기 떄문에, Elevation Moniker 를 사용하여 권한 상승을 하지 않는다면, ActiveX 컨트롤은 시스템에 아무런 영향도 줄 수 없습니다. 물론, 이것이 UAC 의 목적이고, 충분히 납득할만한 일입니다만, 단지 컨트롤의 초기화를 위하여 파일을 설치하거나, 레지스트리를 접근하기 위해서 Elevation 에 관한 일들을 하고 사용자에게 권한 상승 메시지를 띄우는 것은 좋은 방법은 아닙니다. 물론, 사용자에게 아무런 말도 하지 않고 레지스트리에 접근하고 파일을 설치하는 것은 꽤 안좋은 작업일 수 있지만, 그러한 논의는 뒤로하고 일단은 사용자에게 너무 많은 권한 상승 창을 보여주지 않고 깔끔하게 처리하기를 원할 수 도 있을 것입니다.
IE 에서 ActiveX 를 설치하기 위해서는 IE 의 권한 상승창이 나옵니다. 대부분 ActiveX 를 설치하기를 원하는 사람들은 이 권한 상승창에 OK 를 누르게 될 것이고, ActiveX 는 HKEY_CLASSES_ROOT 에 자신의 CLSID 를 쓰게 됩니다. 여기서, HKEY_CLASSES_ROOT 는 시스템 영역이며, 이것을 쓰는 구간은 분명히 Administrator 권한을 가지고 있을 것 입니다. 그렇다면, 이것을 쓰는 부분은 어디일까요?
바로, DllRegisterServer 함수 부분입니다. IE 는 권한을 상승시킨 후 권한이 상승된 프로세서 에서 DllRegisterServer 를 호출합니다. 이 함수 내부에서는 당연히 권한 상승된 효과를 볼 수 있구요.
네, 바로 여기서 원하시는 작업들을 하시면 됩니다. (파일을 쓰건, 레지스트리를 쓰건, 등등…)