4

我正在尝试获取当前登录到机器的用户列表。

在 Windows 7 上,我可以调用 LsaEnumerateLogonSessions,然后使用 WTSConnectState 调用 WTSQuerySessionInformation。

但是在 XP 上,每个 LSA 会话的 TS 会话字段都为 0(除非它是远程桌面会话),它始终具有 WTSActive 的 WTSConnectState,并且我最终列出了所有已经注销机器的人。当会话是远程桌面会话时,WTSQuerySessionInformation 失败。

4

3 回答 3

2

您是否尝试过 WMI 类Win32_loggedOnUser

于 2010-02-05T06:46:27.020 回答
2

我相信这篇 codeproject 文章使用的解决方法可能是您所追求的,它枚举所有正在运行的进程,根据 LUID 的 LsaEnumerateLogonSessions 列表检查 AuthenticationId(进程令牌上的 TokenStatistics)给您。这允许您过滤掉过时的 LUID

于 2010-02-06T13:31:58.380 回答
1

我认为与

我正在尝试获取当前登录到机器的用户列表。

您想枚举所有以交互方式登录的用户,即拥有桌面等。所以它是物理控制台和 RDP 连接。

所以你需要区分“交互式登录”和“登录”,因为LogonUser被调用了。您可以将LogonUser进程生成到交互式用户的会话中或启动批处理。LSA 返回所有这些用户。

使用WTSEnumerateSessions并检查会话是否处于您需要的状态。

于 2010-02-21T22:25:16.300 回答