public static WINSTATIONINFORMATIONW GetWinStationInformation(ITerminalServerHandle server, int sessionId) { var retLen = 0; var wsInfo = new WINSTATIONINFORMATIONW(); if ( NativeMethods.WinStationQueryInformation(server.Handle, sessionId, (int)WINSTATIONINFOCLASS.WinStationInformation, ref wsInfo, Marshal.SizeOf(typeof(WINSTATIONINFORMATIONW)), ref retLen) != 0) { return(wsInfo); } throw new Win32Exception(); }
public TerminalServicesSession(ITerminalServer server, int sessionId, string windowStationName, ConnectionState connectionState) { _server = server; _sessionId = sessionId; _windowStationName = windowStationName; _connectionState = connectionState; _clientBuildNumber = new LazyLoadedProperty <int>(GetClientBuildNumber); _clientIPAddress = new LazyLoadedProperty <IPAddress>(GetClientIPAddress); _clientDisplay = new LazyLoadedProperty <IClientDisplay>(GetClientDisplay); _clientName = NativeMethodsHelper.QuerySessionInformationForString(_server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientName); // TODO: MSDN says most of these properties should be null for the console session. // I haven't observed this in practice on Windows Server 2000, 2003, or 2008, but perhaps this // should be considered. if (Environment.OSVersion.Version >= new Version(6, 0)) { // We can actually use documented APIs in Vista / Windows Server 2008+. WTSINFO info = NativeMethodsHelper.QuerySessionInformationForStruct <WTSINFO>(server.Handle, _sessionId, WTS_INFO_CLASS.WTSSessionInfo); _connectTime = NativeMethodsHelper.FileTimeToDateTime(info.ConnectTime); _currentTime = NativeMethodsHelper.FileTimeToDateTime(info.CurrentTime); _disconnectTime = NativeMethodsHelper.FileTimeToDateTime(info.DisconnectTime); _lastInputTime = NativeMethodsHelper.FileTimeToDateTime(info.LastInputTime); _loginTime = NativeMethodsHelper.FileTimeToDateTime(info.LogonTime); _userName = info.UserName; _domainName = info.Domain; } else { WINSTATIONINFORMATIONW wsInfo = NativeMethodsHelper.GetWinStationInformation(server.Handle, _sessionId); _connectTime = NativeMethodsHelper.FileTimeToDateTime(wsInfo.ConnectTime); _currentTime = NativeMethodsHelper.FileTimeToDateTime(wsInfo.CurrentTime); _disconnectTime = NativeMethodsHelper.FileTimeToDateTime(wsInfo.DisconnectTime); _lastInputTime = NativeMethodsHelper.FileTimeToDateTime(wsInfo.LastInputTime); _loginTime = NativeMethodsHelper.FileTimeToDateTime(wsInfo.LoginTime); _userName = NativeMethodsHelper.QuerySessionInformationForString(server.Handle, _sessionId, WTS_INFO_CLASS.WTSUserName); _domainName = NativeMethodsHelper.QuerySessionInformationForString(server.Handle, _sessionId, WTS_INFO_CLASS.WTSDomainName); } }
public static extern int WinStationQueryInformation(IntPtr hServer, int sessionId, int information, ref WINSTATIONINFORMATIONW buffer, int bufferLength, ref int returnedLength);