使用Win32 API只能使用SuspendThread()
挂起单个线程,但在一次调用中不能完成一个进程。
迭代一个进程线程并暂时挂载它们并不是一个好的选择,因为它可能导致死锁和意外的行为。Windows:以原子级方式暂停整个过程?
这应该是在内核中使用来自DDK的函数(我不记得它的名字)。
如何将这个函数暴露给用户模式?
有没有其他的方式来实现这一点,而不去内核?
SysInternals进程管理器有一个选项来暂停进程。它是如何做到的?
使用Win32 API只能使用SuspendThread()
挂起单个线程,但在一次调用中不能完成一个进程。
迭代一个进程线程并暂时挂载它们并不是一个好的选择,因为它可能导致死锁和意外的行为。Windows:以原子级方式暂停整个过程?
这应该是在内核中使用来自DDK的函数(我不记得它的名字)。
如何将这个函数暴露给用户模式?
有没有其他的方式来实现这一点,而不去内核?
SysInternals进程管理器有一个选项来暂停进程。它是如何做到的?
ntdll.dll中未记录的函数NtSuspendProcess听起来像你在找什么。 Sysinternals pssuspend和进程管理器都使用这个。
关于无证函数的通常注意事项适用。
实际上,这正是MiniDumpWriteDump
看起来要做的事情 - 它在创建转储之前单独挂起进程中的所有线程(调用线程除外)。
这本身不应该导致死锁或意外的行为,但显然它可能是最好的做法从一个单独的过程。
Windows调度线程挂起在过程中随机所有的时间。如果你在这样做的时候遇到了死锁,那么你需要修复你的线程错误。或者换一种说法,如果你的程序是正确的,你就不会死锁。 –