VC中遍历目标进程中的模块



VC中遍历目标进程中的模块 MFC代码

win32 也可以用 在下面代码进行修改转换就可以了
CString strModule; 可以换成 char* 但是MODULEENTRY32结构中的szModule是WCHAR
由于博主基础知识较差 所以使用的MFC里的Cstring函数
#include <Tlhelp32.h>

/***************************************************/
/*  函数: 查找目标进程中是否有指定模块信息
/*  参数:DWORD 目标进程ID
/*  参数:char* 指定模块名称 例如"ntdll.dll"
/*	返回: 无
/*  创建人:			日期		内容
/*	金胖胖		2015年2月25日	新建
/***************************************************/
bool CUIConsoleDlg::GetAllModules(DWORD dWProcessId,char* szModuleName)
{
	CString strModule;
	BOOL    bFound =   FALSE;     
	HANDLE  hModuleSnap  =  NULL;     
	MODULEENTRY32   me32   =   {0};     
	hModuleSnap  =  ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dWProcessId);     
	if(hModuleSnap == INVALID_HANDLE_VALUE)    
	{
		return false;      
	}
	me32.dwSize = sizeof(MODULEENTRY32);     
	if(::Module32First(hModuleSnap,   &me32))     
	{     
		do     
		{     
			strModule.Format("%s",me32.szModule);
			if (!strcmp(szModuleName,strModule.GetBuffer())) // 如果找到则返回true
			{
				::CloseHandle(hModuleSnap);
				return true;
			}
		}     
		while(::Module32Next(hModuleSnap,&me32));     
	}     
	::CloseHandle(hModuleSnap);
	return false;
}



/***************************************************/
/*  函数: 测试按钮函数
/*	返回: 无
/*  创建人:			日期		内容
/*	金胖胖		2015年2月25日	新建
/***************************************************/
void CUIConsoleDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	this->m_list.DeleteAllItems();
	DWORD dwID = ::GetCurrentProcessId();
	
	if (this->GetAllModules(dwID,"GameHelpMfcDll.dll"))
	{
		AfxMessageBox("找到模块了");
	}
	else
	{
		AfxMessageBox("没找到模块");
	}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。