Windows有一个cmd“query session”,它显示有关终端服务器上会话的信息,包括“sessionname”。如何获取Windows会话名称?
我想用的Windows API ------ LsaEnumerateLogonSessions和LsaGetLogonSessionData得到这样这些会话的信息:
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”的任何想法?
欢迎来到Stack Overflow!如果这个答案对你有帮助,那么请考虑将其标记为已接受的答案,以便其他人可以在将来更容易地找到答案。 –
您将登录会话与远程桌面(又名终端服务)会话混淆。他们是两个完全不同的野兽。 –