Вы можете использовать NetUserGetLocalGroups и NetUserGetInfo для retrive информации и проверить значение usri1_priv
в USER_INFO_1 структуры.
Я думаю, что что-то подобное должно вам начать (из MSDN):
BOOL IsUserAdmin(VOID)
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group. --
*/
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if(b)
{
if (!CheckTokenMembership(NULL, AdministratorsGroup, &b))
{
b = FALSE;
}
FreeSid(AdministratorsGroup);
}
return(b);
}
Вы также можете ознакомиться с этой page (старая его, но он должен работать)
Вы обрисовал в общих чертах две задачи : 1) Получить список учетных записей пользователей - http://stackoverflow.com/questions/7593333/how-to-get-all-windows-user-account-name?rq=1 и 2) Посмотрите, является ли пользователь местный администратор http://stackoverflow.com/questions/3064217/identifying-if-a-user-is-in-the-local-administrators-group?rq=1. По крайней мере, сделайте некоторое фундаментальное исследование самостоятельно, чтобы найти ответ, прежде чем публиковать здесь. Благодарю. –
Имейте в виду, что группа «Администраторы» может содержать другие группы. В зависимости от ваших потребностей вам может потребоваться перечислить их итеративно. (Также могут быть странные краевые случаи, например, если sysadmin глупо добавил INTERACTIVE в группу «Администраторы», я не уверен, что произойдет.) –