IT한 것/WINDOWS

Internet Explorer 보호모드에서 일반 사용자로 COM Server 접근불가 문제.

lovian 2011. 7. 20. 10:32
Vista 이상부터는 Integrity Level이란 개념을 모르고서는 개발하기가 어려워졌다.
간단히 말해서 이 레벨이 낮은 프로세스는 높은 설정을 가진 프로세스와의 상호작용(interaction 이랄까)이 어려워지게 된 것이다.

그리하여 이 레벨을 맞추고 정상작동을 하기 위해서 권한 부여 작업이 필요해진 것이다.

이 작업만 하면 될 것 같겠지만, 애석하게도 아닌 상황이 존재한다.

Internet Explorer에서 ActiveX 모듈로 기동한 경우이다.
IE는 기본적으로 Low Level로 작동하기 때문에, 해당 ActiveX도 Low Level을 가지게 된다.
그런데 이 모듈이 Low Level이 할 수 있는 이상의 작업이 필요한 경우에는, 보다 높은 레벨을 가진 모듈에게 요청 하는 수 밖에 없을 것이다. (아니면 말고 ;;)

문제는 위에서 말한 권한은 낮은 곳에서 높은 곳으로 흐르지 않는다. ㅠㅠ
정확한 증상으로는,
높은 레벨로 기동시킨 COM Server를 정상적으로 띄워주지만,
막상 COM Server의 기능을 수행하면, 80070005 (E_ACCESSDENIED)가 발생한다.

다행히도 COM Server는 그 특성상 접근 권한을 변경 할 수 있도록 되어 있다고 한다.

그 답은 COM Server 모듈의 접근 권한을 Interact User도 사용할 수 있도록 변경하는 작업을 수행하면 된다. (구성요소관리자에서 변경할 수 있다.)
이 작업은 수동으로도 해줄 수 있지만, 그것은 너무나도 괴로운 내용이 아닐수 없으므로, 레지스트리를 수정하는 방법이 나을 것 같다.

COM Server 모듈의 설정을 변경하는 방법과, 레지스트리를 수정하는 코드는 이곳 링크에서 확인 할 수 있다.


추가적인 관련 정보는 아래에서 확인 할 수 있다.

How the Integrity Mechanism Is Implemented in Windows Vista

Understanding and Working in Protected Mode Internet Explorer