Token을 이용해서 현재 프로세스가 관리자 권한으로 실행중인지 아닌지를 알아내는 방법 입니다.
UAC가 켜져 있는 상태에서도 "관리자권한 실행여부"의 프롬프트 박스가 나타나지 않게 하면서...
프로그램 스스로 관리자 권한을 획득해서 실행되게 하는 코드를 구현 한다고 할 때...
관리자 권한 실행여부를 체크하는 방법으로 이용해도 되겠죠...
코드가 간단해서 설명은 생략 합니다. (API는 MSDN 문서를 참조하세요)
#include
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD dwSize;
HANDLE hToken;
PTOKEN_MANDATORY_LABEL ptml;
LPWSTR szSid;
OpenProcessToken(
GetCurrentProcess(),
TOKEN_QUERY,
&hToken);
GetTokenInformation(
hToken,
TokenIntegrityLevel,
NULL,
0,
&dwSize);
ptml = (PTOKEN_MANDATORY_LABEL)HeapAlloc(
GetProcessHeap(),
HEAP_ZERO_MEMORY,
dwSize);
GetTokenInformation(
hToken,
TokenIntegrityLevel,
ptml,
dwSize,
&dwSize);
ConvertSidToStringSid(
ptml->Label.Sid,
&szSid);
if(_wcscmpi(szSid, L"S-1-16-12288") == 0)
ShowMessage("현재 관리자 권한으로 실행되고 있음.");
else
ShowMessage("현재 관리자 권한으로 실행되고 있지 않음.");
HeapFree(GetProcessHeap(), 0, (LPVOID)ptml);
LocalFree(szSid);
}
현재 사용자의 SID와 Domain/User 네임을 알아내는 방법은 다음 링크를 참조하세요.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=68426
...
|