관리자 권한 실행 - UAC 고려하기
system/windows 2012. 1. 16. 16:31
- 요약
1. ShellExecute runas
2. 링커 리콰이어
3. 매니페스트
1. ShellExecute runas
2. 링커 리콰이어
3. 매니페스트
- ShellExecute 를 사용 하는 방법
if(IsUserAnAdmin() == FALSE) //프로그램이 관리자 권한인지 알 수 있는 함수
{
//관리자 권한으로 실행 시킨다.
SHELLEXEGUTEINFO si
ZeroMemory(&si, sizeof(SHELLEXECUTEINFO));
si.cbSize = sizeof(SHELLEXECUTEINFO);
si.hwnd = NULL;
si.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI;
si.lpVerb = _T("runas");
si.lpFile = _T("프로그램명");
si.lpParameters = _T("파라미터");
si.nShow = SW_SHOWNORMAL;
si.lpDirectory = NULL;
ShellExecuteEx(&si);
}
- Visual C++ 2008 일 경우 설정
Project > Properties 메뉴를 선택
Linker > Manifest File 항목에서
Enable User Account Control (UAC)를 Yes로 설정하고
UAC Execution Level을 requireAdministrator로 설정한다.
- 매니페스트 파일 생성
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.00.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!—어플리케이션 보안 요구 사항을 식별합니다. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
위의 내용으로 manifest 라는 XML 파일을 생성한다.
name="IsUserAdmin" 여기에 실행파일 명을 명시!!!
level="requireAdministrator" 인 경우 관리자 권한으로 프로그램 실행됨.
level="asInvoker" 인 경우 부모 프로세스와 동일한 토큰으로 실행됨(경험적 결과이나 일반사용자 권한으로 실행됨)
위의 파일을 응용프로그램 안으로 통합하는 방법은 여기 http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx 를 참고하십시오.
- 출처
http://happybird.tistory.com/13
- 출처
http://happybird.tistory.com/13
'system > windows' 카테고리의 다른 글
가상 키 코드(스캔코드) 테이블 (0) | 2012.03.06 |
---|---|
쉽게 쓴 dll (0) | 2012.02.24 |
Segmentation 시발점 찾다가 (0) | 2011.10.31 |
110901 긁적긁적 (0) | 2011.09.01 |
dll injection 기초 (0) | 2010.09.03 |