예제 #1
0
        private IPAddress GetClientIPAddress()
        {
            var clientAddress = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_CLIENT_ADDRESS>(
                _server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientAddress);

            return(NativeMethodsHelper.ExtractIPAddress(clientAddress.AddressFamily, clientAddress.Address));
        }
예제 #2
0
        private IClientDisplay GetClientDisplay()
        {
            var clientDisplay = NativeMethodsHelper.QuerySessionInformationForStruct <WTS_CLIENT_DISPLAY>(
                _server.Handle, _sessionId, WTS_INFO_CLASS.WTSClientDisplay);

            return(new ClientDisplay(clientDisplay));
        }
예제 #3
0
        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);
            }
        }
예제 #6
0
        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);
        }