首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Win32进程创建、进程快照、进程终止用例(2)

Win32进程创建、进程快照、进程终止用例(2)

终止进程:
终止进程也就是结束程序的执行,让它从内存中卸载。进程终止的原因可能有 4 种:
(1)主线程的入口函数返回。
(2)进程中一个线程调用了 ExitProcess 函数,该函数只能终止当前进程。
(3)此进程中的所有线程都结束了。
(4)其他进程中的一个线程调用了 TerminateProcess 函数。
复制代码
终止当前进程:
void ExitProcess(UINT uExitCode); // 参数uExitCode 为此程序的退出代码。
终止其他进程:
BOOL TerminateProcess(
    HANDLE hProcess, // 要结束的进程(目标进程)的句柄
    UINT uExitCode  // 指定目标进程的退出代码,你可以使用GetExitCodeProcess 取得一个进程的退出代码
);
  在对一个进程操作前, 必须首先取得该进程的进程句柄。 CreateProcess 函数创建进程后会返回一个进程句柄,而对于一个已经存在的进程,只能使用 OpenProcess 函数来取得这个进程
的访问权限,函数用法如下:
 HANDLE OpenProcess(
    DWORD dwDesiredAccess, // 想得到的访问权限,可以是PROCESS_ALL_ACCESS等
    BOOL bInheritHandle,   // 指定返回的句柄是否可以被继承
    DWORD dwProcessId      // 指定要打开的进程的ID 号
  );
 一般使用下面的代码来终止一个进程:
 BOOL TerminateProcessFromId(DWORD dwId)
 {
    BOOL bRet = FALSE;
   // 打开目标进程,取得进程句柄
   HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwId);
   if(hProcess != NULL)
   { // 终止进程
    bRet = ::TerminateProcess(hProcess, 0);
   }
   CloseHandle(hProcess);
   return bRet;
}
继承事业,薪火相传
返回列表