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

Method GetModuleInfo

3rdparty/StackWalker/StackWalker.cpp:828–874  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

826 }
827
828 BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE64_V3* pModuleInfo)
829 {
830 memset(pModuleInfo, 0, sizeof(IMAGEHLP_MODULE64_V3));
831 if (this->pSGMI == NULL)
832 {
833 SetLastError(ERROR_DLL_INIT_FAILED);
834 return FALSE;
835 }
836 // First try to use the larger ModuleInfo-Structure
837 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
838 void* pData = malloc(
839 4096); // reserve enough memory, so the bug in v6.3.5.1 does not lead to memory-overwrites...
840 if (pData == NULL)
841 {
842 SetLastError(ERROR_NOT_ENOUGH_MEMORY);
843 return FALSE;
844 }
845 memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V3));
846 static bool s_useV3Version = true;
847 if (s_useV3Version)
848 {
849 if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*)pData) != FALSE)
850 {
851 // only copy as much memory as is reserved...
852 memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V3));
853 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
854 free(pData);
855 return TRUE;
856 }
857 s_useV3Version = false; // to prevent unnecessary calls with the larger struct...
858 }
859
860 // could not retrieve the bigger structure, try with the smaller one (as defined in VC7.1)...
861 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
862 memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V2));
863 if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*)pData) != FALSE)
864 {
865 // only copy as much memory as is reserved...
866 memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V2));
867 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
868 free(pData);
869 return TRUE;
870 }
871 free(pData);
872 SetLastError(ERROR_DLL_INIT_FAILED);
873 return FALSE;
874 }
875};
876
877// #############################################################

Callers 2

LoadModuleMethod · 0.95
StackWalker.cppFile · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected