Подтвердить что ты не робот

Список Windows "реальных" пользователей с использованием API Win32

Я пытаюсь получить список реальных пользователей на локальной машине. По существу я имею в виду пользователей которые могут физически войти в систему и использовать ее, за исключением удаленных учетных записей и т.п.

Это то, что я делаю уже.

  • Вызовите NetUserEnum() с помощью FILTER_NORMAL_ACCOUNT.

    Я получаю следующих пользователей:

    • __ vmware_user __
    • Администратор
    • Помощник помощника
    • ASPNET
    • Гость
    • SUPPORT_xxxxxx

    Обратите внимание, что это те же пользователи, которых я получаю при вызове сетевого пользователя из командной строки, но в диалоговом окне входа в систему я могу выбрать только "Администратор". Это то, что я хочу.

  • В списке возврата NetUserEnum() я могу указать, какие учетные записи отключены. Это оставляет:

    • __ vmware_user __
    • Администратор
    • ASPNET
    • SUPPORT_xxxxxx
  • Затем я запустил LsaEnumerateAccountRights(), чтобы проверить, какие учетные записи имеют SeInteractiveLogonRight.

    Все они есть. За исключением реального, Администратор. Некоторые из них имеют SeDenyInteractiveLogonRight. Это оставляет меня:

    • __ vmware_user __
    • Администратор (без SeInteractiveLogonRight)

Я нашел где-то, что, возможно, мне нужно сначала проверить права группы, так как моя учетная запись пользователя может наследовать SeInteractiveLogonRight. До сих пор я не нашел способ перечислить группы для данной учетной записи (SID или имя). Пробовал NetUserGetGroups(), но оказалось, что этот только возвращает группы доменов (в моем случае "None" ).

Сейчас я не знаю, что еще попробовать. Похоже, все будет проще, если бы у меня был "токен доступа", но, похоже, нет способа получить это для пользователя, кроме текущего входа в систему. Есть около 20 различных API, связанных с аутентификацией, и это безумие.

Я ценю вашу помощь

4b9b3361

Ответ 1

Как вы сказали, последним шагом, вероятно, является просто фильтрация пользователей, принадлежащих группе "Администраторы" или "Пользователи".

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