Exemple #1
0
        public void UpdateSessionWatchers(object state)
        {
            int[]     winSessions  = WTSEngine.GetActiveSessions();
            Process[] rcdProcesses = GetRcordingProcesses();

            _watchers.Clear();
            foreach (int wsid in winSessions)
            {
                var watcher = new SessionWatcher()
                {
                    WinSessionId = wsid
                };
                _watchers.Add(watcher);

                var proc = Array.Find(rcdProcesses, p => p.SessionId == wsid);
                if (proc != null)
                {
                    watcher.RecordProcess = proc;
                    watcher.State         = SessionState.Recording;
                }
                else
                {
                    string user = WTSEngine.GetDomainUserBySessionId(wsid);
                    if (UserPolicy.IsUserRecording(user))
                    {
                        // logon
                    }
                    else
                    {
                        watcher.State = SessionState.Exclude;
                    }
                }
            }
        }
        private void ScanWinSessionsToRecordOrEnd(object state)
        {
            int[] winSessions  = WTSEngine.GetActiveSessions();
            var   rcdProcesses = GetRcordingProcesses();

            // if not recording, record it.
            foreach (int sid in winSessions)
            {
                if (Array.Find(rcdProcesses, p => p.SessionId == sid) == null)
                {
                    string user = WTSEngine.GetDomainUserBySessionId(sid);
                    if (UserPolicy.IsUserRecording(user))
                    {
                        TraceLogger.Instance.WriteLineInfo("Start recording by configuration. user: "******"Stop recording by configuration. user: "******"Kill recording agent because double process. sessionId: " + proc.SessionId);
                    try { proc.Kill(); }
                    catch (Exception) { }
                }
                else
                {
                    sessions.Add(proc.SessionId);
                }
            }

            // dispose
            Array.ForEach(rcdProcesses, p => p.Dispose());
        }