MCPcopy Create free account
hub / github.com/JochenKalmbach/StackWalker / LoadModule

Method LoadModule

Main/StackWalker/StackWalker.cpp:721–811  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

719 } // GetModuleListPSAPI
720
721 DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size)
722 {
723 CHAR* szImg = _strdup(img);
724 CHAR* szMod = _strdup(mod);
725 DWORD result = ERROR_SUCCESS;
726 if ((szImg == NULL) || (szMod == NULL))
727 result = ERROR_NOT_ENOUGH_MEMORY;
728 else
729 {
730 if (pSLM(hProcess, 0, szImg, szMod, baseAddr, size) == 0)
731 result = GetLastError();
732 }
733 ULONGLONG fileVersion = 0;
734 if ((m_parent != NULL) && (szImg != NULL))
735 {
736 // try to retrieve the file-version:
737 if ((this->m_parent->m_options & StackWalker::RetrieveFileVersion) != 0)
738 {
739 VS_FIXEDFILEINFO* fInfo = NULL;
740 DWORD dwHandle;
741 DWORD dwSize = GetFileVersionInfoSizeA(szImg, &dwHandle);
742 if (dwSize > 0)
743 {
744 LPVOID vData = malloc(dwSize);
745 if (vData != NULL)
746 {
747 if (GetFileVersionInfoA(szImg, dwHandle, dwSize, vData) != 0)
748 {
749 UINT len;
750 TCHAR szSubBlock[] = _T("\\");
751 if (VerQueryValue(vData, szSubBlock, (LPVOID*)&fInfo, &len) == 0)
752 fInfo = NULL;
753 else
754 {
755 fileVersion =
756 ((ULONGLONG)fInfo->dwFileVersionLS) + ((ULONGLONG)fInfo->dwFileVersionMS << 32);
757 }
758 }
759 free(vData);
760 }
761 }
762 }
763
764 // Retrieve some additional-infos about the module
765 IMAGEHLP_MODULE64_V3 Module;
766 const char* szSymType = "-unknown-";
767 if (this->GetModuleInfo(hProcess, baseAddr, &Module) != FALSE)
768 {
769 switch (Module.SymType)
770 {
771 case SymNone:
772 szSymType = "-nosymbols-";
773 break;
774 case SymCoff: // 1
775 szSymType = "COFF";
776 break;
777 case SymCv: // 2
778 szSymType = "CV";

Callers 2

GetModuleListTH32Method · 0.95
GetModuleListPSAPIMethod · 0.95

Calls 2

GetModuleInfoMethod · 0.95
OnLoadModuleMethod · 0.80

Tested by

no test coverage detected