태그 보관물: vista

드라이버 로딩 권한 설정

미니필터 드라이버가 XP에서는 로딩이 잘 되는데 비스타에서 테스트 해보니 FilterLoad() 함수가 0x80070522(ERROR_PRIVILEGE_NOT_HELD) 에러를 내며 로딩이 실패(물론 관리자 권한으로 실행해도) 하네요.
WDK 도움말을 잘 읽어보니..(역시 문서를 잘 읽어야 되는데.. 쩝) FilterLoad() 함수 호출자는 SeLoadDriverPrivilege (SE_LOAD_DRIVER_PRIVILEGE) 을 가져야 한다고 적혀있습니다.

그래서 프로그램이 필터드라이버 로딩전에 SeLoadDriverPrivilege 권한을 Enable 하도록 하는 함수를 만들었습니다.

이 함수를 FilterLoad() 함수전에 아래와 같이 SeLoadDriverPrivilege 를 인자로 해서 호출해 주면 됩니다.

※ 주의 : 코드는 실제 적용 코드에서 블로깅을 위해 수정된 것입니다. 사용하실때는 코드 검증및 테스트를 하시고 사용하시기 바랍니다.

Vista 에서 프로그램을 관리자 권한으로 실행하도록 하는 방법

개발된 프로그램이 관리자 권한이 필요한 것이라면 Vista 에서 실행시 에러가 뜨는 경우가 있습니다.
이때 해결할 수 있는 방법은 Vista 의 UAC 기능을 죽이거나  탐색기에서 해당 프로그램에 오른쪽 마우스 클릭후 ‘관리자 권한으로 실행’ 을 하는 것입니다.
이러한 것은 일반 사용자에게 불편을 줄 수 있으므로 처음부터 관리자 권한으로 실행되는 프로그램을 개발할 필요가 있습니다.


1. 관리자 권한을 요구하는 manifest 파일 만들기
 
예를 들어 Test.exe 라는 프로그램을 만든다고 할 때 이래와 같이 우선 Test.exe.manifest 라는 파일을 작성합니다.
참고로 name 에는 프로그램 이름을 적으시면 되고, description에는 프로그램 설명을 적으시면 됩니다.


2. 프로그램에 manifest 파일 추가 방법


  (1) 방법 1

Visaul Studio의 프로젝트 속성 -> 구성 속성 -> 매니페스트 도구 -> 입력 및 출력 에 보면 추가 매니페스트 파일 있는데 여기다가 manifest 파일이 있는 경로를 적어줍니다.


예) ../Bin/Test.exe.manifest

 이렇게 한 후 빌드를 하면 경고가 하나 뜨지만 빌드가 잘 되는 것을 확인 할 수 있습니다.


  (2) 방법 2

실행 파일 먼저 빌드되고 나중에 manifest 파일을 빌드해서 넣는 방법은 프로젝트 속성 -> 구성 속성 -> 빌드 이벤트 -> 빌두 후 이벤트에 보면 명령줄이 있는데 여기에 아래와 같이 작성하면 됩니다.


mt.exe -manifest Test.exe.manifest -outputresource:Test.exe;#1


3. 결론


빌드가 된 실행파일을 비스타에서 보면 아이콘 옆에 관리자 권한이 필요한 프로그램이라는 표시로 방패가 추가된 것을 보실수 있습니다. 위 두가지 방법 말고도 manifest 파일을 프로젝트에 추가시키는 방법이 하나가 더 있는데, 그에 대해서는 http://himskim.egloos.com/1524155 를 참조하십시오.