Как определить, активен ли сеанс LSA в Windows XP

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

В Windows 7 я могу вызвать LsaEnumerateLogonSessions, затем WTSQuerySessionInformation с помощью WTSConnectState.

Но в XP каждый сеанс LSA имеет 0 для поля сеанса TS (если это не сеанс удаленного рабочего стола), в котором всегда есть WTSConnectState из WTSActive, и в итоге я перечисляю всех людей, которые уже вышли из машины. Сбой WTSQuerySessionInformation, когда сеанс является сеансом удаленного рабочего стола.

3 ответа

Решение

Я полагаю, что в этой статье codeproject используется обходной путь, который может оказаться тем, что вам нужно, он перечисляет все запущенные процессы, проверяя AuthenticationId (TokenStatistics в маркере процесса) по списку LsaID LsaEnumerateLogonSessions, который дает вам. Это позволяет вам отфильтровывать устаревшие LUID

Вы пробовали класс WMI? Win32_loggedOnUser,

Я думаю с

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

Вы хотите перечислить всех пользователей, которые вошли в систему в интерактивном режиме, то есть имеют рабочий стол и тому подобное. Так что это физическая консоль и RDP-соединения.

Таким образом, вы должны различать "интерактивный вход в систему" ​​и "вход в систему" ​​из-за LogonUser назывался. С LogonUser Вы можете запустить процесс в сеанс интерактивного пользователя или запустить пакетный процесс. LSA возвращает всех этих пользователей.

использование WTSEnumerateSessions и проверьте, находится ли сеанс в нужном вам состоянии.

Другие вопросы по тегам