コード例 #1
0
        public void RemoveProcessFromWatchList(string processName)
        {
            ProcessWatch processWatch = _processWatches.SingleOrDefault(pw => pw.ProcessName.Equals(processName));

            if (processWatch != null)
            {
                RemoveProcessWatchPorts(processWatch);
                _processWatches.Remove(processWatch);
            }
        }
コード例 #2
0
        private void BuildProcessWatch(string processName, bool withCapture)
        {
            if (_processWatches.Any(p => p.ProcessName.Equals(processName)))
            {
                return;
            }
            Process      process      = GetFirstProcessWithName(processName);
            ProcessWatch processWatch = new ProcessWatch(processName, withCapture, process);

            _processWatches.Add(processWatch);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: uta-org/LiveUEPM
 static Program()
 {
     Watcher = new ProcessWatch(true);
     Watcher.UnityInitialized += (p) =>
     {
         Console.WriteLine($"Project '{ProyectName}' was opened!");
     };
     Watcher.UnityInitialized += (p) =>
     {
         Console.WriteLine($"Project '{ProyectName}' was closed!");
     };
 }
コード例 #4
0
        public void GivenNotRunningAndRegisteredReporter_WhenStartRunning_ThenReporterReports()
        {
            ProcessWatch processWatch = new ProcessWatch("test", false, null);

            Assert.False(processWatch.IsRunning);

            IProcessReporter reporter = new MockReporter();

            processWatch.RegisterReporter(reporter);
            processWatch.IsRunning = true;

            Assert.Equal(1, ((MockReporter)reporter).ReportedCount);
        }
コード例 #5
0
        public void UpdateProcessCaptureInWatchList(string processName, bool doCapture)
        {
            ProcessWatch processWatch = _processWatches.SingleOrDefault(pw => pw.ProcessName.Equals(processName));

            if (processWatch != null)
            {
                processWatch.DoCapture = doCapture;
                if (!doCapture)
                {
                    RemoveProcessWatchPorts(processWatch);
                }
            }
        }
コード例 #6
0
        private static void OnMessageReceived(object sender, NetCoreEventArgs e)
        {
            try
            {
                // This is where you implement interaction.
                // Warning: Any error thrown in here will be caught by NetCore and handled by being displayed in the console.

                var message         = e.message;
                var simpleMessage   = message as NetCoreSimpleMessage;
                var advancedMessage = message as NetCoreAdvancedMessage;

                ConsoleEx.WriteLine(message.Type);
                switch (message.Type) //Handle received messages here
                {
                case RTCV.NetCore.Commands.Remote.AllSpecSent:
                {
                    //We still need to set the emulator's path
                    AllSpec.VanguardSpec.Update(VSPEC.EMUDIR, ProcessWatch.currentDir);
                    SyncObjectSingleton.FormExecute(() =>
                        {
                            ProcessWatch.UpdateDomains();
                        });
                }
                break;

                case RTCV.NetCore.Commands.Basic.SaveSavestate:
                    e.setReturnValue("");
                    break;

                case RTCV.NetCore.Commands.Basic.LoadSavestate:
                    e.setReturnValue(true);
                    break;

                case RTCV.NetCore.Commands.Remote.PreCorruptAction:

                    SyncObjectSingleton.FormExecute(() =>
                    {
                        lock (ProcessWatch.CorruptLock)
                        {
                            if (ProcessWatch.SuspendProcess)
                            {
                                if (!ProcessWatch.p?.Suspend() ?? true && !suspendWarned)
                                {
                                    suspendWarned = (MessageBox.Show("Failed to suspend a thread!\nWould you like to continue to receive warnings?", "Failed to suspend thread", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes);
                                }
                            }

                            ProcessWatch.DontChangeMemoryProtection = true;
                            var count = 0;
                            foreach (var m in MemoryDomains.MemoryInterfaces.Values)
                            {
                                if (m.MD is ProcessMemoryDomain pmd)
                                {
                                    if (!pmd.SetMemoryProtection(ProcessExtensions.MemProtection.Memory_ExecuteReadWrite))
                                    {
                                        count++;
                                    }
                                }
                            }

                            Console.WriteLine($"PreCorrupt\n" +
                                              $"Total domains: {MemoryDomains.MemoryInterfaces.Values.Count}\n" +
                                              $"Errors: {count}");
                        }
                    });

                    break;

                case RTCV.NetCore.Commands.Remote.PostCorruptAction:
                    SyncObjectSingleton.FormExecute(() =>
                    {
                        lock (ProcessWatch.CorruptLock)
                        {
                            foreach (var m in MemoryDomains.MemoryInterfaces.Values)
                            {
                                if (m.MD is ProcessMemoryDomain pmd)
                                {
                                    pmd.ResetMemoryProtection();
                                    pmd.FlushInstructionCache();
                                }
                            }
                            ProcessWatch.DontChangeMemoryProtection = false;
                            if (ProcessWatch.SuspendProcess)
                            {
                                if (!ProcessWatch.p?.Resume() ?? true && !suspendWarned)
                                {
                                    suspendWarned = (MessageBox.Show("Failed to resume a thread!\nWould you like to continue to receive warnings?", "Failed to resume thread", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes);
                                }
                            }
                        }
                    });
                    break;

                case RTCV.NetCore.Commands.Remote.CloseGame:
                    break;

                case RTCV.NetCore.Commands.Remote.DomainGetDomains:
                    SyncObjectSingleton.FormExecute(() =>
                    {
                        e.setReturnValue(ProcessWatch.GetInterfaces());
                    });
                    break;

                case RTCV.NetCore.Commands.Remote.DomainRefreshDomains:
                    SyncObjectSingleton.FormExecute(() => { ProcessWatch.UpdateDomains(); });
                    break;

                case RTCV.NetCore.Commands.Remote.EventEmuMainFormClose:
                    SyncObjectSingleton.FormExecute(() =>
                    {
                        Environment.Exit(0);
                    });
                    break;

                case RTCV.NetCore.Commands.Remote.IsNormalAdvance:
                    e.setReturnValue(true);
                    break;

                case RTCV.NetCore.Commands.Remote.EventCloseEmulator:
                    Environment.Exit(-1);
                    break;
                }
            }
            catch (Exception ex)
            {
                if (VanguardCore.ShowErrorDialog(ex, true) == DialogResult.Abort)
                {
                    throw new AbortEverythingException();
                }
            }
        }
コード例 #7
0
 private void RemoveProcessWatchPorts(ProcessWatch processWatch)
 {
     _portsCurrentlyUnderWatch = _portsCurrentlyUnderWatch
                                 .Where(p => !processWatch.Ports.Contains(p)).ToList();
 }