Translate

2014年2月10日星期一

一段挂起进程中所有线程的代码

今天看书核心编程看到第7章,中的一段代码很有意思,win7下对记事本进程进行测试,可以挂起,挺有意思的
  
//windows核心编程 第5版中的一段代码
/*
函数功能:挂起进程中的所有线程
参数1:进程ID
参数2:若为TRUE时对进程中的所有线程调用SuspendThread,挂起线程
      若为FALSE时对进程中的所有线程调用ResumeThread,恢复线程
*/
VOID SuspendProcess(DWORD dwProcessID, BOOL fSuspend)
{
 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 (fSuspend)
      SuspendThread(hThread);
     else
      ResumeThread(hThread);
    }
    CloseHandle(hThread);
   }
  }
  CloseHandle(hSnapshot);
 }
}

没有评论:

发表评论