유용한 정보

XP 버전의 ActiveX를 Vista 이상버전으로 권한상승시키는 방법...

DevReff 2024. 12. 26. 19:53




728x90
반응형

-.ATL Module로 변경함
1.OCX에 있는 Interface 와 Events 는 그대로 살린다.
2.권한상승이 필요한 부분은 별도의 Interface를 만든다.
a.파일 및 폴더의 복사/삭제
b.HKLM 레지스트리의 제어(등록/수정/삭제)
c.메세지 전송(SendMessage, PostMessage, ...)
3.IsVista() 를 이용하여 윈도우의 버전이 Vista 이전버전인지를 체크하여
이전버전이면 기존의 코드를 그대로 사용하고
그렇지 않으면 권한상승시킨 Object의 Interface를 호출하여 처리한다.

-.레지스트리 등록파일(.rgs)에 다음 항목을 추가한다.
{
val DllSurrogate = s ''
}

Elevation
{
val Enabled = d 1
}
val LocalizedString = s'@ % M OD U L E % , - 1 0 1'

 

-.리소스파일(.rc) 에 다음 항목을 시작부분에 추가한다.
#define APP_MANIFEST 1
#define RT_MANIFEST 24
APP_MANIFEST RT_MANIFEST 파일명.확장자.manifest

-.ID가 101인 스트링 리소스가 있어야 한다.

-.ActiveX Object 변수가 전역변수로 되어 있으면 비스타 이상에서는
윈도우 창이 바뀌어도 그 값이 계속 남아 있어서
새롭게 권한상승된 Object를 구하지 않고 기존의 Object를 사용한다.
이로 인하여 Exe 파일에 다운로드해야할 파일의 정보가 전달되지 않는 문제가 발생한다.
이를 해결하기 위해서는 전역변수로 사용하지 않고
클래스의 멤버변수로 선언을 하여 사용하여야
윈도우창이 바뀔때마다 새로운 Object를 구하게 되고 정상적으로 작동을 한다.

출처: https://use1348.tistory.com/26 [유용한 정보:티스토리]