MCPcopy Create free account
hub / github.com/KDAB/GammaRay / LoadModule

Method LoadModule

3rdparty/StackWalker/StackWalker.cpp:726–816  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 2

GetModuleListTH32Method · 0.95
GetModuleListPSAPIMethod · 0.95

Calls 2

GetModuleInfoMethod · 0.95
OnLoadModuleMethod · 0.45

Tested by

no test coverage detected