| 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 | // ############################################################# |
no outgoing calls
no test coverage detected