#include <windows.h> #include <stdio.h> BOOL IsAdmin(void); int main(int argc, char* argv[]) { if (IsAdmin()) printf("IsAdmin - TRUE"); else printf("IsAdmin - FALSE"); return 0; } BOOL IsAdmin(void) { HANDLE hAccessToken; BYTE *InfoBuffer; PTOKEN_GROUPS ptgGroups; DWORD dwInfoBufferSize; PSID psidAdministrators; SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY; UINT i; BOOL bRet = FALSE; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken)) goto cleanup; InfoBuffer = new BYTE[1024]; if(!InfoBuffer) goto cleanup; bRet = GetTokenInformation(hAccessToken, TokenGroups, InfoBuffer, 1024, &dwInfoBufferSize); CloseHandle( hAccessToken ); if(!bRet) goto cleanup; if(!AllocateAndInitializeSid(&siaNtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0,0,0,0,0,0, &psidAdministrators)) goto cleanup; bRet = FALSE; ptgGroups = (PTOKEN_GROUPS)InfoBuffer; for(i=0;i<ptgGroups->GroupCount;i++) { if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid)) { bRet = TRUE; break; } } FreeSid(psidAdministrators); cleanup: if (InfoBuffer) delete InfoBuffer; return bRet; }