MCPcopy Create free account
hub / github.com/cuberite/cuberite / GetModuleListPSAPI

Method GetModuleListPSAPI

src/StackWalker.cpp:624–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 2

LoadModuleMethod · 0.95
OnDbgHelpErrMethod · 0.45

Tested by

no test coverage detected