我正在尝试获取当前登录到计算机的用户列表。
在Windows 7上,我可以调用LsaEnumerateLogonSessions,然后使用WTSConnectState调用WTSQuerySessionInformation。
但是在XP上,每个LSA会话的TS会话字段都为0(除非是远程桌面会话),它总是有WTSConnectState的WTSActive,我最后列出已经退出机器的所有人。当会话是远程桌面会话时,WTSQuerySessionInformation失败。
答案 0 :(得分:2)
您是否尝试过WMI课程Win32_loggedOnUser
。
答案 1 :(得分:2)
我相信this codeproject article使用的解决方法可能就是您所追求的,它会枚举所有正在运行的进程,并根据LUID的LsaEnumerateLogonSessions列表检查AuthenticationId(进程令牌上的TokenStatistics)。这允许您过滤掉过时的LUID
答案 2 :(得分:1)
我想用
我正在尝试获取当前登录到计算机的用户列表。
您希望枚举以交互方式登录的所有用户,即具有桌面等。所以它是物理控制台和RDP连接。
因为LogonUser
被调用,所以你需要区分“交互式登录”和“登录”。
使用LogonUser
,您可以将流程生成到交互式用户的会话中或启动批处理。 LSA返回所有这些用户。
使用WTSEnumerateSessions
并检查会话是否处于您需要的状态。