美文网首页
一些简单的代码片段

一些简单的代码片段

作者: ZERO_47ce | 来源:发表于2017-11-06 14:15 被阅读0次

    前置知识:windows提供了一组快照API,使用前需要包含TlHelp32.h头文件。

    1. 能够给当前系统中的所有进程拍一个快照,能够获取所有进程的一些基本信息;
    2. 能够给当前系统中的线程拍一个快照;
    3. 能够给某一个进程拍模块快照;
    4. 能够给某一个进程拍堆快照。

    遍历进程

    int _tmain(int argc, _TCHAR* argv[])
    {
        HANDLE         hProcessSnap;   // 进程快照句柄
        HANDLE         hProcess;       // 进程句柄
        PROCESSENTRY32 stcPe32 = { 0 };  // 进程快照信息
        stcPe32.dwSize = sizeof(PROCESSENTRY32);
         
        // 1. 创建一个进程相关的快照句柄
        hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hProcessSnap == INVALID_HANDLE_VALUE)
            return false;
     
        // 2. 通过进程快照句柄获取第一个进程信息
        if (!Process32First(hProcessSnap, &stcPe32))
        {
            CloseHandle(hProcessSnap);
            return false;
        }
        // 3. 循环遍历进程信息
        do {
            // 3.2 获取优先级信息
            hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,
                stcPe32.th32ProcessID);
            if (hProcess)
            {
                int nPriority = GetPriorityClass(hProcess);//获取进程优先级
                 
                CloseHandle(hProcess);                           //关闭句柄
            }
            // 3.3 获取进程的其他相关信息
         
            printf("进程ID:%d   ",stcPe32.th32ProcessID);
            printf("线程数:%d   ",stcPe32.cntThreads);
            printf("父进程ID:%d",stcPe32.th32ParentProcessID);
            printf("进程路径:%s",stcPe32.szExeFile);
            printf("\n");
        } while (Process32Next(hProcessSnap, &stcPe32));
        // 4. 关闭句柄退出函数
        CloseHandle(hProcessSnap);
     
        return 0;
    }
    

    遍历模块

    HANDLE        hModuleSnap = INVALID_HANDLE_VALUE;
        MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };
        // 1. 创建一个模块相关的快照句柄
        hModuleSnap = CreateToolhelp32Snapshot(
            TH32CS_SNAPMODULE,  // 指定快照的类型
            dwPId);            // 指定进程
        if (hModuleSnap == INVALID_HANDLE_VALUE)
            return false;
        // 2. 通过模块快照句柄获取第一个模块信息
        if (!Module32First(hModuleSnap, &me32)) {
            CloseHandle(hModuleSnap);
            return false;
        }
        // 3. 循环获取模块信息
        do {
            //me32.th32ProcessID;
            printf("模块句柄%d  ",me32.hModule);
            printf("加载基址%d  ",me32.modBaseAddr);
            printf("模块名%s  ",me32.szExePath);
            printf("\n");
        } while (Module32Next(hModuleSnap, &me32));
        // 4. 关闭句柄并退出函数
        CloseHandle(hModuleSnap);
    

    转载:(http://www.cnblogs.com/wingss/p/5124006.html)

    相关文章

      网友评论

          本文标题:一些简单的代码片段

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