美文网首页从汇编到C++
进程的遍历、获取与销毁

进程的遍历、获取与销毁

作者: Asura_Luo | 来源:发表于2018-05-04 02:37 被阅读0次

进程的遍历、获取与销毁

创建快照遍历

//获得进程所使用的堆,模块和线程的信息快照 
HANDLE WINAPI CreateToolhelp32Snapshot
(
        DWORD dwFlags,//标志位
        DWORD th32ProcessID //进程ID
) 

//dwFlags: 指定的快照中,指定需要拍的系统部分
TH32CS_INHERIT          声明快照句柄是可继承的。
TH32CS_SNAPALL          在快照中包含系统中所有的 进程和线程。
TH32CS_SNAPHEAPLIST     在快照中包含ID所指定的进程的所有的堆。
TH32CS_SNAPMODULE       在快照中包含在ID所指定的进程的所有的模块。
TH32CS_SNAPPROCESS      在快照中包含系统中所有的进程。
TH32CS_SNAPTHREAD       在快照中包含系统中所有的线程。


BOOL WINAPI Process32First(
    HANDLE   hSnapshot,     //快照句柄   
    LPPROCESSENTRY32 lppe    //获得的信息
);获得快照中的第一个成员的信息

BOOL WINAPI Process32Next(
    HANDLE   hSnapshot,       //快照句柄 
    LPPROCESSENTRY32 lppe    //获得的信息
);获得快照中后一个成员的信息

函数实现

DWORD find_processid_by_nameW(PWCHAR process_name)
{

    HANDLE hand = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if ((int)hand == -1)
    {
        return GetLastError();
    }
    PROCESSENTRY32 process_info = { 0 };
    process_info.dwSize = sizeof PROCESSENTRY32;

    if (!Process32First(hand, &process_info))
    {
        return GetLastError();
    }

    do
    {
        if (!wcscmp(process_info.szExeFile, process_name))
        {
            return process_info.th32ProcessID;
        }

    } while (Process32Next(hand,&process_info));
    return 0;
}

进程的获取与销毁

//进程的获取
HANDLE OpenProcess(
  DWORD dwDesiredAccess,  // 访问权限标识
  BOOL bInheritHandle,    // 获取的句柄能否被继承
  DWORD dwProcessId       // 目标进程的标识符
);

//退出
VOID ExitProcess(  
    UINT uExitCode   // 退出代码 (谁调用谁结束)
);

BOOL TerminateProcess(  
  HANDLE hProcess, // 关闭进程的句柄
  UINT uExitCode   // 进程的退出代码
);

exp:


hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (hProcess)
{
    MessageBox(NULL, process_name, L"打开进程了!", MB_OK);
    TerminateProcess(hProcess, 0);
}
            

相关文章

网友评论

    本文标题:进程的遍历、获取与销毁

    本文链接:https://www.haomeiwen.com/subject/igyrrftx.html