如何确定Windows XP中的LSA会话是否处于活动状态

时间:2010-02-05 03:54:29

标签: c++ windows winapi rdp local-security-authority

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

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

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

3 个答案:

答案 0 :(得分:2)

您是否尝试过WMI课程Win32_loggedOnUser

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我想用

  

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

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

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

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