public bool CheckProcess() { if (this.ProcessName == null) { return(false); } bool success = GetExitCodeProcess(this.processHandle, out uint code); if (success && code != 259) { ProcessMemory.CloseHandle(this.processHandle); this.processHandle = IntPtr.Zero; } if (this.processHandle == IntPtr.Zero) { this.mainProcess = Process.GetProcessesByName(this.ProcessName); if (this.mainProcess.Length == 0) { return(false); } this.Process = this.mainProcess[0]; this.processHandle = OpenProcess(0x001F0FFF, false, this.mainProcess[0].Id); if (this.processHandle == IntPtr.Zero) { return(false); } } return(true); }
public void Suspend() { foreach (ProcessThread pT in this.mainProcess[0].Threads) { IntPtr pOpenThread = OpenThread(0x02 /* suspend/resume */, false, (uint)pT.Id); if (pOpenThread == IntPtr.Zero) { continue; } ProcessMemory.SuspendThread(pOpenThread); ProcessMemory.CloseHandle(pOpenThread); } }
public void Resume() { foreach (ProcessThread pT in this.mainProcess[0].Threads) { IntPtr pOpenThread = OpenThread(0x02 /* suspend/resume */, false, (uint)pT.Id); if (pOpenThread == IntPtr.Zero) { continue; } var suspendCount = 0; do { suspendCount = ResumeThread(pOpenThread); } while (suspendCount > 0); ProcessMemory.CloseHandle(pOpenThread); } }