挂起一个进程

来源:互联网 发布:csol三米优化刀 编辑:程序博客网 时间:2024/04/30 05:59

挂起一个进程下的所有线程。

void SuspendProcess(DWORD dwProcessId , BOOL bSuspend){HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD , dwProcessId);if ( hSnapShot != INVALID_HANDLE_VALUE){THREADENTRY32 te = {sizeof(te)};BOOL fOk = Thread32First(hSnapShot , &te);for (; fOk ; fOk = Thread32Next(hSnapShot , &te)){if (te.th32OwnerProcessID == dwProcessId){HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME , FALSE , te.th32ThreadID);if (hThread != NULL){if (bSuspend){SuspendThread(hThread);}else{ResumeThread(hThread);}}CloseHandle(hThread);}}CloseHandle(hSnapShot);}}

但是不能保证线程在动态创建和销毁的过程中不发生问题。就好像一个vector<int>有另一个线程在操纵里面的元素的产生和消失没,那么此时你对每个元素的操作都可能有问题。也就是说这个快照是你该进程执行时的快照,经过一段时间后,那些个线程就不是原来的线程了。所以这个函数有潜在的问题。

windows核心编程

原创粉丝点击