获取系统进程信息和进程依赖的dll信息

获取系统进程信息和进程依赖的dll信息
#include "stdafx.h"
#include <Windows.h>
#include <TlHelp32.h>
#include <stdio.h>
#include <psapi.h>
#pragma comment(lib, "psapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
    PROCESSENTRY32 pe32;//进程结构
    pe32.dwSize = sizeof(pe32); //在使用这个结构前,先设置它的大小
    //给系统内所有的进程拍个快照
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    //某个进程所有的DLL快照句柄
    HANDLE hModuleSnap = NULL;
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("CreateTollHelp32Snapshot Error!!\n");
        return -1;
    }
    BOOL bMore = ::Process32First(hProcessSnap, &pe32);
    HANDLE hProcess = 0;
    WCHAR procPath[_MAX_PATH]={0};
    MODULEENTRY32 lpme;  //DLL结构
    lpme.dwSize = sizeof(MODULEENTRY32);//在使用这个结构前,先设置它的大小
    BOOL bRet = FALSE;
    //遍历进程快照,显示每个进程的信息
    while(bMore)
    {
        //打开一个已存在的进程对象,并返回进程的句柄
        hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
        //得到该进程的全路径
        GetModuleFileNameEx(hProcess,NULL,procPath, _MAX_PATH);
        wprintf(_T("ProcPath:%s\nProcName:%s\t\tProcID:%d\n\n"), procPath, pe32.szExeFile, pe32.th32ProcessID);
        //给一个已存在的进程内所有的DLL拍个快照
        hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
        bRet = ::Module32First(hModuleSnap, &lpme);
        //遍历DLL快照,显示该进程所加在的DLL信息
        while(bRet)
        {
            wprintf(_T("\t\tModual:%s\tBase:%2x\n"),lpme.szExePath, lpme.modBaseAddr);
            bRet = ::Module32Next(hModuleSnap, &lpme);
        }
        //关闭snapshot对象
        ::CloseHandle(hModuleSnap);
        bMore = ::Process32Next(hProcessSnap, &pe32);
    }
    //关闭snapshot对象
    ::CloseHandle(hProcessSnap);
    return 0;
}




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。