MCPcopy Create free account
hub / github.com/aardappel/treesheets / LoadModule

Method LoadModule

src/StackWalker/StackWalker.cpp:703–789  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

701 } // GetModuleListPSAPI
702
703 DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size)
704 {
705 CHAR *szImg = _strdup(img);
706 CHAR *szMod = _strdup(mod);
707 DWORD result = ERROR_SUCCESS;
708 if ( (szImg == NULL) || (szMod == NULL) )
709 result = ERROR_NOT_ENOUGH_MEMORY;
710 else
711 {
712 if (pSLM(hProcess, 0, szImg, szMod, baseAddr, size) == 0)
713 result = GetLastError();
714 }
715 ULONGLONG fileVersion = 0;
716 if ( (m_parent != NULL) && (szImg != NULL) )
717 {
718 // try to retrive the file-version:
719 if ( (this->m_parent->m_options & StackWalker::RetrieveFileVersion) != 0)
720 {
721 VS_FIXEDFILEINFO *fInfo = NULL;
722 DWORD dwHandle;
723 DWORD dwSize = GetFileVersionInfoSizeA(szImg, &dwHandle);
724 if (dwSize > 0)
725 {
726 LPVOID vData = malloc(dwSize);
727 if (vData != NULL)
728 {
729 if (GetFileVersionInfoA(szImg, dwHandle, dwSize, vData) != 0)
730 {
731 UINT len;
732 TCHAR szSubBlock[] = _T("\\");
733 if (VerQueryValue(vData, szSubBlock, (LPVOID*) &fInfo, &len) == 0)
734 fInfo = NULL;
735 else
736 {
737 fileVersion = ((ULONGLONG)fInfo->dwFileVersionLS) + ((ULONGLONG)fInfo->dwFileVersionMS << 32);
738 }
739 }
740 free(vData);
741 }
742 }
743 }
744
745 // Retrive some additional-infos about the module
746 IMAGEHLP_MODULE64_V3 Module;
747 const char *szSymType = "-unknown-";
748 if (this->GetModuleInfo(hProcess, baseAddr, &Module) != FALSE)
749 {
750 switch(Module.SymType)
751 {
752 case SymNone:
753 szSymType = "-nosymbols-";
754 break;
755 case SymCoff: // 1
756 szSymType = "COFF";
757 break;
758 case SymCv: // 2
759 szSymType = "CV";
760 break;

Callers 2

GetModuleListTH32Method · 0.95
GetModuleListPSAPIMethod · 0.95

Calls 2

GetModuleInfoMethod · 0.95
OnLoadModuleMethod · 0.45

Tested by

no test coverage detected