0

枚举系统进程信息

发表者:wenzhou1219分类:接口2016-04-03 22:05:49 阅读[724]

现在枚举系统进程信息常用有两种方法:

1.ToolHelp系列函数

2.PSAPI系列函数

微软现在推荐的是使用ToolHelp函数,可以下载最后链接中的演示程序看到,ToolHelp系列函数相比PSAPI函数提供了更多的进程信息。


常用的还有指定进程pid,要求得到对应的exe的全路径,这里实现使用了三种方法结合的手段:

1.QueryFullProcessImageName

Vista开始提供,非常好用,但是如果程序要兼容XP则不可用,可在32位程序中查询64位信息,微软推荐使用。

2.GetModuleFileNameEx

Windows 2000 就开始有了,但是有一个致命缺点——32位程序无法查询64位程序路径

3.ZwQueryInformationProcess

ntdll导出的内核函数,拿到的是以卷标识-类似\Device\HarddiskVolume2...开始的路径,MSDN文档标注的是2000-XP可用,之后就不保证了,但实际上到现在还是可用的,需要自己导出函数来使用


本工具类提供的静态方法如下,具体功能从命名就可以看出来:

	static BOOL Enum(PFUNC_ENUM_PROCESS pEnumFunc);
	static BOOL EnumOld(PFUNC_ENUM_PROCESS_OLD pEnumFunc);
	static HANDLE Pid_2_Handle(DWORD pid, DWORD dwAccess=PROCESS_QUERY_LIMITED_INFORMATION);
	static BOOL Pid_2_Path(DWORD pid, LPTSTR pszPath, ULONG cbPathsize);
	static BOOL Handle_2_Path(HANDLE hProcess, LPTSTR pszPath, ULONG cbPathsize);
	static BOOL IsWow64(HANDLE hProcess);
	static BOOL IsWow64(DWORD pid);

具体实现和演示代码下载链接  访问密码 42b3


名字:

个人主页地址:

E-mail:

评论列表