Я хочу знать, является ли пользователь администратором на ПК или нет?Я нашел фрагмент кода, который делает это, но у меня есть проблема с ним.Проблема с этим кодом заключается в том, что эта функция вернется, если пользователь, запустивший процесс, имеет права администратора или нет.Но я хочу спросить, есть ли у конкретного пользователя права администратора или нет.Могу ли я сделать это как-нибудь?Это важно, потому что мое приложение будет работать под учетной записью SYSTEM, поэтому оно всегда будет возвращать, что пользователь является администратором, но я хочу знать, является ли вошедший в систему пользователь администратором или нет?
Фрагмент кода:
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 );
}