• C/C++ 实现windows进程/线程/模块 遍历


    //遍历进程

    #include <windows.h>
    #include <tlhelp32.h> //进程快照函数头文件
    #include <stdio.h>

    int main()
    {
    int countProcess=0; //当前进程数量计数变量
    PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
    currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
    HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照

    if (hProcess == INVALID_HANDLE_VALUE)
    {
    printf("CreateToolhelp32Snapshot()调用失败!");
    return -1;
    }

    bool bMore=Process32First(hProcess,&currentProcess); //获取第一个进程信息
    while(bMore)
    {
    printf("PID=%5u PName= %s ",currentProcess.th32ProcessID,currentProcess.szExeFile); //遍历进程快照,轮流显示每个进程信息
    bMore=Process32Next(hProcess,&currentProcess); //遍历下一个
    countProcess++;
    }

    CloseHandle(hProcess); //清除hProcess句柄
    printf("共有以上%d个进程在运行 ",countProcess);
    system("pause");
    return 0;
    }

    //遍历线程

    #include <windows.h>
    #include <TlHelp32.h>

    #include <iostream>
    #include <map>
    #include <string>
    using namespace std;

    BOOL traverseProcess(std::map<std::string, int>&_nameID)
    {

    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    HANDLE hProcessSnap;
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
    cout << "CreateToolhelp32Snapshot Error!" << endl;
    return false;
    }

    if (!Process32First(hProcessSnap, &pe32))
    {
    cout << "Process32First Error!" << endl;
    CloseHandle(hProcessSnap);
    return false;
    }

    int num = 0;
    do{

    int id = pe32.th32ProcessID;

    cout << "[" << ++num << "]:" << "------------" << "Process ID = " << id << endl;

    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

    return true;


    }

    int main()
    {
    map<string, int> _nameID;

    if (!traverseProcess(_nameID))
    {
    cout << "Start Process Error!" << endl;
    }

    system("pause");

    }

    //遍历进程模块1

    #include <windows.h>
    #include <TlHelp32.h>
    #include <locale.h>
    #include <stdio.h>

    bool GetModuleList(DWORD dwPId)
    {
    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 {
    wprintf(L"模块基址:%d,模块大小:%d,模块名称:%s",me32.modBaseAddr, me32.modBaseSize, me32.szModule);
    } while (Module32Next(hModuleSnap, &me32));

    // 4. 关闭句柄并退出函数
    CloseHandle(hModuleSnap);
    }

    int main()
    {
    setlocale(LC_ALL, "chs");
    DWORD dwId = 0;
    printf("请输入一个ID:");
    scanf_s("%ud", &dwId);
    GetModuleList(dwId);
    getchar();
    }

    //遍历进程模块2
    #include <stdio.h>
    //#include <stdlib.h>
    //#include <windows.h>
    //#include <Tlhelp32.h>


    #include <atlstr.h>
    #include <windows.h>
    #include <TlHelp32.h>

    #include <iostream>
    #include <map>
    #include <string>

    BOOL SetProcessPrivilege(char *lpName, BOOL opt);

    int main(int argc, char *argv[])
    {
    PROCESSENTRY32 pe32;
    MODULEENTRY32 me32;
    HANDLE hProcess, hSnapshot_proc, hSnapshot_mod;
    pe32.dwSize = sizeof(pe32);
    SetProcessPrivilege("SeDebugPrivilege", 1);
    hSnapshot_proc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (Process32First(hSnapshot_proc, &pe32))
    {
    do
    {
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);
    if (pe32.th32ProcessID && pe32.th32ProcessID != 4 && pe32.th32ProcessID != 8)
    {
    printf("PID: %d >>> ProcName: %s", pe32.th32ProcessID, pe32.szExeFile);
    me32.dwSize = sizeof(me32);
    hSnapshot_mod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
    Module32First(hSnapshot_mod, &me32);
    do
    {
    printf("ModName: %s -> Path: %s", me32.szModule, me32.szExePath);
    } while (Module32Next(hSnapshot_mod, &me32));
    printf("------");
    CloseHandle(hSnapshot_mod);
    }
    CloseHandle(hProcess);
    } while (Process32Next(hSnapshot_proc, &pe32));
    }
    SetProcessPrivilege("SeDebugPrivilege", 0);
    CloseHandle(hSnapshot_proc);
    system("pause");
    return 0;
    }

    BOOL SetProcessPrivilege(char *lpName, BOOL opt)
    {
    HANDLE tokenhandle;
    TOKEN_PRIVILEGES NewState;

    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tokenhandle))
    {
    LookupPrivilegeValue(NULL, lpName, &NewState.Privileges[0].Luid);
    NewState.PrivilegeCount = 1;
    NewState.Privileges[0].Attributes = opt != 0 ? 2 : 0;
    AdjustTokenPrivileges(tokenhandle, FALSE, &NewState, sizeof(NewState), NULL, NULL);
    CloseHandle(tokenhandle);
    return 1;
    }
    else
    {
    return 0;
    }
    }


    // 遍历模块3

    #include <stdio.h>

    #include <atlstr.h>
    #include <windows.h>
    #include <TlHelp32.h>

    #include <iostream>
    #include <map>
    #include <string>

    void GetModuleList(DWORD dwPId) {
    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
    MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };

    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPId);

    if (!Module32First(hModuleSnap, &me32))
    {
    CloseHandle(hModuleSnap);
    }
    do {
    printf("ModeBase: %d ModeSize: %d %s", me32.modBaseAddr, me32.modBaseSize, me32.szExePath);
    } while (Module32Next(hModuleSnap, &me32));
    }

    int main()
    {
    DWORD dwId = 1988;
    GetModuleList(dwId);
    getchar();
    }

    本文引用地址:

    (http://t.zoukankan.com/LyShark-p-9158601.html)

  • 相关阅读:
    [SCOI2016]幸运数字
    [CQOI2013]新Nim游戏
    POJ-2485 Highways---最小生成树中最大边
    最小生成树之kruskal算法
    POJ-1789 Truck History---最小生成树Prim算法
    最小生成树之prim算法
    POJ-1182 食物链---并查集(附模板)
    POJ-2993 Emag eht htiw Em Pleh---棋盘模拟
    POJ-2996 Help Me with the Game---模拟棋子
    POJ-1573 Robot Motion模拟
  • 原文地址:https://www.cnblogs.com/roea1/p/14756400.html
Copyright © 2020-2023  润新知