2010-02-05 75 views
4

我试图获取当前登录到计算机的用户列表。如何确定是否在Windows XP中激活LSA会话

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

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

回答

2

我相信this codeproject article使用了一种解决方法,它可能是你所追求的,它列举了所有正在运行的进程,检查AuthenticationId(进程标记上的TokenStatistics)与LUID的LsaEnumerateLogonSessions列表。这使您可以过滤掉陈旧的LUID的

2

你试过了WMI类Win32_loggedOnUser

+0

这也给非活动会话。 – 2010-02-06 16:31:35

1

我觉得跟

我试图让当前登录到一台机器的用户列表。

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

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

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

相关问题