Список «реальных» пользователей Windows, использующих Win32 API

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

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

  • Вызов NetUserEnum () с FILTER_NORMAL_ACCOUNT .

    У меня есть следующие пользователи:

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

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

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

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

  • иметь это. Кроме настоящего, Администратора. Некоторые из них имеют SeDenyInteractiveLogonRight. Это оставляет мне:

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

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

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

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

12
задан Davide Piras 8 February 2011 в 11:04
поделиться