--- wine/dlls/ddraw/main.c 2005-08-09 15:31:06.000000000 +0200 +++ mywine/dlls/ddraw/main.c 2005-12-04 11:48:47.000000000 +0100 @@ -39,6 +39,8 @@ #include "winnls.h" #include "winerror.h" #include "wingdi.h" +#include "wine/exception.h" +#include "excpt.h" #include "ddraw.h" #include "d3d.h" @@ -62,6 +64,14 @@ void (*wine_tsx11_unlock_ptr)(void) = NU WINE_DEFAULT_DEBUG_CHANNEL(ddraw); +/* filter for page-fault exceptions */ +static WINE_EXCEPTION_FILTER(page_fault) +{ + if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) + return EXCEPTION_EXECUTE_HANDLER; + return EXCEPTION_CONTINUE_SEARCH; +} + /**********************************************************************/ typedef struct { @@ -201,12 +211,20 @@ HRESULT WINAPI DirectDrawEnumerateExA( /* We have to pass NULL from the primary display device. * RoadRage chapter 6's enumeration routine expects it. */ + __TRY + { if (!lpCallback((DDRAW_default_driver == i) ? NULL :(LPGUID)&DDRAW_drivers[i]->info->guidDeviceIdentifier, (LPSTR)DDRAW_drivers[i]->info->szDescription, (LPSTR)DDRAW_drivers[i]->info->szDriver, lpContext, 0)) return DD_OK; + } + __EXCEPT(page_fault) + { + return E_INVALIDARG; + } + __ENDTRY } /* Unsupported flags */ --- wine/dlls/ddraw/Makefile.in 2005-06-07 12:10:50.000000000 +0200 +++ mywine/dlls/ddraw/Makefile.in 2005-12-04 11:26:37.000000000 +0100 @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = ddraw.dll IMPORTLIB = libddraw.$(IMPLIBEXT) -IMPORTS = ole32 user32 gdi32 advapi32 kernel32 +IMPORTS = ole32 user32 gdi32 advapi32 kernel32 ntdll EXTRAINCL = @X_CFLAGS@ EXTRALIBS = -ldxguid -luuid @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@