본문 바로가기
IT-개발,DB

[개발] 관리자(Administrator) 권한으로 프로그램 실행하기

by SB리치퍼슨 2010. 8. 20.


XP 이상 O/S는 사용자 계정 컨트롤(UAC) 라는게 기본설정으로 존제한다.
강화된 보안정책으로 어떠한 행동을 할때 권한을 얻고 해라 라는 형식이다.
일반적으로 어느정도 O/S를 다룰줄 아는 사람은 이부분을 권한 설정을 끈다.
하지만 그렇게 못하는 사람도 있기 때문에 프로그램을 만들때
관리자 권한을 획득한 상태로 프로그램을 실행 시켜야한다.

- 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  를 참고하십시오

반응형

댓글