/************************************************************************/
/* 函数说明:判断有无Administrator的权限
/* 参 数:无
/* 返 回 值:成功返回TRUE,,否则返回FALSE
/* By:Koma 2009.07.28 23:30
/************************************************************************/
BOOL IsAdmin()
{
HANDLE hAccessToken;
BYTE * InfoBuffer = new BYTE[1024];
PTOKEN_GROUPS ptgGroups;
DWORD dwInfoBufferSize;
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))
{
delete InfoBuffer;
return FALSE;
}
if(!GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024,&dwInfoBufferSize))
{
delete InfoBuffer;
CloseHandle(hAccessToken);
return FALSE;
}
CloseHandle(hAccessToken);
if(!AllocateAndInitializeSid(&siaNtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,0,0,0,0,0,
&psidAdministrators))
{
delete InfoBuffer;
return FALSE;
}
ptgGroups = (PTOKEN_GROUPS)InfoBuffer;
for(UINT i = 0; i < ptgGroups->GroupCount; i++)
{
if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))
{
FreeSid(psidAdministrators);
delete InfoBuffer;
return TRUE;
}
}
return FALSE;