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