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

Method LoadModule

src/StackWalker.cpp:601–684  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

599 } // GetModuleListPSAPI
600
601 DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size)
602 {
603 CHAR *szImg = _strdup(img);
604 CHAR *szMod = _strdup(mod);
605 DWORD result = ERROR_SUCCESS;
606 if ( (szImg == NULL) || (szMod == NULL) )
607 result = ERROR_NOT_ENOUGH_MEMORY;
608 else
609 {
610 if (pSLM(hProcess, 0, szImg, szMod, baseAddr, size) == 0)
611 result = GetLastError();
612 }
613 ULONGLONG fileVersion = 0;
614 if ( (m_parent != NULL) && (szImg != NULL) )
615 {
616 // try to retrive the file-version:
617 if ( (this->m_parent->m_options & StackWalker::RetrieveFileVersion) != 0)
618 {
619 VS_FIXEDFILEINFO *fInfo = NULL;
620 DWORD dwHandle;
621 DWORD dwSize = GetFileVersionInfoSizeA(szImg, &dwHandle);
622 if (dwSize > 0)
623 {
624 LPVOID vData = malloc(dwSize);
625 if (vData != NULL)
626 {
627 if (GetFileVersionInfoA(szImg, dwHandle, dwSize, vData) != 0)
628 {
629 UINT len;
630 TCHAR szSubBlock[] = _T("\\");
631 if (VerQueryValue(vData, szSubBlock, (LPVOID*) &fInfo, &len) == 0)
632 fInfo = NULL;
633 else
634 {
635 fileVersion = ((ULONGLONG)fInfo->dwFileVersionLS) + ((ULONGLONG)fInfo->dwFileVersionMS << 32);
636 }
637 }
638 free(vData);
639 }
640 }
641 }
642
643 // Retrive some additional-infos about the module
644 IMAGEHLP_MODULE64_V2 Module;
645 const char *szSymType = "-unknown-";
646 if (this->GetModuleInfo(hProcess, baseAddr, &Module) != FALSE)
647 {
648 switch(Module.SymType)
649 {
650 case SymNone:
651 szSymType = "-nosymbols-";
652 break;
653 case SymCoff:
654 szSymType = "COFF";
655 break;
656 case SymCv:
657 szSymType = "CV";
658 break;

Callers 2

GetModuleListTH32Method · 0.95
GetModuleListPSAPIMethod · 0.95

Calls 2

GetModuleInfoMethod · 0.95
OnLoadModuleMethod · 0.80

Tested by

no test coverage detected