Проверка принадлежности учетной записи к группе локальных администраторов.

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;
}

Поделитесь материалом с коллегами и друзьями