4. Admin 권한으로 실행되는 프로그램에 대한 정리

- Admin 권한으로 실행되는 프로그램에 대한 정리

1.      계정에 관리자 권한을 부여 한다는 것이(Admin 권한으로 프로그램을 실행한다는 것이) 사용자 계정 컨트롤 경고 창 조차 발생하지 않도록 하는 것 인줄 잘못 알았다.... ㅡㅡㅋ

  

1.      계정별 설치 확인

A.     관리자 계정 사용자 계정 컨트롤의 값이 항상 알림일 때

                i.         OpenSCManager() 함수 사용시 액세스 거부 되어 설치 불가능

B.     사용자 계정

                i.         관리자 계정과 같이 SCM 접근 불가로 설치 불가능

 



2.      계정에 관리자 권한 부여

A.     프로그램에 관리자 권한 부여 이유

                i.         일반 프로그램의 경우 사용자가 프로그램을 실행하였을 때 UAC의 값에 따라 서비스가 실패되는 경우가 발생

               ii.         UAC 확인 창을 명시적으로 띄워 관리자 권한으로 프로그램을 실행 할 경우에 사용자가 권한을 허용할 경우 서비스 설치 가능해짐

B.     Manifest파일 이용 방법과, 직접 코딩하여 관리자 권한을 부여하는 방법이 있음

C.     관리자 계정을 부여하지 않았을 경우 사용자가 수동으로 관리자 권한을 부여 하는 법

                i.         UAC 기능을 중지

1.      제어판 사용자 계정 및 가족 보호 사용자 계정

2.      사용자 계정 컨트롤 설정 변경의 값을 항상 알리지 않음으로 설정

               ii.         실행 파일의 오른쪽 버튼 클릭 후 관리자 권한으로 이 프로그램 실행

              iii.         실행 파일의 속성의 호환성 탭에서 관리자 권한으로 이 프로그램 실행 체크

 



3.      Manifest파일 이용하는 방법과 직접 코딩으로 관리자 권한을 부여 하였을 때 장단점

A.     Manifest 파일 이용

                i.         장점 : 구현 용이, 코드 수정 없이 변경 가능

               ii.         단점 : UAC 실행 수준의 값 만이 가능

B.     직접 코딩 이용

                i.         장점 : 다양한 제어 가능

               ii.         단점 : 코딩 부담



 

4.      직접 코딩으로 계정에 권한 부여

A.     사용자 계정에 권한을 할당하는 함수 생성

                i.         권한에 SeServiceLogonRight 값 적용하여 권한 부여

1.      서비스로서 로그인

B.     프로세스에 권한을 할당하는 함수 생성

                i.         OpenProcessToken()

1.      프로세스의 Access Token을 가져옴

               ii.         LookupPrivilegeValue()

1.      Access TokenPrivilege 목록에 권한이 있는지 살펴 봄

              iii.         AdjustTokenPrivilege()

1.      권한 활성화



5.      Manifest 파일 이용하여 권한을 할당

A.     Manifest 파일을 생성 (ex) add.manifest)

B.     프로젝트 파일에 생성한 Manifest 파일 포함

C.     프로젝트 속성 매니페스트 도구 추가 매니페스트 파일

                i.         생성한 manifest 파일 이름으로 값 설정 (ex) $(ProjectDir)add.manifest

D.     프로젝트 속성 링커 매니페스트 파일 – UAC 실행 수준

                i.         requireAdministrator로 값 설정

E.      프로그램 실행 할 경우

F.      UAC 확인 창을 명시적으로 확인 가능