|
18 | 18 |
|
19 | 19 | #define NOTHROW |
20 | 20 |
|
| 21 | +////////////////////////////////////////////////////////////////////////////// |
| 22 | +// |
| 23 | + |
| 24 | +extern "C" void __cdecl _assert(const char* expr, const char* filename, unsigned lineno); |
| 25 | +void DetourAssert(const char* expr, const char* filename, unsigned lineno) |
| 26 | +{ |
| 27 | + DWORD dwLastError = GetLastError(); |
| 28 | + SetLastError(dwLastError); |
| 29 | + int last_error_mode = _set_error_mode(_OUT_TO_MSGBOX); |
| 30 | + _assert(expr, filename, lineno); |
| 31 | + if (last_error_mode != _OUT_TO_MSGBOX) { |
| 32 | + _set_error_mode(last_error_mode); |
| 33 | + } |
| 34 | + SetLastError(dwLastError); |
| 35 | +} |
| 36 | + |
21 | 37 | ////////////////////////////////////////////////////////////////////////////// |
22 | 38 | // |
23 | 39 | struct _DETOUR_ALIGN |
@@ -2225,7 +2241,7 @@ static BOOL GetCurrentProcessSnapshot(PBYTE* snapshot, PSYSTEM_PROCESS_INFORMATI |
2225 | 2241 |
|
2226 | 2242 | // this never returns NULL as the current process id is always present in the processes snapshot |
2227 | 2243 | *procInfo = FindProcess(*snapshot, GetCurrentProcessId()); |
2228 | | - assert(procInfo); |
| 2244 | + DETOUR_ASSERT(procInfo); |
2229 | 2245 |
|
2230 | 2246 | return TRUE; |
2231 | 2247 | } |
@@ -2257,13 +2273,13 @@ BOOL WINAPI DetourUpdateAllOtherThreads() |
2257 | 2273 | HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION | THREAD_SET_CONTEXT, FALSE, threadId); |
2258 | 2274 | if (hThread) { |
2259 | 2275 | LONG error = DetourUpdateThreadEx(hThread, TRUE); |
2260 | | - assert(error == NO_ERROR); |
| 2276 | + DETOUR_ASSERT(error == NO_ERROR); |
2261 | 2277 | if (error) { |
2262 | 2278 | DETOUR_TRACE(("DetourUpdateThreadEx failed, error=%d\n", error)); |
2263 | 2279 | // Reset s_nPendingError so that subsequent threads can continue to try to call the DetourUpdateThreadEx function |
2264 | | - assert(error == s_nPendingError); |
| 2280 | + DETOUR_ASSERT(error == s_nPendingError); |
2265 | 2281 | // When the console program is terminated, s_nPendingError == ERROR_ACCESS_DENIED may be caused when the SuspendThread is called in DetourUpdateThreadEx |
2266 | | - assert(s_nPendingError == ERROR_ACCESS_DENIED); |
| 2282 | + DETOUR_ASSERT(s_nPendingError == ERROR_ACCESS_DENIED); |
2267 | 2283 | s_nPendingError = NO_ERROR; |
2268 | 2284 | } |
2269 | 2285 | } |
|
0 commit comments