2010-05-25 3 views
4

Windows 7, C++, VS2008 "runas administrator"(레지스트리에 쓰는 레거시 응용 프로그램)를 사용하여 등록해야하는 COM DLL이 있습니다. 이 DLL은 CoCreateInstance를 사용하여 인스턴스화하는 보고서 응용 프로그램에서 사용됩니다 . 보고서 앱을 관리자로 실행하지 않으면 실패했습니다. 링커 설정을/MANIFESTUAC에서/MANIFESTUAC로 변경하기 전까지 : NO/MANIFESTUAC : NO가 작동하는 이유는 무엇입니까?

누가이 기능이 작동하는지 알려 줄 수 있습니까? 이 설정을 사용하여 UAC를 우회하는 앱을 작성할 수 있다는 의미입니까?

답변

4

설치 프로그램/등록자 앱에 매니페스트가 있고 "상승하지 않음"이라고 표시되면 HKLM에 쓸 때 실패합니다. 매니페스트가 있고 "상승 실행"이라고 말하면 HKLM에 쓰기를 시도하면 성공합니다. 매니페스트가없는 경우 (/ MANIFESTUAC : NO로 요청한 경우) HKLM에 쓰려고하면 가상화 된 위치에 기록됩니다.

보고서 앱을 실행하면 HKLM을 읽을 수는 있지만 유사한 보고서가 적용됩니다. 따라서 보고서 앱에 상승 여부에 상관없이 매니페스트가 있으면 HKLM을 읽습니다. 매니페스트가 없으면 가상화 된 위치를 읽습니다. 두 앱 모두 매니페스트가 있거나 매니페스트가없는 경우 성공한 것입니다.

설치 프로그램에 고도를 요청하는 매니페스트가 있고 보고서 앱에 표고가 필요하지 않은 목록이있는 것이 바람직합니다. 그런 식으로 모든 앱이 진실을 말하고 모든 것이 작동합니다. 게다가 왜 그런 일이 일어나는지 알 수 있습니다.

관련 문제