老倪今天突然问道怎样才能挂起一个进程。线程很好办,因为系统提供了 SuspendThread() API 可以直接调用。要是在两天以前,老倪还真问住我了;不过幸好是今天,老汉已经知道了答案。忘了是昨天还是前天,在用十六进制方式查看大名鼎鼎的 Process Explorer 的时候,无意之中看到了一个原来没见过的 API 名字:NtSuspendProcess(),望文知义,连弱智都应该能看出来这个函数的作用。与之相对应的还有 NtResumeProcess()。他们的原型为:
NTSTATUS NtSuspendProcess(HANDLE hProcess);
NTSTATUS NtResumeProcess(HANDLE hProcess);
从 NTDLL.DLL 中找到地址就可以直接用了。另外关于查询一个进程当前是不是处于被挂起状态我还不知道,估计跑不了 NtQueryInformationProcess()。