使用Win32 API,只能使用SuspendThread()
挂起单个线程,但不能在一次调用中挂起完整的进程。
迭代进程线程并一次暂停它们不是一个好选择,因为它可能会导致死锁和意外行为。
这应该是内核使用DDK中的函数(我不记得它的名字)可能的东西。
如何将此功能公开给用户模式?
有没有其他方法可以在不进入内核的情况下实现这一目标?
SysInternals进程资源管理器可以选择暂停进程。它是如何做到的?
答案 0 :(得分:3)
ntdll.dll中的未记录函数NtSuspendProcess听起来就像你要找的那样。 Sysinternals pssuspend和进程探索器都使用它。
关于无证件功能的常见警告适用。
这个答案有更多细节: How can I freeze the execution of a program?
答案 1 :(得分:2)
实际上这正是MiniDumpWriteDump
似乎做的事情 - 它在创建转储之前单独挂起进程中的所有线程(调用线程除外)。
仅此一点不应导致死锁或意外行为,但显然最好从单独的过程中执行此操作。