win32 api遍历文件,进程

// cmd_mfc.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <Windows.h>
#include <list>
#include <string>
#include <iostream>
#include <TlHelp32.h>
using namespace std;
void enum_process()
{
	HANDLE hProcessSnap=NULL;
	PROCESSENTRY32 pe32={0};
	hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap==(HANDLE)-1)
	{
		cout<<"CreateToolhelp32Snapshot failed"<<endl;
	}
	pe32.dwSize=sizeof(PROCESSENTRY32);
	if(Process32First(hProcessSnap,&pe32))
	{
		do
		{
			printf("%-20s         ID:%-5d\n",pe32.szExeFile,pe32.th32ProcessID);
		}
		while(Process32Next(hProcessSnap,&pe32));
	}
	else
	{
		cout<<"出现意外错误!错误提示"<<endl;
	}
	CloseHandle(hProcessSnap);
}
//win api 遍历文件目录
void nr_enum_path(char *cpath){
	list<string> dir_list;
	string cdir,subdir;
	WIN32_FIND_DATA wfd;
	HANDLE hfd;
	int r;
	dir_list.push_back(string(cpath));
	while(dir_list.size()) {
		cdir = dir_list.back();
		dir_list.pop_back();
		SetCurrentDirectory(cdir.c_str());
		hfd = FindFirstFile("*.*",&wfd);
		if(hfd!=INVALID_HANDLE_VALUE) {
			do{
				if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{ 
					if(wfd.cFileName[0] != '.') {
						// 合成完整路径名
						subdir=cdir+"\\"+string(wfd.cFileName);
						cout<<"push subdir: "<<subdir<<endl;
						// 递归枚举子目录
						dir_list.push_back(string(subdir));
					}
				}else{
					printf("%s\\%s\n",cpath,wfd.cFileName);
					// 病毒可根据后缀名判断
					// 是否要感染相应的文件
				}
			}while(r=FindNextFile(hfd,&wfd),r!=0);
		}
	}//end while 
} 

//搜索目录文件
void enum_path(char *cpath){
	WIN32_FIND_DATA wfd; 
	HANDLE hfd; 
	char cdir[MAX_PATH]; 
	char subdir[MAX_PATH]; 
	int r; 
	GetCurrentDirectory(MAX_PATH,cdir); 
	SetCurrentDirectory(cpath); 
	hfd = FindFirstFile("*.*",&wfd); 
	if(hfd!=INVALID_HANDLE_VALUE) 
	{ 
		do{
			if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				if(wfd.cFileName[0] != '.'){
					// 合成完整路径名
					sprintf(subdir,"%s\\%s",cpath,wfd.cFileName);
					// 递归枚举子目录
					enum_path(subdir);
				}
			}else{
				printf("%s\\%s\n",cpath,wfd.cFileName);
				// 病毒可根据后缀名判断是否要感染相应的文件
			}
	
		}while(r=FindNextFile(hfd,&wfd),r!=0);
		
	}
		SetCurrentDirectoryA(cdir);
}
int _tmain(int argc, _TCHAR* argv[])
{
	//nr_enum_path("d:\\tomcat");
	enum_process();
	//enum_path("d:\\tomcat");
	getchar();

	return 0;
}

你可能感兴趣的:(win32 api遍历文件,进程)