MCPcopy Create free account
hub / github.com/KDAB/GammaRay / GetModuleListPSAPI

Method GetModuleListPSAPI

3rdparty/StackWalker/StackWalker.cpp:633–724  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

631 } MODULEINFO, *LPMODULEINFO;
632
633 BOOL GetModuleListPSAPI(HANDLE hProcess)
634 {
635 // EnumProcessModules()
636 typedef BOOL(__stdcall * tEPM)(HANDLE hProcess, HMODULE * lphModule, DWORD cb,
637 LPDWORD lpcbNeeded);
638 // GetModuleFileNameEx()
639 typedef DWORD(__stdcall * tGMFNE)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename,
640 DWORD nSize);
641 // GetModuleBaseName()
642 typedef DWORD(__stdcall * tGMBN)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename,
643 DWORD nSize);
644 // GetModuleInformation()
645 typedef BOOL(__stdcall * tGMI)(HANDLE hProcess, HMODULE hModule, LPMODULEINFO pmi, DWORD nSize);
646
647 HINSTANCE hPsapi;
648 tEPM pEPM;
649 tGMFNE pGMFNE;
650 tGMBN pGMBN;
651 tGMI pGMI;
652
653 DWORD i;
654 //ModuleEntry e;
655 DWORD cbNeeded;
656 MODULEINFO mi;
657 HMODULE* hMods = NULL;
658 char* tt = NULL;
659 char* tt2 = NULL;
660 const SIZE_T TTBUFLEN = 8096;
661 int cnt = 0;
662
663 hPsapi = LoadLibrary(_T("psapi.dll"));
664 if (hPsapi == NULL)
665 return FALSE;
666
667 pEPM = (tEPM)GetProcAddress(hPsapi, "EnumProcessModules");
668 pGMFNE = (tGMFNE)GetProcAddress(hPsapi, "GetModuleFileNameExA");
669 pGMBN = (tGMFNE)GetProcAddress(hPsapi, "GetModuleBaseNameA");
670 pGMI = (tGMI)GetProcAddress(hPsapi, "GetModuleInformation");
671 if ((pEPM == NULL) || (pGMFNE == NULL) || (pGMBN == NULL) || (pGMI == NULL))
672 {
673 // we couldn't find all functions
674 FreeLibrary(hPsapi);
675 return FALSE;
676 }
677
678 hMods = (HMODULE*)malloc(sizeof(HMODULE) * (TTBUFLEN / sizeof(HMODULE)));
679 tt = (char*)malloc(sizeof(char) * TTBUFLEN);
680 tt2 = (char*)malloc(sizeof(char) * TTBUFLEN);
681 if ((hMods == NULL) || (tt == NULL) || (tt2 == NULL))
682 goto cleanup;
683
684 if (!pEPM(hProcess, hMods, TTBUFLEN, &cbNeeded))
685 {
686 //_ftprintf(fLogFile, _T("%lu: EPM failed, GetLastError = %lu\n"), g_dwShowCount, gle );
687 goto cleanup;
688 }
689
690 if (cbNeeded > TTBUFLEN)

Callers

nothing calls this directly

Calls 2

LoadModuleMethod · 0.95
OnDbgHelpErrMethod · 0.80

Tested by

no test coverage detected