4

Windows有一个cmd“查询会话”,它显示有关终端服务器上的会话信息,包括“会话名称”。

我想使用Windows API ------ LsaEnumerateLogonSessionsLsaGetLogonSessionData 来获取这些会话信息,如下所示:

int main()
{
    int i = 0;
    ULONG count = 0;
    PLUID list = NULL;
    PSECURITY_LOGON_SESSION_DATA data;

    LsaEnumerateLogonSessions(&count, &list);
    for (i = 0; i < (int)count; i++)
    {
            LsaGetLogonSessionData(&list[i], &data);
    }

    return 0;
}

我可以获得一个SECURITY_LOGON_SESSION_DATA结构:

typedef struct _SECURITY_LOGON_SESSION_DATA {
  ULONG                     Size;
  LUID                      LogonId;
  LSA_UNICODE_STRING        UserName;
  LSA_UNICODE_STRING        LogonDomain;
  LSA_UNICODE_STRING        AuthenticationPackage;
  ULONG                     LogonType;
  ULONG                     Session;
  PSID                      Sid;
  LARGE_INTEGER             LogonTime;
  LSA_UNICODE_STRING        LogonServer;
  LSA_UNICODE_STRING        DnsDomainName;
  LSA_UNICODE_STRING        Upn;
  ULONG                     UserFlags;
  LSA_LAST_INTER_LOGON_INFO LastLogonInfo;
  LSA_UNICODE_STRING        LogonScript;
  LSA_UNICODE_STRING        ProfilePath;
  LSA_UNICODE_STRING        HomeDirectory;
  LSA_UNICODE_STRING        HomeDirectoryDrive;
  LARGE_INTEGER             LogoffTime;
  LARGE_INTEGER             KickOffTime;
  LARGE_INTEGER             PasswordLastSet;
  LARGE_INTEGER             PasswordCanChange;
  LARGE_INTEGER             PasswordMustChange;
} SECURITY_LOGON_SESSION_DATA, *PSECURITY_LOGON_SESSION_DATA;

但它不包含会话名称

关于如何获得“sessonname”的任何想法?

4

2 回答 2

3

“会话名称”在 API 文档中称为“winstation 名称”(非常令人困惑,因为它绝对不是 Window Station,因为文档道歉)。

WTSQuerySessionInformation(WTSWinStationName)将使用标准 WTS 功能为您获取它。

我不确定您为什么要使用LsaEnumerateLogonSessions,因为它不仅会返回会话,还会返回任何登录,包括尚未创建会话的网络登录。如果您有某些特殊原因需要 LUID,则必须过滤列表,挑选出 Session 成员非零的那些,然后WTSQuerySessionInformation对其进行操作以获得 winstation 名称。或者,您可以过滤所有 LogonType 是四种交互类型之一的登录。甚至在 Vista 和更高版本上,控制台也可能在会话 0 上,这在 XP 上是正常的,因此请记住还要检查会话 0 并WTSGetActiveConsoleSessionId确保您已将所有您感兴趣的会话包含在列表中中。我怀疑只是使用该WTSEnumerateSessions功能会简单得多!

于 2013-04-13T11:37:39.377 回答
0

WTSEnumerateSessions 或 WTSQuerySessionInformation

于 2013-04-13T11:33:36.777 回答