Windows:以原子方式暂停整个过程?

时间:2011-08-30 11:25:33

标签: windows winapi process suspend

使用Win32 API,只能使用SuspendThread()挂起单个线程,但不能在一次调用中挂起完整的进程。
迭代进程线程并一次暂停它们不是一个好选择,因为它可能会导致死锁和意外行为。

这应该是内核使用DDK中的函数(我不记得它的名字)可能的东西。
如何将此功能公开给用户模式?

有没有其他方法可以在不进入内核的情况下实现这一目标?

SysInternals进程资源管理器可以选择暂停进程。它是如何做到的?

2 个答案:

答案 0 :(得分:3)

ntdll.dll中的未记录函数NtSuspendProcess听起来就像你要找的那样。 Sysinternals pssuspend和进程探索器都使用它。

关于无证件功能的常见警告适用。

这个答案有更多细节: How can I freeze the execution of a program?

答案 1 :(得分:2)

实际上这正是MiniDumpWriteDump似乎做的事情 - 它在创建转储之前单独挂起进程中的所有线程(调用线程除外)。

仅此一点不应导致死锁或意外行为,但显然最好从单独的过程中执行此操作。