【问题标题】:How to determine whether an LSA session is active in Windows XP如何确定 LSA 会话在 Windows XP 中是否处于活动状态
【发布时间】:2015-03-19 05:15:45
【问题描述】:
我正在尝试获取当前登录到机器的用户列表。
在 Windows 7 上,我可以调用 LsaEnumerateLogonSessions,然后使用 WTSConnectState 调用 WTSQuerySessionInformation。
但是在 XP 上,每个 LSA 会话的 TS 会话字段都为 0(除非它是远程桌面会话),它始终具有 WTSActive 的 WTSConnectState,我最终列出了所有已经从机器注销的人.当会话是远程桌面会话时,WTSQuerySessionInformation 失败。
【问题讨论】:
标签:
c++
windows
winapi
rdp
local-security-authority
【解决方案1】:
我相信this codeproject article 使用的解决方法可能是您所追求的,它枚举所有正在运行的进程,根据 LUID 的 LsaEnumerateLogonSessions 列表检查 AuthenticationId(进程令牌上的 TokenStatistics)。这允许您过滤掉过时的 LUID
【解决方案2】:
您是否尝试过 WMI 类 Win32_loggedOnUser。
【解决方案3】:
我认为
我正在尝试获取当前登录到机器的用户列表。
您想枚举所有以交互方式登录的用户,即拥有桌面等。所以它是物理控制台和 RDP 连接。
因此您需要区分“交互式登录”和“已登录”,因为调用了LogonUser。
使用LogonUser,您可以将进程生成到交互式用户的会话中或启动批处理。 LSA 返回所有这些用户。
使用WTSEnumerateSessions 并检查会话是否处于您需要的状态。