Разрабатываю приложение, выводящее различную информацию о процессах в системе. Одна из задач - вывести список используемых процессом dll библиотек и полных путей к ним. С именами библиотек проблем не возникло, но вот с получением путей косяки. Пытался использовать GetModuleFileName в паре с GetModuleHandleEx, но постоянно на всем списке модулей получаю путь к запущенному исполняемому файлу.
Код:
bool process::GenerateProcessDllList()
{
dll_list.clear();
MODULEENTRY32 moduleInfo;
moduleInfo.dwSize = sizeof(moduleInfo);
HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, this->PID);
if (processesSnapshot != INVALID_HANDLE_VALUE)
{
for (BOOL bok = Module32First(processesSnapshot, &moduleInfo); bok; bok = Module32Next(processesSnapshot, &moduleInfo))
{
std::wstring temp(moduleInfo.szModule);
TCHAR path[MAX_PATH] = { 0 };
HMODULE hm = NULL;
if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, moduleInfo.szModule, &hm))
{
GetModuleFileName(hm, path, sizeof(path));
std::wcout << path << std::endl;
}
if (IsUsingAslr(moduleInfo.szModule)) { temp += L" - [ASLR]"; }
else { temp += L" - [NO ASLR]"; }
this->dll_list.push_back(temp);
}
CloseHandle(processesSnapshot);
return true;
}
else { return false; }
}
Воспользовался функцией GetModuleHandle вместо GetModuleHandleEx, получил необходимое поведение.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Какой код (исходный) генерирует компилятор, если специальные функции-члены объявлены как default? Приведите, пожалуйста, пример на основе некоторого...