From: Zebediah Figura zfigura@codeweavers.com
Motor City Online apparently checks for a debugger by setting this flag and then intentionally causing a page fault. If no debugger is present on Windows, the subprocess simply dies without spawning any crash dialog. This patch emulates that behaviour, suppressing a (harmless) crash dialog from winedbg.
This may result in legitimate failures no longer triggering a winedbg crash dialog, if other programs happen to use SEM_NOGPFAULTERRORBOX, but the winedbg crash dialog cannot be relied upon anyway. --- dlls/kernelbase/debug.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c index b7df4a7c766..2f34e89c837 100644 --- a/dlls/kernelbase/debug.c +++ b/dlls/kernelbase/debug.c @@ -761,10 +761,11 @@ LONG WINAPI UnhandledExceptionFilter( EXCEPTION_POINTERS *epointers ) if (ret != EXCEPTION_CONTINUE_SEARCH) return ret; }
- /* FIXME: Should check the current error mode */ - - if (!start_debugger_atomic( epointers ) || !NtCurrentTeb()->Peb->BeingDebugged) - return EXCEPTION_EXECUTE_HANDLER; + if (!(GetErrorMode() & SEM_NOGPFAULTERRORBOX)) + { + if (!start_debugger_atomic( epointers ) || !NtCurrentTeb()->Peb->BeingDebugged) + return EXCEPTION_EXECUTE_HANDLER; + } } return EXCEPTION_CONTINUE_SEARCH; }