bool levelup_privileges() if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { if (LookupPrivilegeValue(NULL, "SeDebugPrivilege", &luid)) { tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid = luid; tp.PrivilegeCount = 1; AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); return true; } } return false; } |
※OpenProcessToken : 프로세스의 토큰핸들값을 획득한다. (획득한 토큰을 통하여 권한을 변경한다.)
BOOL WINAPI OpenProcessToken( |
- ProcessHandle : 접근하고자하는 프로세스 핸들
- DesiredAccess : 토큰을 접근을 위한 접근권한
- TokenHandle : 토큰핸들
※LookupPrivilegeValue : 명시된 권한을 표현할 LUID를 검색 (LUID : 특정권한을 표현하는 구조체)
BOOL WINAPI LookupPrivilegeValue( |
- lpSystemName : 명시된 특권을 찾기위한 시스템이름
- lpName : 특권이름
- lpLuid : 검색된 LUID
=>SeDebugPrivilege : 시스템 레벨 디버깅을 위한 권한. 로컬관리자 계정에만 주어지는 권한
※AdjustTokenPrivileges : 권한을 조정한다.
BOOL WINAPI AdjustTokenPrivileges( |
- TokenHandle : 토큰핸들
- DisableAllPrivileges : 명시된 특권을 enable/disable를 결정(1 : disable, 0 : enable)
- NewState : 새로 설정할 권한
- BufferLength : PreviousState의 버퍼사이즈
- PreviousState : 이전 권한을 저장
- ReturnLength : 이전 권한의 사이즈를 저장
'Programming > System Programming' 카테고리의 다른 글
[Driver]프로세스/DLL로드 및 소멸 모니터링 프로그래밍 (0) | 2017.07.06 |
---|---|
[WIN32 / C]모든 프로세스 모듈 스캔 코드 (0) | 2017.05.04 |
[WIN32 / C]프로세스 하위 Thread Entry Point (EP) 코드 출력 (0) | 2017.05.02 |
[WIN32 / C] CreateEvent를 이용한 투표 프로그래밍!!(Thread순서동기화) (0) | 2017.04.01 |
[WIN32/C] Driver Loader (0) | 2017.03.27 |
댓글