| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 34 - Сканируем модули.

Продолжаем изучать возможности ToolHelp.Dll. Мы так же работаем с проектом, который создавали ранее. Наша задача теперь просмотреть модули загруженные в память. Создаем ScanModule кнопку на форме. Вот как это будет выглядеть:

34.gif (6084 b)

А вот и код функции:

void CScanProcessDlg::OnScanModule() 
{
	m_List1.ResetContent(); 
	HANDLE hSnap;
	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0);
	if (hSnap == NULL) 
	{
		AfxMessageBox("Error Load ToolHelp");
	}
	else
    {
	MODULEENTRY32 mod;
	if (Module32First(hSnap, &mod))
	{
		m_List1.AddString(mod.szExePath);
		while (Module32Next(hSnap, &mod)) 
		{
		m_List1.AddString(mod.szExePath);
		}
	}
	CloseHandle(hSnap);
	}
}
Как видите существенных изменений в логике нет. Поменяли флаг TH32CS_SNAPMODULE и стали использовать новые функции Module32First() и Module32Next() связанные со структурой MODULEENTRY32. Вообще-то модули привязаны к процессам. Но пока мы просто их поискали. Давайте изменим код для того, чтобы найти модули связанные с определенным процессом. ВНИМАНИЕ код написан для демонстрации идеи на данный момент. То есть многие вещи надо было бы выделить в отдельные процедуры, например, SearсhProcess. Идея такая. Как зная процесс найти связанные с ним DLL ?
void CScanProcessDlg::OnScanModule() 
{
int inIndex;
inIndex=m_List1.GetCurSel();
if (inIndex!=LB_ERR)
{
	CString csExName;
	m_List1.GetText(inIndex,csExName); 
	HANDLE hSnap1;
 	hSnap1 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hSnap1 == NULL) 
	{
		AfxMessageBox("Error Load ToolHelp");
	}
	else
	{
	PROCESSENTRY32 proc;
	if (Process32First(hSnap1, &proc))
	{
	while (Process32Next(hSnap1, &proc)) 
	{
	if (csExName==proc.szExeFile)
	{
		m_List1.ResetContent(); 
		HANDLE hSnap;
 		hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
				proc.th32ProcessID);
		if (hSnap == NULL) 
		{
			AfxMessageBox("Error Load ToolHelp");
		}
		else
		{
		MODULEENTRY32 mod;
		if (Module32First(hSnap, &mod))
		{
			m_List1.AddString(mod.szExePath);
			while (Module32Next(hSnap, &mod)) 
			{
				m_List1.AddString(mod.szExePath );
			}
		}
		CloseHandle(hSnap);
		}
	}
	}
	}
     CloseHandle(hSnap1);
	}
}
else AfxMessageBox("Select Process");
}
Можно передать ID процесса и найти связанные с ним модули hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, proc.th32ProcessID);.
Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz