| 156 | |
| 157 | |
| 158 | static DWORD WINAPI |
| 159 | MyGetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize) |
| 160 | { |
| 161 | if (hModule == nullptr) { |
| 162 | if (0) { |
| 163 | void *pCallerAddr = ReturnAddress(); |
| 164 | HMODULE hCallerModule = GetModuleFromAddress(pCallerAddr); |
| 165 | char szCaller[MAX_PATH]; |
| 166 | DWORD dwRet = pfnGetModuleFileNameA(hCallerModule, szCaller, sizeof szCaller); |
| 167 | assert(dwRet > 0); |
| 168 | |
| 169 | std::cerr << "GetModuleFileNameA(" << hModule << ") from " << szCaller << "\n"; |
| 170 | } |
| 171 | |
| 172 | assert(*g_processName); |
| 173 | assert(nSize != 0); |
| 174 | |
| 175 | size_t len = strlen(g_processName); |
| 176 | if (len < nSize) { |
| 177 | memcpy(lpFilename, g_processName, len); |
| 178 | lpFilename[len] = 0; |
| 179 | SetLastError(ERROR_SUCCESS); |
| 180 | return len; |
| 181 | } else { |
| 182 | memcpy(lpFilename, g_processName, nSize - 1); |
| 183 | lpFilename[nSize - 1] = 0; |
| 184 | SetLastError(ERROR_INSUFFICIENT_BUFFER); |
| 185 | return nSize; |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | return pfnGetModuleFileNameA(hModule, lpFilename, nSize); |
| 190 | } |
| 191 | |
| 192 | static DWORD WINAPI |
| 193 | MyGetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize) |
nothing calls this directly
no test coverage detected