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

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

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

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

我相信这个codeproject文章使用了一个可能是你之后的解决方法,它枚举所有正在运行的进程,检查AuthenticationID(进程标记上的TokenStatistics)对照列表LUID的LsaEnumerateLogonSessions给你。 这可以让你过滤掉陈旧的LUID

你试过了WMI类的Win32_loggedOnUser

我认为与

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

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

所以你需要区分“交互式登录”和“登录”,因为LogonUser被调用。 使用LogonUser您可以创建一个进程进入交互式用户的会话或启动批处理。 LSA返回所有这些用户。

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