Получение полного пути к любой dll библиотеке

222
26 октября 2017, 09:50

Разрабатываю приложение, выводящее различную информацию о процессах в системе. Одна из задач - вывести список используемых процессом 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; }
}
Answer 1

Воспользовался функцией GetModuleHandle вместо GetModuleHandleEx, получил необходимое поведение.

READ ALSO
Код функций default

Код функций default

Какой код (исходный) генерирует компилятор, если специальные функции-члены объявлены как default? Приведите, пожалуйста, пример на основе некоторого...

199
Распаралелить цикл

Распаралелить цикл

Здравствуйте! Необходимо распараллелить цикл

331
Включение шаблонов и std::enable_if

Включение шаблонов и std::enable_if

Это пример кода с сайта cppreferencecom

295