MCPcopy Create free account
hub / github.com/ddopson/node-segfault-handler / GetModuleListPSAPI

Method GetModuleListPSAPI

src/StackWalker.cpp:515–599  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

513 } MODULEINFO, *LPMODULEINFO;
514
515 BOOL GetModuleListPSAPI(HANDLE hProcess)
516 {
517 // EnumProcessModules()
518 typedef BOOL (__stdcall *tEPM)(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded );
519 // GetModuleFileNameEx()
520 typedef DWORD (__stdcall *tGMFNE)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, DWORD nSize );
521 // GetModuleBaseName()
522 typedef DWORD (__stdcall *tGMBN)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, DWORD nSize );
523 // GetModuleInformation()
524 typedef BOOL (__stdcall *tGMI)(HANDLE hProcess, HMODULE hModule, LPMODULEINFO pmi, DWORD nSize );
525
526 HINSTANCE hPsapi;
527 tEPM pEPM;
528 tGMFNE pGMFNE;
529 tGMBN pGMBN;
530 tGMI pGMI;
531
532 DWORD i;
533 //ModuleEntry e;
534 DWORD cbNeeded;
535 MODULEINFO mi;
536 HMODULE *hMods = 0;
537 char *tt = NULL;
538 char *tt2 = NULL;
539 const SIZE_T TTBUFLEN = 8096;
540 int cnt = 0;
541
542 hPsapi = LoadLibrary( _T("psapi.dll") );
543 if (hPsapi == NULL)
544 return FALSE;
545
546 pEPM = (tEPM) GetProcAddress( hPsapi, "EnumProcessModules" );
547 pGMFNE = (tGMFNE) GetProcAddress( hPsapi, "GetModuleFileNameExA" );
548 pGMBN = (tGMFNE) GetProcAddress( hPsapi, "GetModuleBaseNameA" );
549 pGMI = (tGMI) GetProcAddress( hPsapi, "GetModuleInformation" );
550 if ( (pEPM == NULL) || (pGMFNE == NULL) || (pGMBN == NULL) || (pGMI == NULL) )
551 {
552 // we couldn�t find all functions
553 FreeLibrary(hPsapi);
554 return FALSE;
555 }
556
557 hMods = (HMODULE*) malloc(sizeof(HMODULE) * (TTBUFLEN / sizeof HMODULE));
558 tt = (char*) malloc(sizeof(char) * TTBUFLEN);
559 tt2 = (char*) malloc(sizeof(char) * TTBUFLEN);
560 if ( (hMods == NULL) || (tt == NULL) || (tt2 == NULL) )
561 goto cleanup;
562
563 if ( ! pEPM( hProcess, hMods, TTBUFLEN, &cbNeeded ) )
564 {
565 //_ftprintf(fLogFile, _T("%lu: EPM failed, GetLastError = %lu\n"), g_dwShowCount, gle );
566 goto cleanup;
567 }
568
569 if ( cbNeeded > TTBUFLEN )
570 {
571 //_ftprintf(fLogFile, _T("%lu: More than %lu module handles. Huh?\n"), g_dwShowCount, lenof( hMods ) );
572 goto cleanup;

Callers

nothing calls this directly

Calls 1

LoadModuleMethod · 0.95

Tested by

no test coverage detected