본문 바로가기

개발/C&C++

[API] PROCESS 권한 확인 및 변경 - OpenProcessToken / LookupPrivilegeValue / AdjustTokenPrivileges

728x90
반응형

1. OpenProcessToken

 

- 프로세스와 관련된 토큰(핸들) 열기.

 

BOOL WINAPI OpenProcessToken

(
    HANDLE    ProcessHandle,            // 프로세스에 대한 핸들
    DWORD    DesiredAccess,            // 프로세스에 접근 유형 설정(엑세스 마스크 지정)
    PHANDLE    TokenHandle             // 가져오는 토큰에 대한 핸들 포인터
);


 

ex)

...

HANDLE hToken;

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

...

 

 

2. LookupPrivilegeValue

 

- 지정된 시스템에서 사용 된 로컬 고유 식별자 (LUID)를 검색하여 지정된 권한 이름을 로컬로 표시.

 

BOOL WINAPI LookupPrivilegeValue

(
    LPCTSTR    lpSystemName,        // 시스템의 이름을 지정하는 NULL 로 끝나는 문자열, NULL 일 경우 로컬컴퓨터를 지정.
    LPCTSTR    lpName,                   // Winnt.h 에 정의된대로 권한의 이름을 지정하는 NULL 로 끝나는 문자열의 포인터, 

                                                   // (예를 들어 상수로 SE_SECURITY_NAME 또는 "SeSecurityPrivilege" 를 지정)
    PLUID        lpLuid                      // 첫번째 매개변수로 지정된 시스템에서 Privilege 로 지정된 LUID 를 가져오는 포인터
);

 

ex)

...

PLUID pLuid;

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, pLuid);

...

 

 

 

 

 

 

tkp.PrivilegeCount = 1;

 

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

 

 

 

 

 

 

 

 

 

 

728x90