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