zoukankan      html  css  js  c++  java
  • win32

    目标:创建一个app,使用CreateToolhelp32Snapshot扫描所有的进程,并将进程的pid和exe名字映射到内存中,再在另一个app中使用OpenFileMapping打开该映射读取相关数据

    Project 1:

    #define _CRT_SECURE_NO_WARNINGS
    #include <Windows.h>
    #include <stdio.h>
    #include <Tlhelp32.h>
    #include <vector>
    
    struct InfoProces {
        DWORD pid;
        DWORD ppid;
        char  exeName[256];
    };
    
    int main() {
        HANDLE hProcesses;
        PROCESSENTRY32 pe32;
    
        hProcesses = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hProcesses == INVALID_HANDLE_VALUE)
        {
            printf("CreateToolhelp32Snapshot failed. err = %d", GetLastError());
            return -1;
        }
    
        pe32.dwSize = sizeof(PROCESSENTRY32);
    
        if (!Process32First(hProcesses, &pe32)) {
            printf("Process32First failed. err = %d", GetLastError());
            CloseHandle(hProcesses);
            return -1;
        }
    
    
        HANDLE hdata = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024 * 1024, "data");
        if (hdata == NULL) {
            printf("Can't create a file mapping. err = %d", GetLastError());
            return -1;
        }
    
        unsigned char* pdata = (unsigned char*)MapViewOfFile(hdata, FILE_MAP_WRITE, 0, 0, 0);
        if (pdata == NULL) {
            printf("cant get pointer to mapping file. err = %d", GetLastError());
            return -1;
        }
    
        unsigned char* begin = pdata;
        DWORD count = 0;
        pdata += sizeof(DWORD);
    
    
        do {
            InfoProces pi;
            pi.pid = pe32.th32ProcessID;
            pi.ppid = pe32.th32ParentProcessID;
            strcpy(pi.exeName, pe32.szExeFile);
            memcpy(pdata, &pi, sizeof(InfoProces));
            pdata += sizeof(InfoProces);
            count++;
    
        } while (Process32Next(hProcesses, &pe32));
    
        memcpy(begin, &count, sizeof(DWORD));
    
        getchar();
        UnmapViewOfFile(begin);
        CloseHandle(hdata);
        CloseHandle(hProcesses);
        return 0;
    }

    Project 2:

    #define _CRT_SECURE_NO_WARNINGS
    #include <Windows.h>
    #include <vector>
    #include <stdio.h>
    
    struct InfoProces {
        DWORD pid;
        DWORD ppid;
        char  exeName[256];
    };
    
    int main()
    {
        HANDLE hdata = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, "data");
    
        unsigned char* pdata = (unsigned char*)MapViewOfFile(hdata, FILE_MAP_READ, 0, 0, 0);
        if (pdata == NULL) {
            printf("cant get pointer to mapped file. err = %d", GetLastError());
            return -1;
        }
        unsigned char* begin = pdata;
        DWORD count = 0;
        memcpy(&count, pdata, sizeof(DWORD));
        pdata += sizeof(DWORD);
        std::vector<InfoProces>processes;
        processes.resize(count);
        memcpy(processes.data(), pdata, sizeof(InfoProces)*count);
    
    
        for (std::vector<InfoProces>::iterator i = processes.begin(); i < processes.end(); i++)
            printf("Process[%d](parinte[%d]): %s
    ", i->pid, i->ppid, i->exeName);
        UnmapViewOfFile(begin);
        return 0;
    }
  • 相关阅读:
    跨域调用webapi web端跨域调用webapi
    如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)
    MVC中使用SignaIR入门教程
    Axure RP是一个专业的快速原型设计工具
    angularJS 学习演示
    说说Angular中的$timeOut定时器
    镜像服务器文件实时监控同步程序
    服务器文件同步管理
    MySQL 数据库双向镜像、循环镜像(复制)
    vs2015密钥 企业版 专业版 (vs.net)
  • 原文地址:https://www.cnblogs.com/strive-sun/p/13964147.html
Copyright © 2011-2022 走看看