Проверка принадлежности учетной записи к группе локальных администраторов.
BOOL WINAPI IsMemberOfAdministrators( HANDLE hUserToken )
{
BOOL bRet = FALSE;
DWORD i = 0;
SID_IDENTIFIER_AUTHORITY sidAuth = SECURITY_NT_AUTHORITY;
LPVOID lpSIDAdmin = NULL;
DWORD dwSize = 0;
if( AllocateAndInitializeSid( &sidAuth,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, &lpSIDAdmin ) )
{
GetTokenInformation( hUserToken,TokenGroups,0,0,&dwSize );
if( dwSize > 0 )
{
TOKEN_GROUPS* ptg = (TOKEN_GROUPS*)LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT,dwSize );
if( ptg != NULL )
{
if( GetTokenInformation( hUserToken,TokenGroups,ptg,dwSize,&dwSize ) )
{
while( ( i < ptg->GroupCount ) && !bRet )
{
if( EqualSid( lpSIDAdmin,ptg->Groups[i].Sid ) )
bRet = TRUE;
else
i++;
}
}
LocalFree( ptg );
}
}
FreeSid( lpSIDAdmin );
}
return bRet;
}