#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;
}
转自:http://hi.baidu.com/logopc/item/6c9f7c15859220f9ddeecaf8
浙公网安备 33010602011771号