文章目录
GetModuleFileNameExW
作用:通过进程句柄获取模块文件路径
原理:进程模块列表本身就包含exe,即exe也是模块之一。
限制: 1. 需要hProcess句柄具有PROCESS_QUERY_INFORMATION 和 PROCESS_VM_READ(或者PROCESS_QUERY_LIMITED_INFORMATION)访问权限 2. 可能存在获取失败的可能(比如内核进程获取模块名就会失败)
属于PSAPI系列 (Process State)
GetProcessImageFileName
作用:检索指定进程的可执行文件的名称。
原理:暂不清楚
属于PSAPI系列 (Process State)
QueryFullProcessImageName
作用:检索指定进程的可执行映像的全名
原理:暂不清楚
属于WinBase系列
根据官方的说法 推荐:
Windows 2000 = GetModuleFileNameEx()
Windows XP/Server2003 = GetProcessImageFileName()
Windows Vista/7/8/10/Server2008/Server2012 = QueryFullProcessImageName()
PssCaptureSnapshot
作用:捕获目标进程的快照从而获取对应的进程信息
原理:捕获目标进程的快照
限制:1.win 8.1以上才支持
属于PssAPI系列(Process Snap Shot)
使用如下:
#include <Windows.h>
#include <ProcessSnapshot.h>
#include <stdio.h>
void main()
{
HPSS hPssHandle = NULL;
if (PssCaptureSnapshot(GetCurrentProcess(), PSS_CAPTURE_HANDLE_BASIC_INFORMATION, 0, &hPssHandle) == ERROR_SUCCESS)
{
PSS_PROCESS_INFORMATION pssProcess = {};
PssQuerySnapshot(hPssHandle, PSS_QUERY_PROCESS_INFORMATION, &pssProcess, sizeof(pssProcess));
// ...
printf("path:%S\n", pssProcess.ImageFileName);
// ...
PssFreeSnapshot(GetCurrentProcess(), hPssHandle);
}
ExitProcess(0);
}
EnumProcesses
作用:检索系统中每个进程对象的进程标识符。
原理:获取当前系统的进程列表。
注意:短进程可能也在其中,但是无法获取进程句柄
属于PSAPI系列 (Process State)
使用用例参考:
CreateToolhelp32Snapshot
作用:获取指定进程以及这些进程使用的堆、模块和线程的快照。
原理:对当前系统的进程列表进行快照保存
注意:可以获取到短进程的部分信息。
属于Toolhelp系列(工具帮助函数)
使用用例参考:
相同与区别
| WINAPI | GetModuleFileNameExW | GetProcessImageFileName | PssCaptureSnapshot | QueryFullProcessImageName | EnumProcesses | CreateToolhelp32Snapshot |
|---|---|---|---|---|---|---|
| 最低支持平台 | Windows XP/2003 | Windows XP/2003 | Windows Vista/2008 | Windows 8.1/2012R2 | Windows XP/2003 | Windows XP/2003 |
| 使用思路 | 1 | 2 | 3 | 4 | 5 | 6 |