private IPAddress GetClientIPAddress() { var clientAddress = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_CLIENT_ADDRESS>( _server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientAddress); return(NativeMethodsHelper.ExtractIPAddress(clientAddress.AddressFamily, clientAddress.Address)); }
private IClientDisplay GetClientDisplay() { var clientDisplay = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_CLIENT_DISPLAY>( _server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientDisplay); return(new ClientDisplay(clientDisplay)); }
private IPAddress GetSessionIPAddress() { var sessionAddress = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_SESSION_ADDRESS>(_server.Handle, _sessionId, WTS_INFO_CLASS.WTSSessionAddressV4); return(NativeMethodsHelper.ExtractIPAddress(sessionAddress.AddressFamily, sessionAddress.Address)); }
private IPAddress GetClientIPAddress() { WTS_CLIENT_ADDRESS clientAddress = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_CLIENT_ADDRESS>(_server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientAddress); AddressFamily addressFamily = (AddressFamily)clientAddress.AddressFamily; if (addressFamily == AddressFamily.InterNetwork) { byte[] address = new byte[4]; Array.Copy(clientAddress.Address, 2, address, 0, 4); return(new IPAddress(address)); } // TODO: support IPv6 return(null); }
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); } }
private void LoadWtsInfoProperties() { var info = NativeMethodsHelper.QuerySessionInformationForStruct <WTSINFO>(_server.Handle, _sessionId, WTS_INFO_CLASS.WTSSessionInfo); _connectionState.Value = info.State; _incomingStatistics.Value = new ProtocolStatistics(info.IncomingBytes, info.IncomingFrames, info.IncomingCompressedBytes); _outgoingStatistics.Value = new ProtocolStatistics(info.OutgoingBytes, info.OutgoingFrames, info.OutgoingCompressedBytes); _windowStationName.Value = info.WinStationName; _domainName.Value = info.Domain; _userName.Value = info.UserName; _connectTime.Value = NativeMethodsHelper.FileTimeToDateTime(info.ConnectTime); _disconnectTime.Value = NativeMethodsHelper.FileTimeToDateTime(info.DisconnectTime); _lastInputTime.Value = NativeMethodsHelper.FileTimeToDateTime(info.LastInputTime); _loginTime.Value = NativeMethodsHelper.FileTimeToDateTime(info.LogonTime); _currentTime.Value = NativeMethodsHelper.FileTimeToDateTime(info.CurrentTime); }