2013-04-13 84 views
4

Windows有一个cmd“query session”,它显示有关终端服务器上会话的信息,包括“sessionname”。如何获取Windows会话名称?

我想用的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”的任何想法?

+0

欢迎来到Stack Overflow!如果这个答案对你有帮助,那么请考虑将其标记为已接受的答案,以便其他人可以在将来更容易地找到答案。 –

+1

您将登录会话与远程桌面(又名终端服务)会话混淆。他们是两个完全不同的野兽。 –

回答

3

的“会话名称”中的API文档被称为“winstation名”(很容易混淆,因为它绝对不是一个窗口站,因为文档apologize)。

WTSQuerySessionInformation(WTSWinStationName)将为您使用标准的WTS功能。

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

+0

@哈里约翰斯顿是对的!谢谢! – wbm

0

WTSEnumerateSessions或WTSQuerySessionInformation