Я пытаюсь получить список реальных пользователей на локальной машине. Под реальным я имею в виду пользователей
которые могут физически входить в систему и использовать ее, исключая только удаленные учетные записи и т. п.
Это то, что я уже делаю.
Звоните NetUserEnum()
с FILTER_NORMAL_ACCOUNT
.
Я получаю следующих пользователей:
- __vmware_user __
- Администратор
- Помощник
- ASPNET
- Гость
- SUPPORT_xxxxxx
Обратите внимание, что это те же пользователи, которых я получаю при вызове net user из командной строки,
но в диалоге входа я могу выбрать только Администратор. Это то, что я хочу.
Из списка возврата на NetUserEnum()
я могу сказать, какие учетные записи отключены. Это оставляет:
- __vmware_user __
- Администратор
- ASPNET
- SUPPORT_xxxxxx
Затем я запускаю LsaEnumerateAccountRights()
, чтобы проверить, какие учетные записи имеют SeInteractiveLogonRight.
У всех есть. Кроме настоящего, Администратор. Некоторые из них имеют SeDenyInteractiveLogonRight.
Это оставляет меня с:
- __vmware_user __
- Администратор (без SeInteractiveLogonRight)
Я где-то обнаружил, что, возможно, мне следует сначала проверить разрешения группы, поскольку моя учетная запись пользователя может наследовать SeInteractiveLogonRight. До сих пор я не нашел способа перечислить группы для данной учетной записи (SID или имя). Пробовал с NetUserGetGroups()
, но оказывается, что эта возвращает только доменные группы (в моем случае "None").
Сейчас я не знаю, что еще попробовать. Похоже, что все было бы проще, если бы у меня был «токен доступа», но, похоже, нет способа получить его для другого пользователя, кроме вошедшего в систему в данный момент.
Есть около 20 различных API, связанных с аутентификацией, и это безумие.
Я ценю вашу помощь