2010-02-05 25 views
4

我試圖獲取當前登錄到計算機的用戶列表。如何確定是否在Windows XP中激活LSA會話

在Windows 7上,我可以調用LsaEnumerateLogonSessions,然後使用WTSConnectState調用WTSQuerySessionInformation。

但是在XP上,每個LSA會話對於TS會話字段都有0(除非是遠程桌面會話),它總是具有WTSActive的WTSConnectState,我最終列出所有註銷機器的人員已經。當會話是遠程桌面會話時,WTSQuerySessionInformation失敗。

回答

2

我相信this codeproject article使用了一種解決方法,它可能是你所追求的,它列舉了所有正在運行的進程,檢查AuthenticationId(進程標記上的TokenStatistics)與LUID的LsaEnumerateLogonSessions列表。這使您可以過濾掉陳舊的LUID的

2

你試過了WMI類Win32_loggedOnUser

+0

這也給非活動會話。 – 2010-02-06 16:31:35

1

我覺得跟

我試圖讓當前登錄到一臺機器的用戶列表。

您想枚舉所有以交互方式登錄的用戶,即具有桌面等。所以它是物理控制檯和RDP連接。

因此,您需要區分「交互式登錄」和「登錄」,因爲LogonUser被調用。 使用LogonUser您可以將流程生成到交互式用戶的會話中或啓動批處理。 LSA返回所有這些用戶。

使用WTSEnumerateSessions並檢查會話是否處於您需要的狀態。

相關問題