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

Method GetModuleInfo

src/StackWalker/StackWalker.cpp:801–846  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

799
800
801 BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE64_V3 *pModuleInfo)
802 {
803 memset(pModuleInfo, 0, sizeof(IMAGEHLP_MODULE64_V3));
804 if(this->pSGMI == NULL)
805 {
806 SetLastError(ERROR_DLL_INIT_FAILED);
807 return FALSE;
808 }
809 // First try to use the larger ModuleInfo-Structure
810 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
811 void *pData = malloc(4096); // reserve enough memory, so the bug in v6.3.5.1 does not lead to memory-overwrites...
812 if (pData == NULL)
813 {
814 SetLastError(ERROR_NOT_ENOUGH_MEMORY);
815 return FALSE;
816 }
817 memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V3));
818 static bool s_useV3Version = true;
819 if (s_useV3Version)
820 {
821 if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*) pData) != FALSE)
822 {
823 // only copy as much memory as is reserved...
824 memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V3));
825 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
826 free(pData);
827 return TRUE;
828 }
829 s_useV3Version = false; // to prevent unneccessarry calls with the larger struct...
830 }
831
832 // could not retrive the bigger structure, try with the smaller one (as defined in VC7.1)...
833 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
834 memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V2));
835 if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*) pData) != FALSE)
836 {
837 // only copy as much memory as is reserved...
838 memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V2));
839 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
840 free(pData);
841 return TRUE;
842 }
843 free(pData);
844 SetLastError(ERROR_DLL_INIT_FAILED);
845 return FALSE;
846 }
847};
848
849// #############################################################

Callers 2

LoadModuleMethod · 0.95
StackWalker.cppFile · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected