BOOL IsAdministrator(void)
{
BOOL bIsElevated = FALSE;
HANDLE hToken = NULL;
if (!IsWindows7OrGreater()) {
return FALSE;
}
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
struct {
DWORD TokenIsElevated;
}te;
DWORD dwReturnLength = 0;
if (GetTokenInformation(hToken, (_TOKEN_INFORMATION_CLASS)20, &te, sizeof(te), &dwReturnLength)) {
if (dwReturnLength == sizeof(te)) {
bIsElevated = te.TokenIsElevated;
}
}
CloseHandle(hToken);
}
return bIsElevated;
}