Как определить, активен ли сеанс LSA в Windows XP - PullRequest
4 голосов
/ 05 февраля 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 06 февраля 2010

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

2 голосов
/ 05 февраля 2010

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

1 голос
/ 22 февраля 2010

Я думаю, с

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

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

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

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

...