MCPcopy Create free account
hub / github.com/ddopson/node-segfault-handler / GetModuleInfo

Method GetModuleInfo

src/StackWalker.cpp:696–734  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

694
695
696 BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE64_V2 *pModuleInfo)
697 {
698 if(this->pSGMI == NULL)
699 {
700 SetLastError(ERROR_DLL_INIT_FAILED);
701 return FALSE;
702 }
703 // First try to use the larger ModuleInfo-Structure
704// memset(pModuleInfo, 0, sizeof(IMAGEHLP_MODULE64_V3));
705// pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
706// if (this->pSGMI_V3 != NULL)
707// {
708// if (this->pSGMI_V3(hProcess, baseAddr, pModuleInfo) != FALSE)
709// return TRUE;
710// // check if the parameter was wrong (size is bad...)
711// if (GetLastError() != ERROR_INVALID_PARAMETER)
712// return FALSE;
713// }
714 // could not retrive the bigger structure, try with the smaller one (as defined in VC7.1)...
715 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
716 void *pData = malloc(4096); // reserve enough memory, so the bug in v6.3.5.1 does not lead to memory-overwrites...
717 if (pData == NULL)
718 {
719 SetLastError(ERROR_NOT_ENOUGH_MEMORY);
720 return FALSE;
721 }
722 memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V2));
723 if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V2*) pData) != FALSE)
724 {
725 // only copy as much memory as is reserved...
726 memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V2));
727 pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
728 free(pData);
729 return TRUE;
730 }
731 free(pData);
732 SetLastError(ERROR_DLL_INIT_FAILED);
733 return FALSE;
734 }
735};
736
737// #############################################################

Callers 2

LoadModuleMethod · 0.95
ShowCallstackMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected