金鳞化龙 - 老白


智者创造机会,强者把握机会,弱者等待机会~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
这个程序没什么特殊的,就是用了Toolhelp库里的函数,主要是用CreateToolhelp32Snapshot建立句柄
然后分Process32First和Process32Next列举进程,然后在有参数的情况下用Module32First和Module32Next
列举对应进程所加载的模块,使用方法,直接运行pl列举进程,在查看到进程的对应pID时运行pl pID
此时则列举pID进程加载的模块,另,本程序没有加列举线程及终止进程、线程卸载模块的功能,等
有时间的时候再加上吧,应该会用到TerminateProcess/TerminateThread此类的函数,应该还会涉及到提
权的问题,有兴趣的朋友可以交流下呀。
#include <windows.h>
#include 
<tlhelp32.h>
#include 
<stdio.h>
#include 
<stdlib.h>

int main(int argc, char *argv[]) {
    
if(argc==1) {
        HANDLE handle 
= (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
        PROCESSENTRY32 Info;
        Info.dwSize 
= sizeof(PROCESSENTRY32);
        
if(Process32First(handle, &Info)) {
            printf(
"Process List:\n\n");
            printf(
"%-6s\t%s""PID""Process Name");
            
do {
                printf(
"\n%-6d\t%-10s", (int)Info.th32ProcessID, Info.szExeFile);
            }
while (Process32Next(handle, &Info));
        }
        CloseHandle(handle);
        
return 0;
    }
else {
        HANDLE handle 
= (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, atoi(argv[1]));

        MODULEENTRY32 lInfo;
        lInfo.dwSize 
= sizeof(MODULEENTRY32);

        
if(Module32First(handle, &lInfo)) {
            printf(
"Module List of %s:\n\n", lInfo.szModule);
            printf(
"%-16s\t%s""Module Name""Module Path");
            
do{
                printf(
"\n%-16s\t%s", lInfo.szModule, lInfo.szExePath);
            }
while(Module32Next(handle, &lInfo));
        }
        CloseHandle(handle);
        
return 0;
    }
}


已编译版本下载地址:https://files.cnblogs.com/tobylee/pl.rar