Для небольшой утилиты приложение, которое я пишу на работе, я следующий код, чтобы определить, является ли текущая учетная запись пользователя является локальным или администратором домена:Укажите, к какой группе (ов) принадлежит текущая учетная запись пользователя?
WCHAR wszUser[UNLEN];
GetEnvironmentVariableW(L"username", wszUser, UNLEN);
#ifndef _DEBUG
if (StrCmpIW(wszUser, L"Administrator") != 0)
{
MessageBoxW(0, L"This program can only be run as Administrator.", L"Error", MB_OK | MB_ICONSTOP);
return 0;
}
#endif
Это работает в нашем случае прямо сейчас, потому что:
- учетной запись администратора домена у нас является встроенным учетной записью администратора
- у нас нет никаких других учетных записей администратора домена.
Однако я понимаю, что это плохое решение, потому что в будущем мы могли бы добавить другие учетные записи администратора домена. Есть ли способ определить с помощью API Windows, является ли учетная запись пользователя, из которой выполняется процесс, принадлежит либо группе «Администраторы домена», либо BUILTIN\Administrators
, или нет?
Это не проблема безопасности, поскольку приложение фактически не сможет ничего использовать, если оно не работает как администратор, это просто для надежности.
Правильное решение в этом случае - использовать параметр компоновщика '/ MANIFESTUAC: level = requireAdministrator', или если у вас уже есть манифест, добавьте запись' requestExecutionLevel' с 'level =" requireAdministrator "' [ как описано здесь] (https://www.codeproject.com/articles/17968/making-your-application-uac-aware). –
Если вам нужна информация о группе по какой-либо другой причине, посмотрите http://stackoverflow.com/questions/10450998/need-to-retrieve-all-groups-a-user-belongs-to-in-c. Но в этом случае я согласен с @HarryJohnston. – gnud