Не работает Module32First() c++
Имеется вот такой код:
void get_m(const char* m_name, DWORD pid)
{
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
MODULEENTRY32 m_entry;
if (Module32First(hSnap, &m_entry))
{
std::cout << m_entry.szModule << (DWORD)m_entry.modBaseAddr << std::endl;
while (Module32Next(hSnap, &m_entry))
{
std::cout << m_entry.szModule << (DWORD)m_entry.modBaseAddr << std::endl;
}
}
else
std::cout << "failed";
CloseHandle(hSnap);
Он выводит список модулей запущенного процесса и их адреса. Но проблемы начинаются еще на стадии вызова функции Module32First, и в итоге выводится failed, хотя программа должна работать дальше и делать вышесказанное. Не могли бы вы подсказать, что я делаю не так и как это исправить?
Ответы (1 шт):
Автор решения: PRODIGY
→ Ссылка
Для обычного перечисления модулей программы, функции API Module32First/Next() слишком громоздки, поскольку требуют цикла. Для этих целей лучше использовать EnumerateLoadedModules() из библиотеки Dbghelp.dll. Она за один вызов возвращает информацию сразу обо всех модулях. Описание здесь..