code_junkie

Suspend Process in C#

Nov 10th, 2011
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. [Flags]
  2. public enum ThreadAccess : int
  3. {
  4. TERMINATE = (0x0001),
  5. SUSPEND_RESUME = (0x0002),
  6. GET_CONTEXT = (0x0008),
  7. SET_CONTEXT = (0x0010),
  8. SET_INFORMATION = (0x0020),
  9. QUERY_INFORMATION = (0x0040),
  10. SET_THREAD_TOKEN = (0x0080),
  11. IMPERSONATE = (0x0100),
  12. DIRECT_IMPERSONATION = (0x0200)
  13. }
  14.  
  15. [DllImport("kernel32.dll")]
  16. static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId);
  17. [DllImport("kernel32.dll")]
  18. static extern uint SuspendThread(IntPtr hThread);
  19. [DllImport("kernel32.dll")]
  20. static extern int ResumeThread(IntPtr hThread);
  21.  
  22.  
  23.  
  24. private void SuspendProcess(int PID)
  25. {
  26. Process proc = Process.GetProcessById(PID);
  27.  
  28. if (proc.ProcessName == string.Empty)
  29. return;
  30.  
  31. foreach (ProcessThread pT in proc.Threads)
  32. {
  33. IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);
  34.  
  35. if (pOpenThread == IntPtr.Zero)
  36. {
  37. break;
  38. }
  39.  
  40. SuspendThread(pOpenThread);
  41. }
  42. }
  43.  
  44. public void ResumeProcess(int PID)
  45. {
  46. Process proc = Process.GetProcessById(PID);
  47.  
  48. if (proc.ProcessName == string.Empty)
  49. return;
  50.  
  51. foreach (ProcessThread pT in proc.Threads)
  52. {
  53. IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);
  54.  
  55. if (pOpenThread == IntPtr.Zero)
  56. {
  57. break;
  58. }
  59.  
  60. ResumeThread(pOpenThread);
  61. }
  62. }
Add Comment
Please, Sign In to add comment