【问题标题】: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 并检查会话是否处于您需要的状态。

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 2011-04-16
        • 2012-02-09
        • 1970-01-01
        • 2019-01-05
        相关资源
        最近更新 更多