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

Method GetModuleInfo

src/StackWalker.cpp:805–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 2

LoadModuleMethod · 0.95
ShowCallstackMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected