#include <sddl.h>
bool __fastcall IsAdministratorPrivilege(void)
{
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);
try {
::GetTokenInformation(hToken, TokenIntegrityLevel, ptml, dwSize, &dwSize);
::ConvertSidToStringSid(ptml->Label.Sid, &szSid);
try {
return (_wcscmpi(szSid, __TEXT("S-1-16-12288")) == 0);
} __finally {
::LocalFree(szSid);
}
} __finally {
::HeapFree(::GetProcessHeap(), 0, (LPVOID)ptml);
}
return false;
}
BCB6 에서는 PTOKEN_MANDATORY_LABEL 과 ToeknIntegrityLevel 이 없다.
다음 코드를 앞에 추가하면 잘 동작할 것이다.
typedef struct _TOKEN_MANDATORY_LABEL {
SID_AND_ATTRIBUTES Label;
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
#define TokenIntegrityLevel ((TOKEN_INFORMATION_CLASS)25)
'Windows > RAD Studio' 카테고리의 다른 글
[Del] Compiler Directive (0) | 2014.12.08 |
---|---|
WMI (Windows Management Instruments) 이용 쉽게하기. (하드웨어 정보) (0) | 2014.01.09 |
[BAT] 관리자 권한 확인 (0) | 2013.07.09 |
enum 값 문자열 출력 (0) | 2013.07.05 |
수학함수로 숫자 길이 구하기 (0) | 2013.01.22 |