遍历进程和模块

进程相关操作

//打开/关闭进程

bool    KillProcess(DWORD dwPid)

{

    //1.打开进程

    HANDLE hProcess = OpenProcess(PROCESS_TERMINATEFALSEdwPid);

    if (hProcess == INVALID_HANDLE_VALUE)

        returnfalse;

 

    //2.结束进程

    TerminateProcess(hProcess, 0);

    CloseHandle(hProcess);

    return    true;

}


//遍历进程信息

bool GetProcessList()

{

    HANDLE hProcessSnap;    //进程快照句柄

    HANDLE hPorcess;        //进程句柄

    PROCESSENTRY32 stcPe32 = { 0 };//进程快照信息

    stcPe32.dwSize sizeof(PROCESSENTRY32 );

 

    //1.创建一个进程相关的快照句柄

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);

 

    if (hProcessSnap == INVALID_HANDLE_VALUE)

        returnfalse;

    //2. 通过进程快照句柄获取第一个进程信息

    if (!Process32First (hProcessSnap, &stcPe32))

    {

        CloseHandle (hProcessSnap);

        returnfalse;

    }

 

    //3.循环遍历进程信息

    do

    {

        ProcessInfo stcInfo = { 0 };

        //3.1 获取进程映像路径

        wcscpy_s(stcInfo.szProcessstcPe32.szExeFile);

        //3.2 获取优先级信息

        hPorcess = OpenProcess(PROCESS_QUERY_INFORMATIONFALSEstcPe32.th32ProcessID);

        if (hPorcess)

        {

            stcInfo.dwPriorityClass = GetPriorityClass(hPorcess);//获取进程优先级

            CloseHandle (hPorcess);  //关闭句柄

        }

        //3.3 获取进程的其它相关信息

        stcInfo.dwPid = stcPe32.th32ProcessID;

        stcInfo.dwThreadCount = stcPe32.cntThreads;

        stcInfo.dwParentProcess = stcPe32.th32ParentProcessID;

        //3.4 将获取到的相关信息保存到向量中

        m_vecProcessList.push_back(stcInfo);

    while (Process32Next(hProcessSnap, &stcPe32));

    //4. 关闭句柄退出函数

    CloseHandle(hProcessSnap);

    return    true;

}



//遍历模块信息

bool GetModuleList(DWORDdwPid)

{

    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;

    MODULE ENTRY32me32 = { sizeof(MODULEENTRY32) };

    //1.创建一个模块相关的快照句柄

    hModuleSnap = CreateToolhelp32Snapshot(

        TH32CS_SNAPMODULE,//指定快照的类型

        dwPid   //指定进程

        );

    if (hModuleSnap == INVALID_HANDLE_VALUE)

        returnfalse;

    //2.通过模块快照句柄获取第一个模块信息

    if (!Module32First(hModuleSnap, &me32))

    {

        CloseHandle(hModuleSnap);

        returnfalse;

    }

    //3.循环获取模块信息

    m_vecModuleList.clear();

    do

    {

        m_vecModuleList.push_back(me32);

    while (Module32Next(hModuleSnap,&me32));

    //4.关闭句柄并退出函数

    CloseHandle(hModuleSnap);

    return    true;

}


快照中进程信息结构体

 typedef struct tagPROCESSENTRY3

 {

    DWORD       dwSize;             //该结构的大小

    DWORD       cntUsage;           //进程的引用计数,一般为NULL

    DWORD       th32ProcessID;      //进程PID

    ULONG_PTR   th32DefaultHeapID;  //进程默认堆ID

    DWORD       th32ModuleID;       //进程模块ID

    DWORD       cntThreads;         //进程中线程的数量

    DWORD       th32ParentProcessID;//父进程ID

    LONG        pcPriClassBase;     //进程创建的线程的基本优先级

    DWORD       dwFlags;            //内部保留使用

    TCHAR       szExeFile[MAX_PATH];//进程名

 PROCESSENTRY32, *PPROCESSENTRY32;

 

 typedef struct tagMODULEENTRY32

 {

    DWORD   dwSize;         //结构体大小

    DWORD   th32ModuleID;   //模块ID

    DWORD   th32ProcessID;  //模块所属进程ID

    DWORD   GlblcntUsage;   //无意义

    DWORD   ProccntUsage;   //无意义

    BYTE    *modBaseAddr;   //模块基址

    DWORD   modBaseSize;    //模块内存大小

    HMODULE hModule;        //模块句柄

    TCHAR   szModule[MAX_MODULE_NAME32 + 1];    //模块名

    TCHAR   szExePath[MAX_PATH];                //模块路径

 MODULEENTRY32, *PMODULEENTRY32;

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值