MCPcopy Create free account
hub / github.com/cuberite/cuberite / LoadModule

Method LoadModule

src/StackWalker.cpp:710–793  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 2

GetModuleListTH32Method · 0.95
GetModuleListPSAPIMethod · 0.95

Calls 2

GetModuleInfoMethod · 0.95
OnLoadModuleMethod · 0.80

Tested by

no test coverage detected