CreateToolhelp32Snapshot 枚举系统进程

枚举系统进程 有多种方法 

1、通过系统快照进行枚举

   CreateToolhelp32Snapshot 可以创建堆的快照、模块的快照、线程的快照、进程的快照

   Process32First

   Process32Next

2、通过psapi.dll中的函数进行枚举

3、通过ntdll.dll中的函数进行枚举

4、通过wtsapi.dll中的函数进行枚举

这里只讨论第一种方法

代码示例:

#include <Windows.h>
#include <stdio.h>
#include <tlhelp32.h>

int main(int argv, char* argc[]) {

	PROCESSENTRY32 lppe = {0};
	//设置结构大小
	lppe.dwSize = sizeof(PROCESSENTRY32);
	HANDLE help32handle = NULL;

	//给系统内所有的进程拍个快照
	help32handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if (help32handle == INVALID_HANDLE_VALUE) {
		printf("CreateToolhelp32Snapshot error");
		getchar();
		return -1;
	}
	//查找第一个进程 用PROCESSENTRY32结构保存查找到的进程信息
	BOOL bprocess = Process32First(help32handle,&lppe);

	while (bprocess)
	{
		printf("进程名:%ls  进程ID:%d\n", lppe.szExeFile,lppe.th32ProcessID);
		bprocess = Process32Next(help32handle, &lppe);
	}
	CloseHandle(help32handle);
	//closeToolhelp32Snapshot(help32handle);
	getchar();
}

查阅msdn发现个小问题

新版说 一定要用 CreateToolhelp32Snapshot 关闭快照 使用 CloseHandle 会造成内存泄露 然而我要用的时候,却说CreateToolhelp32Snapshot 未定义 百度无果 

1.png

旧版说 一定要用 CloseHandle 销毁快照 

2.png

有关两个销毁快照使用说法有什么区别暂时没得到答案 有了解的朋友欢迎留言批评指正

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《CreateToolhelp32Snapshot 枚举系统进程

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)