diff --git a/Include/dxwnd.h b/Include/dxwnd.h index c1f4752..d1ac928 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -14,7 +14,7 @@ #define UNNOTIFY 0x00000001 #define EMULATESURFACE 0x00000002 #define CLIPCURSOR 0x00000004 // Force cursor clipping within window -#define RESETPRIMARY 0x00000008 // reset emulated primary surface when reopening DDRaw object +//#define RESETPRIMARY 0x00000008 // reset emulated primary surface when reopening DDRaw object #define HOOKDI 0x00000010 #define MODIFYMOUSE 0x00000020 #define HANDLEEXCEPTIONS 0x00000040 // Handles exceptions: Div by 0 .... @@ -55,7 +55,7 @@ #define INIT16BPP 0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API) #define KEEPCURSORFIXED 0x00000100 // inhibit SetCursorPos operation #define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries) -#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style.... +//#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style.... #define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates #define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS #define SKIPFPS 0x00002000 // skips primary blit operations up to limit @@ -97,8 +97,8 @@ #define GDIEMULATEDC 0x00008000 // Map GDI/user32 calls to primary to a memory surface to be stretch-blitted to the primary #define FULLSCREENONLY 0x00010000 // assume that the program is always in fullscreen mode #define FONTBYPASS 0x00020000 // bypass font unsupported API -#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion -#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion +//#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion +//#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion #define BUFFEREDIOFIX 0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT #define FILTERMESSAGES 0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app #define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt @@ -215,6 +215,8 @@ #define EMULATERELMOUSE 0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements // seventh flags DWORD dxw.dwFlags7: +#define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version + // eighth flags DWORD dxw.dwFlags8: // logging Tflags DWORD: @@ -222,8 +224,8 @@ #define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling #define OUTWINMESSAGES 0x00000004 // traces windows messages #define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations -#define OUTPROXYTRACE 0x00000010 // enables all operations through proxy functions -#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour +//#define OUTPROXYTRACE 0x00000010 // enables all operations through proxy functions +//#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour #define ASSERTDIALOG 0x00000040 // show assert messages in Dialog Box #define OUTIMPORTTABLE 0x00000080 // dump import table contents #define OUTDEBUG 0x00000100 // detailed debugging indormation @@ -267,6 +269,7 @@ typedef struct TARGETMAP short FakeVersionId; short MaxScreenRes; short SwapEffect; + short MaxDdrawInterface; }TARGETMAP; typedef struct @@ -314,7 +317,7 @@ LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM); // defines below to condition debug message handling #define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace -#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace +//#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace #define OutTraceDW if(dxw.dwTFlags & OUTDXWINTRACE) OutTrace #define OutTraceDDRAW if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace #define OutTraceD3D if(dxw.dwTFlags & OUTD3DTRACE) OutTrace @@ -326,7 +329,7 @@ LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM); #define OutTraceE OutTrace #define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES) -#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE) +//#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE) #define IsTraceDW (dxw.dwTFlags & OUTDXWINTRACE) #define IsTraceDDRAW (dxw.dwTFlags & OUTDDRAWTRACE) #define IsTraceD3D (dxw.dwTFlags & OUTD3DTRACE) @@ -361,3 +364,14 @@ typedef enum { TIMER_TYPE_USER32, TIMER_TYPE_WINMM } Timer_Types; + +typedef struct { + int w; + int h; +} SupportedRes_Type; + +extern SupportedRes_Type SupportedSVGARes[]; +extern SupportedRes_Type SupportedHDTVRes[]; +extern int SupportedDepths[]; + +#define SUPPORTED_DEPTHS_NUMBER 4 diff --git a/build/dxwnd.dll b/build/dxwnd.dll index d16fb6e..8b2a2c0 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fced667458c73b82bde02efd8d316628a878f1b006dc783b0e806309c0ff8d32 -size 626176 +oid sha256:935f85ba0560e2c0a319ea4a007c0f24de314cc7207710fdcd4d41e6a4fbb39a +size 593920 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 9ced148..71ed249 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45425fed1d12c6c8a93df12b38a6ec3a17b875c00b2851c1031963973e4a8c67 +oid sha256:82bd1f60071207b5033f2deade63c46438a048357e3cb0e4d5aa5b379da92186 size 545792 diff --git a/build/exports/Age of Empires III.dxw b/build/exports/Age of Empires III.dxw index 229b1b7..b52c0c3 100644 --- a/build/exports/Age of Empires III.dxw +++ b/build/exports/Age of Empires III.dxw @@ -5,11 +5,11 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=1753358370 +flag0=-394124766 flagg0=134217728 flagh0=20 -flagi0=0 -tflag0=3 +flagi0=4194304 +tflag0=0 initx0=0 inity0=0 minx0=0 @@ -22,3 +22,14 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +notes0= +registry0= +flagj0=0 +flagk0=0 +flagl0=0 +flagm0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Age of Wonders.dxw b/build/exports/Age of Wonders.dxw index 9468df5..0162307 100644 --- a/build/exports/Age of Wonders.dxw +++ b/build/exports/Age of Wonders.dxw @@ -6,7 +6,7 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=679477792 +flag0=679477794 flagg0=1207959552 flagh0=20 flagi0=205520900 @@ -26,3 +26,10 @@ initts0=0 winver0=0 maxres0=-1 flagj0=128 +notes0= +registry0= +flagk0=65536 +flagl0=0 +flagm0=0 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Dark Colony (16 bit).dxw b/build/exports/Dark Colony (16 bit).dxw new file mode 100644 index 0000000..93cc224 --- /dev/null +++ b/build/exports/Dark Colony (16 bit).dxw @@ -0,0 +1,29 @@ +[target] +title0=Dark Colony (16 bit) +path0=D:\Games\DarkColony\DCOLONY\DC16.EXE +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=134234166 +flagg0=1207959552 +flagh0=20 +flagi0=4194308 +flagj0=67108992 +flagk0=0 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Dark Colony.dxw b/build/exports/Dark Colony.dxw index f23cefd..6a44e7b 100644 --- a/build/exports/Dark Colony.dxw +++ b/build/exports/Dark Colony.dxw @@ -5,7 +5,7 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=134218274 +flag0=134234166 flagg0=1207959552 flagh0=20 flagi0=4194308 @@ -30,3 +30,6 @@ notes0= registry0= flagk0=0 swapeffect0=0 +flagl0=0 +flagm0=0 +maxddinterface0=7 diff --git a/build/exports/Nox (GOG).dxw b/build/exports/Nox (GOG).dxw new file mode 100644 index 0000000..15381e8 --- /dev/null +++ b/build/exports/Nox (GOG).dxw @@ -0,0 +1,28 @@ +[target] +title0=Nox (GOG) +path0=D:\Games\Nox GOG\Game.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=681574434 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Nox (RIP).dxw b/build/exports/Nox (RIP).dxw new file mode 100644 index 0000000..494e2fd --- /dev/null +++ b/build/exports/Nox (RIP).dxw @@ -0,0 +1,28 @@ +[target] +title0=Nox (RIP) +path0=D:\Games\Nox RIP\GAME.EXE +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=2 +flag0=681574434 +flagg0=1207959568 +flagh0=20 +flagi0=138412036 +flagj0=5248 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index f794ba1..aa60f11 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1010,3 +1010,16 @@ add: DirectInput / "Emulate mouse relative movement". Eliminates the fake clippe fix: directinput mouse mode (absolute vs. relative) now correctly checked using the mouse device fix: attempt to fix FIXMOVIESCOLOR flag for 32BPP target color depth, but it doesn't still work on Win10 fix: directinput RELEASEMOUSE flag applied to mouse device only + +v2.03.52 +add: added Win NT 4.0 to the list of detected OS +fix: DirectInput SetCooperativeLevel: should not change window handle - fix startup error in "Storm Angel" +fix: fixed GetWindowRect to replace real desktop with virtual one - fix startup error in "Storm Angel" +fix: ddraw hookers keep different original pointers for each interface: fixes several ddraw UNKNOWN_ERROR +fix: eliminated the ddraw full log functionality, because of the increased complexity +add: added several supported fake screen resolutions - needed for "Last resort" SWAT3 mod +fix: used fake resolutions also in USER32 EnumDisplaySettings +fix: avoid hooking directinput dlls if not requested when loaded dynamically +fix: added recovery of lost device in DirectInput GetDeviceData method +fix: changed SetHook so that it can get function pointers without necessarily replacing them +add: option "Limit ddraw interface" to exclude support for IDirectDrawInterface greater than limit (range 1-7) \ No newline at end of file diff --git a/dll/ddproxy.cpp b/dll/ddproxy.cpp deleted file mode 100644 index 5903134..0000000 --- a/dll/ddproxy.cpp +++ /dev/null @@ -1,2182 +0,0 @@ -#define _WIN32_WINNT 0x0600 -#define WIN32_LEAN_AND_MEAN -#define _CRT_SECURE_NO_DEPRECATE 1 - -// comment defines to get rid of some proxy logs.... -//#define TRACECOMMETHODS YES -#define HOOKDDRAW YES -#define HOOKCLIPPER YES -#define HOOKSURFACE YES -#define HOOKPALETTE YES - -#include -#include -#include -#include "dxwnd.h" -#include "dxwcore.hpp" -#include "dxhook.h" -#include "syslibs.h" -#include "dxhelper.h" -#include "hddraw.h" -#include "ddproxy.h" - -static void HookDDSessionProxy(LPDIRECTDRAW *, int); -static void HookDDSurfaceProxy(LPDIRECTDRAWSURFACE *, int); -static void HookDDClipperProxy(LPDIRECTDRAWCLIPPER FAR*); -static void HookDDPaletteProxy(LPDIRECTDRAWPALETTE FAR*); - -extern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR); - -// DirectDraw APIs -extern DirectDrawCreate_Type pDirectDrawCreate; -extern DirectDrawCreateEx_Type pDirectDrawCreateEx; -extern DirectDrawEnumerate_Type pDirectDrawEnumerate; -extern DirectDrawEnumerateEx_Type pDirectDrawEnumerateEx; - -// DIrectDraw object -// COM object -extern QueryInterface_Type pQueryInterfaceD; -extern AddRefD_Type pAddRefD; -extern ReleaseD_Type pReleaseD; -// v1 interface -extern Compact_Type pCompact; -extern CreateClipper_Type pCreateClipper; -extern CreatePalette_Type pCreatePalette; -extern CreateSurface1_Type pCreateSurface1; -extern CreateSurface1_Type pCreateSurface2; -extern CreateSurface1_Type pCreateSurface3; -extern CreateSurface2_Type pCreateSurface4; -extern CreateSurface2_Type pCreateSurface7; -extern DuplicateSurface_Type pDuplicateSurface; -extern EnumDisplayModes1_Type pEnumDisplayModes1; -extern EnumDisplayModes4_Type pEnumDisplayModes4; -extern EnumSurfaces1_Type pEnumSurfaces1; -extern EnumSurfaces4_Type pEnumSurfaces4; -extern FlipToGDISurface_Type pFlipToGDISurface; -extern GetCapsD_Type pGetCaps1D; -extern GetCapsD_Type pGetCaps2D; -extern GetCapsD_Type pGetCaps4D; -extern GetCapsD_Type pGetCaps7D; -extern GetDisplayMode_Type pGetDisplayMode1; -extern GetDisplayMode_Type pGetDisplayMode2; -extern GetDisplayMode4_Type pGetDisplayMode4; -extern GetDisplayMode4_Type pGetDisplayMode7; -extern GetFourCCCodes_Type pGetFourCCCodes; -extern GetGDISurface_Type pGetGDISurface; -extern GetMonitorFrequency_Type pGetMonitorFrequency; -extern GetScanLine_Type pGetScanLine; -extern GetVerticalBlankStatus_Type pGetVerticalBlankStatus; -extern Initialize_Type pInitialize; -extern RestoreDisplayMode_Type pRestoreDisplayMode; -extern SetCooperativeLevel_Type pSetCooperativeLevel1; -extern SetCooperativeLevel_Type pSetCooperativeLevel2; -extern SetCooperativeLevel_Type pSetCooperativeLevel4; -extern SetCooperativeLevel_Type pSetCooperativeLevel7; -extern SetDisplayMode1_Type pSetDisplayMode1; -extern SetDisplayMode2_Type pSetDisplayMode2; -extern SetDisplayMode2_Type pSetDisplayMode4; -extern SetDisplayMode2_Type pSetDisplayMode7; -// missing WaitForVerticalBlank ... -// v2 interface -extern GetAvailableVidMem_Type pGetAvailableVidMem; -// v4 interface -extern GetSurfaceFromDC_Type pGetSurfaceFromDC; -extern RestoreAllSurfaces_Type pRestoreAllSurfaces; -// v7 interface -extern TestCooperativeLevel_Type pTestCooperativeLevel; -extern GetDeviceIdentifier_Type pGetDeviceIdentifier; - -// DIrectDrawSurface object -// COM object -extern QueryInterface_Type pQueryInterfaceS; -extern AddRefS_Type pAddRefS; -extern ReleaseS_Type pReleaseS; -// v1 interface -extern AddAttachedSurface_Type pAddAttachedSurface; -extern AddOverlayDirtyRect_Type pAddOverlayDirtyRect; -extern Blt_Type pBlt; -extern BltBatch_Type pBltBatch; -extern BltFast_Type pBltFast; -extern DeleteAttachedSurface_Type pDeleteAttachedSurface; -extern EnumAttachedSurfaces_Type pEnumAttachedSurfaces; -extern EnumOverlayZOrders_Type pEnumOverlayZOrders; -extern Flip_Type pFlip; -extern GetAttachedSurface_Type pGetAttachedSurface1; -extern GetAttachedSurface_Type pGetAttachedSurface3; -extern GetAttachedSurface_Type pGetAttachedSurface4; -extern GetAttachedSurface_Type pGetAttachedSurface7; -extern GetBltStatus_Type pGetBltStatus; -extern GetCapsS_Type pGetCaps1S; -extern GetCapsS_Type pGetCaps2S; -extern GetCapsS_Type pGetCaps3S; -extern GetCaps2S_Type pGetCaps4S; -extern GetCaps2S_Type pGetCaps7S; -extern GetClipper_Type pGetClipper; -extern GetColorKey_Type pGetColorKey; -extern GetDC_Type pGetDC; -extern GetFlipStatus_Type pGetFlipStatus; -extern GetOverlayPosition_Type pGetOverlayPosition; -extern GetPalette_Type pGetPalette; -extern GetPixelFormat_Type pGetPixelFormat; -extern GetSurfaceDesc_Type pGetSurfaceDesc1; -extern GetSurfaceDesc2_Type pGetSurfaceDesc4; -// missing Initialize ... -extern IsLost_Type pIsLost; -extern Lock_Type pLock; -extern ReleaseDC_Type pReleaseDC; -extern Restore_Type pRestore; -extern SetClipper_Type pSetClipper; -extern SetColorKey_Type pSetColorKey; -extern SetOverlayPosition_Type pSetOverlayPosition; -extern SetPalette_Type pSetPalette; -extern Unlock1_Type pUnlock1; -extern Unlock4_Type pUnlock4; -extern UpdateOverlay_Type pUpdateOverlay; -extern UpdateOverlayDisplay_Type pUpdateOverlayDisplay; -extern UpdateOverlayZOrder_Type pUpdateOverlayZOrder; -// v2 interface -// missing GetDDInterface -// missing PageLock -// missing PageUnlock -// v3 interface -// missing SetSurfaceDesc -// v4 interface -// missing SetPrivateData -// missing GetPrivateData -// missing FreePrivateData -// missing GetUniquenessValue -// missing ChangeUniquenessValue -// Texture7 methods -// missing SetPriority -// missing GetPriority -// missing SetLOD -// missing GetLOD - -// DIrectDrawClipper object -// COM object -extern QueryInterface_Type pQueryInterfaceC; -extern AddRefC_Type pAddRefC; -extern ReleaseC_Type pReleaseC; -// v1 interface -extern GetClipList_Type pGetClipList; -extern GetHWnd_Type pGetHWnd; -extern InitializeC_Type pInitializeC; -extern IsClipListChanged_Type pIsClipListChanged; -extern SetClipList_Type pSetClipList; -extern SetHWnd_Type pSetHWnd; - -// DIrectDrawPalette object -// COM object -extern QueryInterface_Type pQueryInterfaceP; -extern AddRefP_Type pAddRefP; -extern ReleaseP_Type pReleaseP; -// v1 interface -extern GetCapsP_Type pGetCapsP; -extern GetEntries_Type pGetEntries; -// missing Initialize ... -extern SetEntries_Type pSetEntries; - -extern GDIGetDC_Type pGDIGetDC; -extern GDIGetDC_Type pGDIGetWindowDC; -extern GDIReleaseDC_Type pGDIReleaseDC; -extern CreateDC_Type pGDICreateDC; -extern CreateCompatibleDC_Type pGDICreateCompatibleDC; -extern BitBlt_Type pGDIBitBlt; -extern PatBlt_Type pGDIPatBlt; -extern StretchBlt_Type pGDIStretchBlt; -extern DeleteDC_Type pGDIDeleteDC; -SaveDC_Type pSaveDC; -RestoreDC_Type pRestoreDC; -extern BeginPaint_Type pBeginPaint; - -HDC WINAPI extGDIGetDCProxy(HWND); -HDC WINAPI extGetWindowDCProxy(HWND); -int WINAPI extGDIReleaseDCProxy(HWND, HDC); -HDC WINAPI extCreateDCProxy(LPSTR, LPSTR, LPSTR, CONST DEVMODE *); -HDC WINAPI extCreateCompatibleDCProxy(HDC); -BOOL WINAPI extBitBltProxy(HDC, int, int, int, int, HDC, int, int, DWORD); -BOOL WINAPI extPatBltProxy(HDC, int, int, int, int, DWORD); -BOOL WINAPI extStretchBltProxy(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); -BOOL WINAPI extDeleteDCProxy(HDC); -int WINAPI extSaveDCProxy(HDC); -BOOL WINAPI extRestoreDCProxy(HDC, int); -HPALETTE WINAPI extSelectPaletteProxy(HDC, HPALETTE, BOOL); -UINT WINAPI extRealizePaletteProxy(HDC); -HDC WINAPI extBeginPaintProxy(HWND, LPPAINTSTRUCT); -UINT WINAPI extGetSystemPaletteEntriesProxy(HDC, UINT, UINT, LPPALETTEENTRY); -int WINAPI extGetDeviceCapsProxy(HDC, int); - -// ------------------------------------------------------------------------------------------ // -// -// auxiliary calls -// -// ------------------------------------------------------------------------------------------ // - -static void DumpSurfaceAttributesProxy(LPDDSURFACEDESC lpddsd, char *label) -{ - OutTraceP("%s: Flags=%x(%s)", - label, - lpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags)); - if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) OutTraceP(" BackBufferCount=%d", lpddsd->dwBackBufferCount); - if (lpddsd->dwFlags & DDSD_WIDTH) OutTraceP(" Width=%d", lpddsd->dwWidth); - if (lpddsd->dwFlags & DDSD_HEIGHT) OutTraceP(" Height=%d", lpddsd->dwHeight); - if (lpddsd->dwFlags & DDSD_CAPS) OutTraceP(" Caps=%x(%s)", lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); - if (lpddsd->dwFlags & DDSD_CKDESTBLT ) OutTraceP(" CKDestBlt=(%x,%x)", lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKDESTOVERLAY ) OutTraceP(" CKDestOverlay=(%x,%x)", lpddsd->ddckCKDestOverlay.dwColorSpaceLowValue, lpddsd->ddckCKDestOverlay.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKSRCBLT ) OutTraceP(" CKSrcBlt=(%x,%x)", lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) OutTraceP(" CKSrcOverlay=(%x,%x)", lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_PIXELFORMAT ) OutTraceP(" PixelFormat BPP=%d RGBA=(%x,%x,%x,%x)", - lpddsd->ddpfPixelFormat.dwRGBBitCount, - lpddsd->ddpfPixelFormat.dwRBitMask, - lpddsd->ddpfPixelFormat.dwGBitMask, - lpddsd->ddpfPixelFormat.dwBBitMask, - lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask); - OutTraceP("\n"); -} - -// ------------------------------------------------------------------------------------------ // -// -// DirectDraw API hooking functions -// -// ------------------------------------------------------------------------------------------ // - -FARPROC WINAPI extGetProcAddressProxy(HMODULE hModule, LPCSTR proc) -{ - FARPROC ret; - // WARNING: seems to be called with bad LPCSTR value.... - __try { - OutTraceP("GetProcAddress: PROXED hModule=%x proc=%s\n", hModule, proc); - // should check for both hModule from ddraw.dll & apiname, but.... - if(proc){ - if (!strcmp(proc,"DirectDrawCreate")){ - pDirectDrawCreate=(DirectDrawCreate_Type)(*pGetProcAddress)(hModule, proc); - OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawCreate); - return (FARPROC)extDirectDrawCreateProxy; - } - if (!strcmp(proc,"DirectDrawCreateEx")){ - pDirectDrawCreateEx=(DirectDrawCreateEx_Type)(*pGetProcAddress)(hModule, proc); - OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawCreateEx); - return (FARPROC)extDirectDrawCreateExProxy; - } - if (!strcmp(proc,"DirectDrawEnumerateA")){ - pDirectDrawEnumerate=(DirectDrawEnumerate_Type)(*pGetProcAddress)(hModule, proc); - OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerate); - return (FARPROC)extDirectDrawEnumerateProxy; - } - if (!strcmp(proc,"DirectDrawEnumerateExA")){ - pDirectDrawEnumerateEx=(DirectDrawEnumerateEx_Type)(*pGetProcAddress)(hModule, proc); - OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerateEx); - return (FARPROC)extDirectDrawEnumerateExProxy; - } - } - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - OutTraceP("GetProcAddress: EXCEPTION\n"); - } - ret=(*pGetProcAddress)(hModule, proc); - OutTraceP("GetProcAddress: ret=%x\n", ret); - return ret; -} - -// ------------------------------------------------------------------------------------------ // -// -// COM methods hooking functions -// -// ------------------------------------------------------------------------------------------ // - -int HookDDProxy(HMODULE module, int dxVersion) -{ - HINSTANCE hinst; - void *tmp; - const GUID dd7 = {0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b}; -// LPDIRECTDRAW lpdd; -// BOOL res; - - dxw.dwFlags1 |= OUTDDRAWTRACE; - - pGDICreateCompatibleDC=CreateCompatibleDC; - pGDIGetDC=GetDC; - pGDIGetWindowDC=GetWindowDC; - pGDIReleaseDC=ReleaseDC; - pGDICreateDC=CreateDC; - pGDIBitBlt=BitBlt; - pGDIPatBlt=PatBlt; - pGDIStretchBlt=StretchBlt; - pGDIDeleteDC=DeleteDC; - pSaveDC=SaveDC; - pRestoreDC=RestoreDC; - pGDISelectPalette=SelectPalette; - tmp = HookAPI(module, "GDI32.dll", CreateCompatibleDC, "CreateCompatibleDC", extCreateCompatibleDCProxy); - if(tmp) pGDICreateCompatibleDC = (CreateCompatibleDC_Type)tmp; - tmp = HookAPI(module, "user32.dll", GetDC, "GetDC", extGDIGetDCProxy); - if(tmp) pGDIGetDC = (GDIGetDC_Type)tmp; - tmp = HookAPI(module, "user32.dll", GetWindowDC, "GetWindowDC", extGetWindowDCProxy); - if(tmp) pGDIGetWindowDC = (GDIGetDC_Type)tmp; - tmp = HookAPI(module, "user32.dll", ReleaseDC, "ReleaseDC", extGDIReleaseDCProxy); - if(tmp) pGDIReleaseDC = (GDIReleaseDC_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", CreateDCA, "CreateDCA", extCreateDCProxy); - if(tmp) pGDICreateDC = (CreateDC_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", BitBlt, "BitBlt", extBitBltProxy); - if(tmp) pGDIBitBlt = (BitBlt_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", StretchBlt, "StretchBlt", extStretchBltProxy); - if(tmp) pGDIStretchBlt = (StretchBlt_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", PatBlt, "PatBlt", extPatBltProxy); - if(tmp) pGDIPatBlt = (PatBlt_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", DeleteDC, "DeleteDC", extDeleteDCProxy); - if(tmp) pGDIDeleteDC = (DeleteDC_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", SaveDC, "SaveDC", extSaveDCProxy); - if(tmp) pGDISaveDC = (SaveDC_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", RestoreDC, "RestoreDC", extRestoreDCProxy); - if(tmp) pGDIRestoreDC = (RestoreDC_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", SelectPalette, "SelectPalette", extSelectPaletteProxy); - if(tmp) pGDISelectPalette = (SelectPalette_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", RealizePalette, "RealizePalette", extRealizePaletteProxy); - if(tmp) pGDIRealizePalette = (RealizePalette_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", GetSystemPaletteEntries, "GetSystemPaletteEntries", extGetSystemPaletteEntriesProxy); - if(tmp) pGDIGetSystemPaletteEntries = (GetSystemPaletteEntries_Type)tmp; - tmp = HookAPI(module, "GDI32.dll", GetDeviceCaps, "GetDeviceCaps", extGetDeviceCapsProxy); - if(tmp) pGDIGetDeviceCaps = (GetDeviceCaps_Type)tmp; - tmp = HookAPI(module, "user32.dll", BeginPaint, "BeginPaint", extBeginPaintProxy); - if(tmp) pBeginPaint = (BeginPaint_Type)tmp; - pGetProcAddress = (GetProcAddress_Type)GetProcAddress; - tmp = HookAPI(module, "KERNEL32.dll", GetProcAddress, "GetProcAddress", extGetProcAddressProxy); - if(tmp) pGetProcAddress = (GetProcAddress_Type)tmp; - switch(dxVersion){ - case 0: // automatic - tmp = HookAPI(module, "ddraw.dll", NULL, "DirectDrawCreate", extDirectDrawCreateProxy); - if(tmp) pDirectDrawCreate = (DirectDrawCreate_Type)tmp; - tmp = HookAPI(module, "ddraw.dll", NULL, "DirectDrawCreateEx", extDirectDrawCreateExProxy); - if(tmp) pDirectDrawCreateEx = (DirectDrawCreateEx_Type)tmp; - tmp = HookAPI(module, "ddraw.dll", NULL, "DirectDrawEnumerateA", extDirectDrawEnumerateProxy); - if(tmp) pDirectDrawEnumerate = (DirectDrawEnumerate_Type)tmp; - tmp = HookAPI(module, "ddraw.dll", NULL, "DirectDrawEnumerateExA", extDirectDrawEnumerateExProxy); - if(tmp) pDirectDrawEnumerateEx = (DirectDrawEnumerateEx_Type)tmp; - break; - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - hinst = LoadLibrary("ddraw.dll"); - pDirectDrawEnumerate = - (DirectDrawEnumerate_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); - pDirectDrawCreate = - (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); - if(pDirectDrawCreate){ - LPDIRECTDRAW lpdd; - BOOL res; - HookAPI(module, "ddraw.dll", pDirectDrawCreate, "DirectDrawCreate", extDirectDrawCreateProxy); - HookAPI(module, "ddraw.dll", pDirectDrawEnumerate, "DirectDrawEnumerateA", extDirectDrawEnumerateProxy); - res=extDirectDrawCreateProxy(0, &lpdd, 0); - if (res){ - OutTraceP("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - } - lpdd->Release(); - } - break; - case 7: - hinst = LoadLibrary("ddraw.dll"); - pDirectDrawEnumerate = - (DirectDrawEnumerate_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); - pDirectDrawEnumerateEx = - (DirectDrawEnumerateEx_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); - pDirectDrawCreate = - (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); - if(pDirectDrawCreate){ - LPDIRECTDRAW lpdd; - BOOL res; - HookAPI(module, "ddraw.dll", pDirectDrawCreate, "DirectDrawCreate", extDirectDrawCreateProxy); - HookAPI(module, "ddraw.dll", pDirectDrawEnumerate, "DirectDrawEnumerateA", extDirectDrawEnumerateProxy); - HookAPI(module, "ddraw.dll", pDirectDrawEnumerateEx, "DirectDrawEnumerateExA", extDirectDrawEnumerateExProxy); - res=extDirectDrawCreateProxy(0, &lpdd, 0); - if (res){ - OutTraceP("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - } - lpdd->Release(); - } - pDirectDrawCreateEx = - (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx"); - if(pDirectDrawCreateEx){ - LPDIRECTDRAW lpdd; - BOOL res; - HookAPI(module, "ddraw.dll", pDirectDrawCreateEx, "DirectDrawCreateEx", extDirectDrawCreateExProxy); - res=extDirectDrawCreateExProxy(0, &lpdd, dd7, 0); - if (res) OutTraceP("DirectDrawCreateEx: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - lpdd->Release(); - } - break; - } - - if(pDirectDrawCreate || pDirectDrawCreateEx) return 1; - return 0; -} - -static void HookDDClipperProxy(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper) -{ - // IDirectDrawClipper::QueryInterface - SetHook((void *)(**(DWORD **)lplpDDClipper + 0), extQueryInterfaceCProxy, (void **)&pQueryInterfaceC, "QueryInterface(C)"); -#ifdef TRACECOMMETHODS - // IDirectDrawClipper::AddRef - SetHook((void *)(**(DWORD **)lplpDDClipper + 4), extAddRefCProxy, (void **)&pAddRefC, "AddRef(C)"); - // IDirectDrawClipper::Release - SetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseCProxy, (void **)&pReleaseC, "Release(C)"); -#endif - // IDirectDrawClipper::GetClipList - SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipListProxy, (void **)&pGetClipList, "GetClipList(C)"); - // IDirectDrawClipper::GetHWnd - SetHook((void *)(**(DWORD **)lplpDDClipper + 16), extGetHWndProxy, (void **)&pGetHWnd, "GetHWnd(C)"); - // IDirectDrawClipper::Initialize - SetHook((void *)(**(DWORD **)lplpDDClipper + 20), extInitializeCProxy, (void **)&pInitializeC, "Initialize(C)"); - // IDirectDrawClipper::IsClipListChanged - SetHook((void *)(**(DWORD **)lplpDDClipper + 24), extIsClipListChangedProxy, (void **)&pIsClipListChanged, "IsClipListChanged(C)"); - // IDirectDrawClipper::SetClipList - SetHook((void *)(**(DWORD **)lplpDDClipper + 28), extSetClipListProxy, (void **)&pSetClipList, "SetClipList(C)"); - // IDirectDrawClipper::SetHWnd - SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWndProxy, (void **)&pSetHWnd, "SetHWnd(C)"); - return; -} - -static void HookDDPaletteProxy(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) -{ - // IDirectDrawPalette::QueryInterface - SetHook((void *)(**(DWORD **)lplpDDPalette + 0), extQueryInterfacePProxy, (void **)&pQueryInterfaceP, "QueryInterface(P)"); -#ifdef TRACECOMMETHODS - // IDirectDrawPalette::AddRef - SetHook((void *)(**(DWORD **)lplpDDPalette + 4), extAddRefPProxy, (void **)&pAddRefP, "AddRef(P)"); - // IDirectDrawPalette::Release - SetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleasePProxy, (void **)&pReleaseP, "Release(P)"); -#endif - // IDirectDrawPalette::GetCaps - SetHook((void *)(**(DWORD **)lplpDDPalette + 12), extGetCapsPProxy, (void **)&pGetCapsP, "GetCaps(P)"); - // IDirectDrawPalette::GetEntries - SetHook((void *)(**(DWORD **)lplpDDPalette + 16), extGetEntriesProxy, (void **)&pGetEntries, "GetEntries(P)"); - // IDirectDrawPalette::SetEntries - SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntriesProxy, (void **)&pSetEntries, "SetEntries(P)"); - return; -} - -static void HookDDSurfaceProxy(LPDIRECTDRAWSURFACE *lplpdds, int dxVersion) -{ - OutTraceP("Hooking surface dds=%x version=%d thread_id=%x\n", *lplpdds, dxVersion, GetCurrentThreadId()); - - // IDirectDrawSurface::Query - SetHook((void *)(**(DWORD **)lplpdds + 0), extQueryInterfaceSProxy, (void **)&pQueryInterfaceS, "QueryInterface(S)"); -#ifdef TRACECOMMETHODS - // IDirectDrawSurface::AddRef - SetHook((void *)(**(DWORD **)lplpdds + 4), extAddRefSProxy, (void **)&pAddRefS, "AddRef(S)"); - // IDirectDrawSurface::Release - SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseSProxy, (void **)&pReleaseS, "Release(S)"); -#endif - // IDirectDrawSurface::AddAttachedSurface - SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurfaceProxy, (void **)&pAddAttachedSurface, "AddAttachedSurface(S)"); - // IDirectDrawSurface::AddOverlayDirtyRect - SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)"); - // IDirectDrawSurface::Blt - SetHook((void *)(**(DWORD **)lplpdds + 20), extBltProxy, (void **)&pBlt, "Blt(S)"); - // IDirectDrawSurface::BltBatch - SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)"); - // IDirectDrawSurface::BltFast - SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFastProxy, (void **)&pBltFast, "BltFast(S)"); - // IDirectDrawSurface::DeleteAttachedSurface - SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurfaceProxy, (void **)&pDeleteAttachedSurface, "DeleteAttachedSurface(S)"); - // IDirectDrawSurface::EnumAttachedSurfaces - SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfacesProxy, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)"); - // IDirectDrawSurface::EnumOverlayZOrders - SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrdersProxy, (void **)&pEnumOverlayZOrders, "EnumOverlayZOrders(S)"); - // IDirectDrawSurface::Flip - SetHook((void *)(**(DWORD **)lplpdds + 44), extFlipProxy, (void **)&pFlip, "Flip(S)"); - // IDirectDrawSurface::GetAttachedSurface - switch(dxVersion) { - case 1: - case 2: - SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1Proxy, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)"); - break; - case 3: - SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3Proxy, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)"); - break; - case 4: - SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4Proxy, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)"); - break; - case 7: - SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7Proxy, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)"); - break; - } - // IDirectDrawSurface::GetBltStatus - SetHook((void *)(**(DWORD **)lplpdds + 52), extGetBltStatusProxy, (void **)&pGetBltStatus, "GetBltStatus(S)"); - // IDirectDrawSurface::GetCaps - switch(dxVersion) { - case 1: - SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps1SProxy, (void **)&pGetCaps1S, "GetCaps(S1)"); - break; - case 2: - SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps2SProxy, (void **)&pGetCaps2S, "GetCaps(S2)"); - break; - case 3: - SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps3SProxy, (void **)&pGetCaps3S, "GetCaps(S3)"); - break; - case 4: - SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps4SProxy, (void **)&pGetCaps4S, "GetCaps(S4)"); - break; - case 7: - SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps7SProxy, (void **)&pGetCaps7S, "GetCaps(S7)"); - break; - } - // IDirectDrawSurface::GetClipper - SetHook((void *)(**(DWORD **)lplpdds + 60), extGetClipperProxy, (void **)&pGetClipper, "GetClipper(S)"); - // IDirectDrawSurface::GetColorKey - SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKeyProxy, (void **)&pGetColorKey, "GetColorKey(S)"); - // IDirectDrawSurface::GetDC - SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDCProxy, (void **)&pGetDC, "GetDC(S)"); - // IDirectDrawSurface::GetFlipStatus - SetHook((void *)(**(DWORD **)lplpdds + 72), extGetFlipStatusProxy, (void **)&pGetFlipStatus, "GetFlipStatus(S)"); - // IDirectDrawSurface::GetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPositionProxy, (void **)&pGetOverlayPosition, "GetOverlayPosition(S)"); - // IDirectDrawSurface::GetPalette - SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPaletteProxy, (void **)&pGetPalette, "GetPalette(S)"); - // IDirectDrawSurface::GetPixelFormat - SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormatProxy, (void **)&pGetPixelFormat, "GetPixelFormat(S)"); - // IDirectDrawSurface::GetSurfaceDesc - switch(dxVersion){ - case 1: - case 2: - case 3: - SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1Proxy, (void **)&pGetSurfaceDesc1, "pGetSurfaceDesc(S1)"); - break; - case 4: - case 7: - SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc4Proxy, (void **)&pGetSurfaceDesc4, "pGetSurfaceDesc(S4)"); - break; - } - // IDirectDrawSurface::IsLost - SetHook((void *)(**(DWORD **)lplpdds + 96), extIsLostProxy, (void **)&pIsLost, "IsLost(S)"); - // IDirectDrawSurface::Lock - SetHook((void *)(**(DWORD **)lplpdds + 100), extLockProxy, (void **)&pLock, "Lock(S)"); - // IDirectDrawSurface::ReleaseDC - SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDCProxy, (void **)&pReleaseDC, "ReleaseDC(S)"); - // IDirectDrawSurface::Restore - SetHook((void *)(**(DWORD **)lplpdds + 108), extRestoreProxy, (void **)&pRestore, "Restore(S)"); - // IDirectDrawSurface::SetClipper - SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipperProxy, (void **)&pSetClipper, "SetClipper(S)"); - // IDirectDrawSurface::SetColorKey - SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKeyProxy, (void **)&pSetColorKey, "SetColorKey(S)"); - // IDirectDrawSurface::SetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPositionProxy, (void **)&pSetOverlayPosition, "SetOverlayPosition(S)"); - // IDirectDrawSurface::SetPalette - SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPaletteProxy, (void **)&pSetPalette, "SetPalette(S)"); - // IDirectDrawSurface::Unlock - if (dxVersion >= 4) - SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock4Proxy, (void **)&pUnlock4, "Unlock(S4)"); - else - SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock1Proxy, (void **)&pUnlock1, "Unlock(S1)"); - // IDirectDrawSurface::UpdateOverlay - SetHook((void *)(**(DWORD **)lplpdds + 132), extUpdateOverlayProxy, (void **)&pUpdateOverlay, "UpdateOverlay(S)"); - // IDirectDrawSurface::UpdateOverlayDisplay - SetHook((void *)(**(DWORD **)lplpdds + 136), extUpdateOverlayDisplayProxy, (void **)&pUpdateOverlayDisplay, "UpdateOverlayDisplay(S)"); - // IDirectDrawSurface::UpdateOverlayZOrder - SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)"); - - -#if 0 - /*** Added in the v2 interface ***/ - if (dxVersion >= 2) { - // missing GetDDInterface)(THIS_ LPVOID FAR *) PURE; - // missing PageLock)(THIS_ DWORD) PURE; - // missing PageUnlock)(THIS_ DWORD) PURE; - } - /*** Added in the v3 interface ***/ - if (dxVersion >= 3) { - // missing SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; - } - /*** Added in the v4 interface ***/ - if (dxVersion >= 4) { - // missing SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; - // missing GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; - // missing FreePrivateData)(THIS_ REFGUID) PURE; - // missing GetUniquenessValue)(THIS_ LPDWORD) PURE; - // missing ChangeUniquenessValue)(THIS) PURE; - } - /*** Moved Texture7 methods here ***/ - if (dxVersion >= 7) { - // missing SetPriority)(THIS_ DWORD) PURE; - // missing GetPriority)(THIS_ LPDWORD) PURE; - // missing SetLOD)(THIS_ DWORD) PURE; - // missing GetLOD)(THIS_ LPDWORD) PURE; - } -#endif -} - -// ------------------------------------------------------------------------------------------ // -// -// DirectDraw proxed methods -// -// ------------------------------------------------------------------------------------------ // - -HRESULT WINAPI extQueryInterfaceDProxy(void *lpdd, REFIID riid, LPVOID *obp) -{ - HRESULT res; - unsigned int dxVersion; - OutTraceP("QueryInterface(D): PROXED lpdd=%x REFIID=%x(%s) obp=%x\n", lpdd, riid.Data1, ExplainGUID((GUID *)&riid.Data1), *obp); - res = (*pQueryInterfaceD)(lpdd, riid, obp); - if(res) { - OutTraceP("QueryInterface(D): ret=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - dxVersion=0; - switch(riid.Data1){ - case 0x6C14DB80: //DirectDraw1 - dxVersion = 1; - break; - case 0xB3A6F3E0: //DirectDraw2 - dxVersion = 2; - break; - case 0x9c59509a: //DirectDraw4 - dxVersion = 4; - break; - case 0x15e65ec0: //DirectDraw7 - dxVersion = 7; - break; - } - if (! *obp) { - OutTraceP("QueryInterface(D): Interface for DX version %d not found\n", dxVersion); - return(0); - } - OutTraceP("QueryInterface(D): obp=%x interface=%d\n", *obp, dxVersion); - switch (dxVersion){ - case 1: - case 2: - case 4: - case 7: -#ifdef HOOKDDRAW - HookDDSessionProxy((LPDIRECTDRAW *)obp, dxVersion); -#endif - break; - } - return res; -} - - -ULONG WINAPI extAddRefDProxy(LPDIRECTDRAW lpdd) -{ - ULONG ref; - ref=(*pAddRefD)(lpdd); - OutTraceP("AddRef(D): PROXED lpdd=%x ref=%x\n", lpdd, ref); - return ref; -} - -ULONG WINAPI extReleaseDProxy(LPDIRECTDRAW lpdd) -{ - ULONG ref; - ref=(*pReleaseD)(lpdd); - OutTraceP("Release(D): PROXED lpdd=%x ref=%x\n", lpdd, ref); - return ref; -} - -HRESULT WINAPI extInitializeProxy(LPDIRECTDRAW lpdd, GUID FAR *lpguid) -{ - HRESULT res; - GUID FAR *lpPrivGuid = lpguid; - - OutTraceDW("Initialize: lpdd=%x guid=%x(%s)\n", lpdd, lpguid, ExplainGUID(lpguid)); - - res=(*pInitialize)(lpdd, lpPrivGuid); - - if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extCreateClipperProxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) -{ - HRESULT res; - OutTraceP("CreateClipper(D): PROXED lpdd=%x flags=%x\n", lpdd, dwflags); - res=(*pCreateClipper)(lpdd, dwflags, lplpDDClipper, pUnkOuter); - if(res) { - OutTraceP("CreateClipper(D): ERROR res=%x(%s)\n", lpdd, res, ExplainDDError(res)); - return res; - } - else OutTraceP("CreateClipper(D): lpddc=%x\n", *lplpDDClipper); -#ifdef HOOKCLIPPER - HookDDClipperProxy(lplpDDClipper); -#endif - return res; -} - -HRESULT WINAPI extCreatePaletteProxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, - LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) -{ - HRESULT res; - - OutTraceP("CreatePalette(D): PROXED lpdd=%x dwFlags=%x(%s)\n", lpdd, dwflags, ExplainCreatePaletteFlags(dwflags)); - if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa); - - res = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu); - if (res) { - OutTraceP("CreatePalette(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - else OutTraceP("CreatePalette(D): lpddp=%x\n", *lplpddp); -#ifdef HOOKPALETTE - HookDDPaletteProxy(lplpddp); -#endif - return res; -} - - - -//HRESULT WINAPI extGetCapsDProxy(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) -//{ -// HRESULT res; -// OutTraceP("GetCaps(D): PROXED lpdd=%x c1=%x c2=%x\n", lpdd, c1, c2); -// res=(*pGetCapsD)(lpdd, c1, c2); -// if(res) -// OutTraceP("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); -// else { -// // to do: a full Caps dump! -// OutTraceP("GetCaps(D): "); -// if (c1) OutTraceP("hwcaps size=%x ", c1->dwSize); -// if (c2) OutTraceP("swcaps size=%x ", c2->dwSize); -// OutTraceP("\n"); -// } -// return res; -//} - -HRESULT WINAPI extGetSurfaceFromDCProxy(LPDIRECTDRAW lpdd, HDC hdc, LPDIRECTDRAWSURFACE* lpDDS) -{ - HRESULT res; - OutTraceP("GetSurfaceFromDC(D): PROXED lpdd=%x hdc=%x\n", lpdd, hdc); - res=(*pGetSurfaceFromDC)(lpdd, hdc, lpDDS); - if(res) - OutTraceP("GetSurfaceFromDC(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else - OutTraceP("GetSurfaceFromDC(D): lpDDS=%x(%s)\n", res, *lpDDS); - return res; -} - -HRESULT WINAPI extGetMonitorFrequencyProxy(LPDIRECTDRAW lpdd, LPDWORD lpdwFrequency) -{ - HRESULT res; - OutTraceP("GetMonitorFrequency(D): PROXED lpdd=%x freq=%d\n", lpdd, *lpdwFrequency); - res=(*pGetMonitorFrequency)(lpdd, lpdwFrequency); - if(res) OutTraceP("GetMonitorFrequency(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetScanLineProxy(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) -{ - HRESULT res; - res=(*pGetScanLine)(lpdd, lpdwScanLine); - OutTraceP("GetScanLine(D): PROXED lpdd=%x line=%x\n", lpdd, *lpdwScanLine); - return res; -} - -HRESULT WINAPI extGetVerticalBlankStatusProxy(LPDIRECTDRAW lpdd, LPBOOL lpbIsInVB) -{ - HRESULT res; - OutTraceP("GetVerticalBlankStatus(D): PROXED lpdd=%x\n", lpdd); - res=(*pGetVerticalBlankStatus)(lpdd, lpbIsInVB); - if (res) OutTraceP("GetVerticalBlankStatus(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetVerticalBlankStatus(D): status=%x\n", *lpbIsInVB); - return res; -} - -HRESULT WINAPI extRestoreDisplayModeProxy(LPDIRECTDRAW lpdd) -{ - HRESULT res; - OutTraceP("RestoreDisplayMode(D): PROXED lpdd=%x\n", lpdd); - res=(*pRestoreDisplayMode)(lpdd); - if(res) OutTraceP("RestoreDisplayMode(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetAvailableVidMemProxy(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) -{ - HRESULT res; - OutTraceP("GetAvailableVidMem(D): PROXED lpdd=%x\n", lpdd); - res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree); - if(res) OutTraceP("GetAvailableVidMem(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetAvailableVidMem(D): DDSCaps=%x(%s) Total=%x Free=%x res=%x\n", - *lpDDSCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), *lpdwTotal, *lpdwFree, res); - return res; -} - -HRESULT WINAPI extRestoreAllSurfacesProxy(LPDIRECTDRAW lpdd) -{ - HRESULT res; - OutTraceP("RestoreAllSurfaces(D): PROXED lpdd=%x\n", lpdd); - res=(*pRestoreAllSurfaces)(lpdd); - if(res) OutTraceP("RestoreAllSurfaces(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetDeviceIdentifierProxy(LPDIRECTDRAW lpdd, LPDDDEVICEIDENTIFIER lpDevId, DWORD dw) -{ - HRESULT res; - OutTraceP("GetDeviceIdentifier(D): PROXED lpdd=%x DevId=%x dw=%x\n", lpdd, lpDevId, dw); - res=(*pGetDeviceIdentifier)(lpdd, lpDevId, dw); - if(res) OutTraceP("GetDeviceIdentifier(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetDeviceIdentifier(D): Id=%x Driver=\"%s\" Description=\"%s\" Version=%d rev.=%x\n", - lpDevId->dwDeviceId, lpDevId->szDriver, lpDevId->szDescription, lpDevId->liDriverVersion, lpDevId->dwRevision); - return res; -} - -ULONG WINAPI extCompactProxy(LPDIRECTDRAW lpdd) -{ - ULONG res; - res=(*pCompact)(lpdd); - OutTraceP("Compact(D): PROXED lpdd=%x res=%x\n", lpdd, res); - return res; -} - -HRESULT WINAPI extEnumDisplayModesProxy(EnumDisplayModes1_Type pEnumDisplayModes, LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) -{ - HRESULT res; - OutTraceP("EnumDisplayModes(D): PROXED lpdd=%x flags=%x lpddsd=%x callback=%x\n", lpdd, dwflags, lpddsd, cb); - res=(*pEnumDisplayModes)(lpdd, dwflags, lpddsd, lpContext, cb); - if(res) OutTraceP("EnumDisplayModes(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extEnumDisplayModes1Proxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) -{ - return extEnumDisplayModesProxy(pEnumDisplayModes1, lpdd, dwflags, lpddsd, lpContext, cb); -} - -HRESULT WINAPI extEnumDisplayModes4Proxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK2 cb) -{ - return extEnumDisplayModesProxy((EnumDisplayModes1_Type)pEnumDisplayModes4, lpdd, dwflags, (LPDDSURFACEDESC)lpddsd, lpContext, (LPDDENUMMODESCALLBACK)cb); -} - -HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW lpdd, LPDWORD nc, LPDWORD cc) -{ - int res; - unsigned int i; - OutTraceP("GetFourCCCodes(D): PROXED lpdd=%x\n", lpdd); - res=(*pGetFourCCCodes)(lpdd, nc, cc); - if (res) - OutTraceP("GetFourCCCodes(D): res=%x(%s)\n", res, ExplainDDError(res)); - else { - OutTraceP("GetFourCCCodes(D): CCCodes(%d)=",*nc); - if (cc) - for(i=0;i<*nc;i++) OutTraceP("%x,",cc[i]); - else - OutTraceP("(NULL)"); - OutTraceP("\n"); - } - return res; -} - -HRESULT WINAPI extCreateSurfaceProxy(int dxVersion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - HRESULT res; - OutTraceP("CreateSurface(D): PROXED version=%d lpdd=%x Flags=%x(%s)", - dxVersion, lpdd, lpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags)); - if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) OutTraceP(" BackBufferCount=%d", lpddsd->dwBackBufferCount); - if (lpddsd->dwFlags & DDSD_WIDTH) OutTraceP(" Width=%d", lpddsd->dwWidth); - if (lpddsd->dwFlags & DDSD_HEIGHT) OutTraceP(" Height=%d", lpddsd->dwHeight); - if (lpddsd->dwFlags & DDSD_CAPS) OutTraceP(" Caps=%x(%s)", lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); - if (lpddsd->dwFlags & DDSD_CKDESTBLT ) OutTraceP(" CKDestBlt=(%x,%x)", lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKDESTOVERLAY ) OutTraceP(" CKDestOverlay=(%x,%x)", lpddsd->ddckCKDestOverlay.dwColorSpaceLowValue, lpddsd->ddckCKDestOverlay.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKSRCBLT ) OutTraceP(" CKSrcBlt=(%x,%x)", lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) OutTraceP(" CKSrcOverlay=(%x,%x)", lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue); - OutTraceP("\n"); - res= pCreateSurface(lpdd, lpddsd, lplpdds, pu); - if (res) { - OutTraceP("CreateSurface(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - if(IsDebug){ - OutTrace("CreateSurface(D): built Caps=%x(%s)\n", lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); - } - OutTraceP("CreateSurface(D): lpdds=%x\n", *lplpdds); -#ifdef HOOKSURFACE - HookDDSurfaceProxy(lplpdds, dxVersion); -#endif - return res; -} - -HRESULT WINAPI extCreateSurface1Proxy(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurfaceProxy(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} - -HRESULT WINAPI extCreateSurface2Proxy(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurfaceProxy(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} - -HRESULT WINAPI extCreateSurface4Proxy(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurfaceProxy(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} - -HRESULT WINAPI extCreateSurface7Proxy(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurfaceProxy(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} - -HRESULT WINAPI extEnumSurfacesProxy1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMSURFACESCALLBACK cb) -{ - HRESULT res; - OutTraceP("EnumSurfaces(D1): PROXED lpdd=%x flags=%x lpddsd=%x callback=%x\n", lpdd, dwflags, lpddsd, cb); - res=(*pEnumSurfaces1)(lpdd, dwflags, lpddsd, lpContext, cb); - if(res) OutTraceP("EnumSurfaces(D1): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extEnumSurfacesProxy4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMSURFACESCALLBACK2 cb) -{ - HRESULT res; - OutTraceP("EnumSurfaces(D4): PROXED lpdd=%x flags=%x lpddsd=%x callback=%x\n", lpdd, dwflags, lpddsd, cb); - res=(*pEnumSurfaces4)(lpdd, dwflags, lpddsd, lpContext, cb); - if(res) OutTraceP("EnumSurfaces(D4): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extDuplicateSurfaceProxy(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE s, LPDIRECTDRAWSURFACE *sp) -{ - int res; - OutTraceP("DuplicateSurface(D): PROXED lpdd=%x dds=%x\n", lpdd, s); - res=(*pDuplicateSurface)(lpdd, s, sp); - if (res) OutTraceP("DuplicateSurface(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("DuplicateSurface: pdds=%x\n", *sp); - return res; -} - -HRESULT WINAPI extFlipToGDISurfaceProxy(LPDIRECTDRAW lpdd) -{ - HRESULT res; - OutTraceP("FlipToGDISurface(D): lpdd=%x\n", lpdd); - res=(*pFlipToGDISurface)(lpdd); - if (res) OutTraceP("FlipToGDISurface(D): ERROR res=%x(%s), skipping\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetDisplayModeProxy(GetDisplayMode_Type pGetDisplayMode, LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) -{ - HRESULT res; - OutTraceP("GetDisplayMode(D): PROXED lpdd=%x lpddsd=%x\n", lpdd, lpddsd); - res=(*pGetDisplayMode)(lpdd, lpddsd); - if(res) OutTraceP("GetDisplayMode(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else{ - OutTraceP("GetDisplayMode(D): WxH=(%dx%d) PixelFormat Flags=%x(%s) RGBBitCount=%d RGBAmask=(%x,%x,%x,%x) Caps=%x(%s)\n", - lpddsd->dwWidth, lpddsd->dwHeight, - lpddsd->ddpfPixelFormat.dwFlags, ExplainPixelFormatFlags(lpddsd->ddpfPixelFormat.dwFlags), - lpddsd->ddpfPixelFormat.dwRGBBitCount, - lpddsd->ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask, - lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask, - lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); - } - return res; -} - -HRESULT WINAPI extGetDisplayMode1Proxy(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) -{ - return extGetDisplayModeProxy(pGetDisplayMode1, lpdd, lpddsd); -} - -HRESULT WINAPI extGetDisplayMode2Proxy(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) -{ - return extGetDisplayModeProxy(pGetDisplayMode2, lpdd, lpddsd); -} - -HRESULT WINAPI extGetDisplayMode4Proxy(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd) -{ - return extGetDisplayModeProxy((GetDisplayMode_Type)pGetDisplayMode4, lpdd, (LPDDSURFACEDESC)lpddsd); -} - -HRESULT WINAPI extGetDisplayMode7Proxy(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) -{ - return extGetDisplayModeProxy((GetDisplayMode_Type)pGetDisplayMode7, lpdd, (LPDDSURFACEDESC)lpddsd); -} - - -HRESULT WINAPI extGetGDISurfaceProxy(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) -{ - int res; - OutTraceP("GetGDISurface(D): PROXED lpdd=%x\n", lpdd); - res=(*pGetGDISurface)(lpdd, w); - if (res) OutTraceP("GetGDISurface(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetGDISurface(D): lpdds=%x\n", *w); - return res; -} - -HRESULT WINAPI extSetCooperativeLevelProxy(void *lpdd, HWND hwnd, DWORD dwflags) -{ - HRESULT res; - OutTraceP("SetCooperativeLevel(D): PROXED lpdd=%x hwnd=%x dwFlags=%x(%s)\n", - lpdd, hwnd, dwflags,ExplainCoopFlags(dwflags)); - res=(*pSetCooperativeLevel1)(lpdd, hwnd, dwflags); - if (res) OutTraceP("SetCooperativeLevel(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -static HRESULT WINAPI extSetDisplayModeProxy(int dxversion, LPDIRECTDRAW lpdd, - DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwRefreshRate, DWORD dwflags) -{ - HRESULT res; - char sExtra[81]; - if(IsTraceP){ - if(dxversion>1) sprintf(sExtra, " refresh=%x dwFlags=%x", dwRefreshRate, dwflags); - OutTraceP("SetDisplayMode(%d): PROXED lpdd=%x WxH=(%dx%d) bpp=%d%s\n", - lpdd, dwwidth, dwheight, dwbpp, (dxversion>1)?sExtra : ""); - } - switch(dxversion){ - default: - case 1: res=(*pSetDisplayMode1)(lpdd, dwwidth, dwheight, dwbpp); break; - case 2: res=(*pSetDisplayMode2)(lpdd, dwwidth, dwheight, dwbpp, dwRefreshRate, dwflags); break; - case 4: res=(*pSetDisplayMode4)(lpdd, dwwidth, dwheight, dwbpp, dwRefreshRate, dwflags); break; - case 7: res=(*pSetDisplayMode7)(lpdd, dwwidth, dwheight, dwbpp, dwRefreshRate, dwflags); break; - } - if (res) OutTraceP("SetDisplayMode(%d): ERROR res=%x(%s)\n", dxversion, res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extSetDisplayMode1Proxy(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp) -{ - return extSetDisplayModeProxy(1, lpdd, dwwidth, dwheight, dwbpp, 0, 0); -} - -HRESULT WINAPI extSetDisplayMode2Proxy(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) -{ - return extSetDisplayModeProxy(2, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); -} - -HRESULT WINAPI extSetDisplayMode4Proxy(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) -{ - return extSetDisplayModeProxy(4, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); -} - -HRESULT WINAPI extSetDisplayMode7Proxy(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) -{ - return extSetDisplayModeProxy(7, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); -} - -HRESULT WINAPI extTestCooperativeLevelProxy(LPDIRECTDRAW lpdd) -{ - HRESULT res; - OutTraceP("TestCooperativeLevel: PROXED lpdd=%x\n", lpdd); - res=(*pTestCooperativeLevel)(lpdd); - if (res) OutTraceP("TestCooperativeLevel: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -// ------------------------------------------------------------------------------------------ // -// -// DirectDrawClipper proxed methods -// -// ------------------------------------------------------------------------------------------ // - -HRESULT WINAPI extQueryInterfaceCProxy(void *lpddclip, REFIID riid, LPVOID *obp) -{ - HRESULT res; - OutTraceP("QueryInterface(C): PROXED lpddClip=%x REFIID=%x(%s)\n", lpddclip, riid.Data1, ExplainGUID((GUID *)&riid.Data1)); - res = (*pQueryInterfaceC)(lpddclip, riid, obp); - if(res) OutTraceP("QueryInterface(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("QueryInterface(C): obp=%x\n", *obp); - return res; -} - -HRESULT WINAPI extAddRefCProxy(LPDIRECTDRAWCLIPPER lpddClip) -{ - ULONG ref; - ref=(*pAddRefC)(lpddClip); - OutTraceP("AddRef(C): PROXED lpddClip=%x ref=%x\n", lpddClip, ref); - return ref; -} - -HRESULT WINAPI extGetClipListProxy(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw) -{ - HRESULT res; - if(IsTraceP){ - char sInfo[81]; - if (lpRect) sprintf(sInfo, "rect=(%d,%d)-(%d,%d) ", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); - else sprintf(sInfo, "rect=(NULL) "); - OutTrace("GetClipList(C): PROXED lpddClip=%x %s\n", lpddClip, sInfo); - } - res=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw); - if(IsTraceP){ - //char *sInfo[1024]; - if(res) OutTrace("GetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - else{ - if(lpRgnData){ - OutTrace("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d bound=(%d,%d)-(%d,%d)}\n", - *lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, - lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom); - if(IsDebug){ - RECT *rgns; - rgns = (RECT *)lpRgnData->Buffer; - for(DWORD i=0; irdh.nCount; i++){ - OutTrace("GetClipList(C): rect[%d]=(%d,%d)-(%d,%d)\n", - i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom); - } - } - } - else{ - OutTrace("GetClipList(C): w=%x\n", *lpw); - } - } - } - return res; -} - -HRESULT WINAPI extGetHWndProxy(LPDIRECTDRAWCLIPPER lpddClip, HWND FAR *lphwnd) -{ - HRESULT res; - OutTraceP("GetHWnd(C): PROXED lpddClip=%x\n", lpddClip); - res=(*pGetHWnd)(lpddClip, lphwnd); - if(res) OutTraceP("GetHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetHWnd(C): hwnd=%x\n", *lphwnd); - return res; -} - -HRESULT WINAPI extInitializeCProxy(LPDIRECTDRAWCLIPPER lpddClip, LPDIRECTDRAW lpdd, DWORD w) -{ - HRESULT res; - OutTraceP("Initialize(C): PROXED lpddClip=%x w=%x\n", lpddClip, w); - res=(*pInitializeC)(lpddClip, lpdd, w); - if(res) OutTraceP("Initialize(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extIsClipListChangedProxy(LPDIRECTDRAWCLIPPER lpddClip, BOOL FAR *w) -{ - HRESULT res; - OutTraceP("IsClipListChanged(C): PROXED lpddClip=%x\n", lpddClip); - res=(*pIsClipListChanged)(lpddClip, w); - if(res) OutTraceP("IsClipListChanged(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("IsClipListChanged(C): w=%x\n", *w); - return res; -} - -HRESULT WINAPI extSetClipListProxy(LPDIRECTDRAWCLIPPER lpddClip, LPRGNDATA lpRegnData, DWORD flags) -{ - // to complete .... - HRESULT res; - OutTraceP("SetClipList(C): PROXED lpddClip=%x RgnData=??? flags=%x\n", lpddClip, flags); - res=(*pSetClipList)(lpddClip, lpRegnData, flags); - if(res) OutTraceP("SetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extSetHWndProxy(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd) -{ - HRESULT res; - OutTraceP("SetHWnd(C): PROXED lpddClip=%x w=%x hwnd=%x\n", lpddClip, w, hwnd); - res=(*pSetHWnd)(lpddClip, w, hwnd); - if(res) OutTraceP("SetHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extReleaseCProxy(LPDIRECTDRAWCLIPPER lpddClip) -{ - ULONG ref; - ref=(*pReleaseC)(lpddClip); - OutTraceP("Release(C): PROXED lpddClip=%x ref=%x\n", lpddClip, ref); - return ref; -} - - -// ------------------------------------------------------------------------------------------ // -// -// DirectDrawPalette proxed methods -// -// ------------------------------------------------------------------------------------------ // - -HRESULT WINAPI extQueryInterfacePProxy(void *lpddp, REFIID riid, LPVOID *obp) -{ - HRESULT res; - OutTraceP("QueryInterface(P): PROXED lpddp=%x REFIID=%x(%s)\n", lpddp, riid.Data1, ExplainGUID((GUID *)&riid.Data1)); - res = (*pQueryInterfaceP)(lpddp, riid, obp); - if(res) OutTraceP("QueryInterface(P): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("QueryInterface(P): obp=%x\n", *obp); - return res; -} - -HRESULT WINAPI extAddRefPProxy(LPDIRECTDRAWPALETTE lpddPalette) -{ - ULONG ref; - ref=(*pAddRefP)(lpddPalette); - OutTraceP("AddRef(P): PROXED lpddPalette=%x ref=%x\n", lpddPalette, ref); - return ref; -} - - -HRESULT WINAPI extReleasePProxy(LPDIRECTDRAWPALETTE lpddPalette) -{ - ULONG ref; - //OutTraceP("Release(P): lpddPalette=%x\n", lpddPalette); - ref=(*pReleaseP)(lpddPalette); - OutTraceP("Release(P): PROXED lpddPalette=%x ref=%x\n", lpddPalette, ref); - return ref; -} - -HRESULT WINAPI extGetCapsPProxy(LPDIRECTDRAWPALETTE lpddp, LPDWORD w) -{ - HRESULT res; - OutTraceP("GetCaps(P): PROXED lpddp=%x\n", lpddp); - res=(*pGetCapsP)(lpddp, w); - if(res) OutTraceP("GetCaps(P): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(P): caps=%x\n", *w); - return res; -} - -HRESULT WINAPI extGetEntriesProxy(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dwstart, DWORD dwcount, LPPALETTEENTRY lpentries) -{ - HRESULT res; - OutTraceP("GetEntries(P): PROXED lpddp=%x flags=%x start=%d, count=%d\n", lpddp, dwflags, dwstart, dwcount); - res=(*pGetEntries)(lpddp, dwflags, dwstart, dwcount, lpentries); - if(IsDebug && !res) dxw.DumpPalette(dwcount, &lpentries[dwstart]); - if (res) OutTraceP("GetEntries(P): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extSetEntriesProxy(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dwstart, DWORD dwcount, LPPALETTEENTRY lpentries) -{ - HRESULT res; - OutTraceP("SetEntries(P): PROXED lpddp=%x flags=%x start=%d, count=%d\n", lpddp, dwflags, dwstart, dwcount); - if(IsDebug) dxw.DumpPalette(dwcount, &lpentries[dwstart]); - res=(*pSetEntries)(lpddp, dwflags, dwstart, dwcount, lpentries); - if (res) OutTraceP("SetEntries(P): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -// ------------------------------------------------------------------------------------------ // -// -// DirectDrawSurface proxed methods -// -// ------------------------------------------------------------------------------------------ // - -HRESULT WINAPI extSetOverlayPositionProxy(LPDIRECTDRAWSURFACE lpdds, LONG l1, LONG l2) -{ - HRESULT res; - OutTraceP("SetOverlayPosition(S): PROXED lpdds=%x l1=%x l2=%x\n", lpdds, l1, l2); - res=(*pSetOverlayPosition)(lpdds, l1, l2); - if (res) OutTraceP("SetOverlayPosition(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extEnumOverlayZOrdersProxy(LPDIRECTDRAWSURFACE lpdds, DWORD w, LPVOID v, LPDDENUMSURFACESCALLBACK eozCBack) -{ - HRESULT res; - OutTraceP("EnumOverlayZOrders(S): PROXED lpdds=%x w=%x v=%x\n", lpdds, w, v); - res=(*pEnumOverlayZOrders)(lpdds, w, v, eozCBack); - if(res) OutTraceP("EnumOverlayZOrders(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetBltStatusProxy(LPDIRECTDRAWSURFACE lpdds, DWORD flags) -{ - HRESULT res; - res=(*pGetBltStatus)(lpdds, flags); - OutTraceP("GetBltStatus(S): PROXED lpdds=%x flags=%x(%s) res=%x(%s)\n", lpdds, flags, ExplainBltStatus(flags), res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetClipperProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER FAR*lpddc) -{ - HRESULT res; - OutTraceP("GetClipper(P): PROXED lpdds=%x\n", lpdds); - res=(*pGetClipper)(lpdds, lpddc); - if(res) OutTraceP("GetClipper(P): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetClipper(P): ddc=%x\n", *lpddc); - return res; -} - -HRESULT WINAPI extGetFlipStatusProxy(LPDIRECTDRAWSURFACE lpdds, DWORD flags) -{ - HRESULT res; - OutTraceP("GetFlipStatus(S): PROXED lpdds=%x flags=%x(%s)\n", lpdds, flags, ExplainFlipStatus(flags)); - res=(*pGetFlipStatus)(lpdds, flags); - if(res==DDERR_WASSTILLDRAWING) OutTraceP("GetFlipStatus(S): res=%x(%s)\n", res, ExplainDDError(res)); - else - if(res) OutTraceP("GetFlipStatus(S): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetOverlayPositionProxy(LPDIRECTDRAWSURFACE lpdds, LPLONG lpl1, LPLONG lpl2) -{ - HRESULT res; - OutTraceP("GetOverlayPosition(S): PROXED lpdds=%x\n", lpdds); - res=(*pGetOverlayPosition)(lpdds, lpl1, lpl2); - if(res) OutTraceP("GetOverlayPosition(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetOverlayPosition(S): p1=%x p2=%x\n", *lpl1, *lpl2); - return res; -} - -// ----------------- DirectDraw Surface proxy methods ------------------------// - -HRESULT WINAPI extBltBatchProxy(LPDIRECTDRAWSURFACE lpdds, LPDDBLTBATCH lpDDBltBatch , DWORD dwCount, DWORD dwflags) -{ - HRESULT res; - OutTraceP("BltBatch(S): PROXED lpdds=%x lpddsadd=%x DDBltBatch=%x count=%d flags=%x\n", lpdds, lpDDBltBatch, dwCount, dwflags); - res=(*pBltBatch)(lpdds, lpDDBltBatch, dwCount, dwflags); - if(res) OutTraceP("BltBatch(S): ERROR %x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extQueryInterfaceSProxy(void *lpdds, REFIID riid, LPVOID *obp) -{ - HRESULT res; - unsigned int dxVersion; - OutTraceP("QueryInterface(S): PROXED lpdds=%x REFIID=%x(%s)\n", lpdds, riid.Data1, ExplainGUID((GUID *)&riid.Data1)); - res = (*pQueryInterfaceS)(lpdds, riid, obp); - if(res){ - OutTraceP("QueryInterface(S): ERROR err=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - - dxVersion=0; - switch(riid.Data1){ - case 0x6C14DB81: - dxVersion = 1; - break; - case 0x57805885: - dxVersion = 2; - break; - case 0xDA044E00: - dxVersion = 3; - break; - case 0x0B2B8630: - dxVersion = 4; - break; - case 0x06675a80: - dxVersion = 7; - break; - } - OutTraceP("QueryInterface(S): obp=%x interface=%d\n", *obp, dxVersion); - switch (dxVersion){ - case 1: - case 2: - case 3: - case 4: - case 7: -#ifdef HOOKSURFACE - HookDDSurfaceProxy((LPDIRECTDRAWSURFACE *)obp, dxVersion); -#endif - break; - } - return res; -} - -HRESULT WINAPI extReleaseSProxy(LPDIRECTDRAWSURFACE lpdds) -{ - HRESULT res; - res=(*pReleaseS)(lpdds); - OutTraceP("Release(S): PROXED lpdds=%x res=%x\n", lpdds, res); - return res; -} - -HRESULT WINAPI extAddAttachedSurfaceProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) -{ - HRESULT res; - OutTraceP("AddAttachedSurface(S): PROXED lpdds=%x lpddsadd=%x\n", lpdds, lpddsadd); - res=(*pAddAttachedSurface)(lpdds, lpddsadd); - if(res) OutTraceP("AddAttachedSurface(S): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extBltProxy(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, - LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) -{ - HRESULT res; - OutTraceP("Blt(S): PROXED dest=%x src=%x dwFlags=%x(%s)", - lpdds, lpddssrc, dwflags, ExplainBltFlags(dwflags)); - if (lpdestrect) - OutTraceP(" destrect=(%d,%d)-(%d,%d)", lpdestrect->left, lpdestrect->top, lpdestrect->right, lpdestrect->bottom); - else - OutTraceP(" destrect=(NULL)"); - if (lpsrcrect) - OutTraceP(" srcrect=(%d,%d)-(%d,%d)\n", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom); - else - OutTraceP(" srcrect=(NULL)\n"); - res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); - if(res) OutTraceP("Blt(S): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extBltFastProxy(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, - LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) -{ - HRESULT res; - OutTraceP("BltFast(S): PROXED lpdds=%x xy=(%d,%d) src=%x dwtrans=%x(%s)", - lpdds, dwx, dwy, lpddssrc, dwtrans, ExplainBltFastFlags(dwtrans)); - if (lpsrcrect) - OutTraceP(" srcrect=(%d,%d)-(%d,%d)\n", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom); - else - OutTraceP(" srcrect=(NULL)\n"); - res=(*pBltFast)(lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); - if(res) OutTraceP("BltFast(S): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extEnumAttachedSurfacesProxy(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) -{ - HRESULT res; - OutTraceP("EnumAttachedSurfaces(S): PROXED lpdds=%x Context=%x Callback=%x\n", lpdds, lpContext, lpEnumSurfacesCallback); - res=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback); - if(res) OutTraceP("EnumAttachedSurfaces(S): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetAttachedSurface1Proxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) -{ - HRESULT res; - OutTraceP("GetAttachedSurface(S1): PROXED lpdds=%x caps=%x(%s)\n", - lpdds, lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps)); - res=(*pGetAttachedSurface1)(lpdds, lpddsc, lplpddas); - if(res) OutTraceP("GetAttachedSurface(S1): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetAttachedSurface(S1): lpddas=%x\n", *lplpddas); - return res; -} - -HRESULT WINAPI extGetAttachedSurface3Proxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) -{ - HRESULT res; - OutTraceP("GetAttachedSurface(S3): PROXED lpdds=%x caps=%x(%s)\n", - lpdds, lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps)); - res=(*pGetAttachedSurface3)(lpdds, lpddsc, lplpddas); - if(res) OutTraceP("GetAttachedSurface(S3): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetAttachedSurface(S3): lpddas=%x\n", *lplpddas); - return res; -} - -HRESULT WINAPI extGetAttachedSurface4Proxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) -{ - HRESULT res; - OutTraceP("GetAttachedSurface(S4): PROXED lpdds=%x caps=%x(%s)\n", - lpdds, lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps)); - res=(*pGetAttachedSurface4)(lpdds, lpddsc, lplpddas); - if(res) OutTraceP("GetAttachedSurface(S4): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetAttachedSurface(S4): lpddas=%x\n", *lplpddas); - return res; -} - -HRESULT WINAPI extGetAttachedSurface7Proxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) -{ - HRESULT res; - OutTraceP("GetAttachedSurface(S7): PROXED lpdds=%x caps=%x(%s)\n", - lpdds, lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps)); - res=(*pGetAttachedSurface7)(lpdds, lpddsc, lplpddas); - if(res) OutTraceP("GetAttachedSurface(S7): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetAttachedSurface(S7): lpddas=%x\n", *lplpddas); - return res; -} - -HRESULT WINAPI extGetCaps1SProxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - HRESULT res; - OutTraceP("GetCaps(S1): PROXED lpdds=%x\n", lpdds); - res=(*pGetCaps1S)(lpdds, caps); - if(res) OutTraceP("GetCaps(S1): ERROR %x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(S1): caps=%x(%s)\n", caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); - return res; -} - -HRESULT WINAPI extGetCaps2SProxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - HRESULT res; - OutTraceP("GetCaps(S2): PROXED lpdds=%x\n", lpdds); - res=(*pGetCaps2S)(lpdds, caps); - if(res) OutTraceP("GetCaps(S2): ERROR %x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(S2): caps=%x(%s)\n", caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); - return res; -} - -HRESULT WINAPI extGetCaps3SProxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - HRESULT res; - OutTraceP("GetCaps(S3): PROXED lpdds=%x\n", lpdds); - res=(*pGetCaps3S)(lpdds, caps); - if(res) OutTraceP("GetCaps(S3): ERROR %x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(S3): caps=%x(%s)\n", caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); - return res; -} - -HRESULT WINAPI extGetCaps4SProxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) -{ - HRESULT res; - OutTraceP("GetCaps(S4): PROXED lpdds=%x\n", lpdds); - res=(*pGetCaps4S)(lpdds, caps); - if(res) OutTraceP("GetCaps(S4): ERROR %x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(S4): caps=%x(%s)\n", caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); - return res; -} - -HRESULT WINAPI extGetCaps7SProxy(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) -{ - HRESULT res; - OutTraceP("GetCaps(S7): PROXED lpdds=%x\n", lpdds); - res=(*pGetCaps7S)(lpdds, caps); - if(res) OutTraceP("GetCaps(S7): ERROR %x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetCaps(S7): caps=%x(%s)\n", caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); - return res; -} - -HRESULT WINAPI extGetColorKeyProxy(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) -{ - HRESULT res; - OutTraceP("GetColorKey(S): PROXED lpdds=%x flags=%x(%s)\n", lpdds, flags, ExplainColorKeyFlag(flags)); - res=(*pGetColorKey)(lpdds, flags, lpDDColorKey); - if(res) OutTraceP("GetColorKey(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else OutTraceP("GetColorKey(S): colors=(L:%x,H:%x)\n", - lpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue); - return res; -} - -HRESULT WINAPI extGetPaletteProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) -{ - HRESULT res; - OutTraceP("GetPalette(S): PROXED lpdds=%x\n", lpdds); - res=(*pGetPalette)(lpdds, lplpddp); - if(res)OutTraceP("GetPalette(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetPixelFormatProxy(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) -{ - DWORD res; - OutTraceP("GetPixelFormat(S): PROXED lpdds=%x\n", lpdds); - res=(*pGetPixelFormat)(lpdds, p); - if(res) - OutTraceP("GetPixelFormat(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else - OutTraceP("GetPixelFormat(S): Flags=%x(%s) FourCC=%x BitCount=%d RGBA=(%x,%x,%x,%x)\n", - p->dwFlags, ExplainPixelFormatFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount, - p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask ); - return res; -} - -static char *sdtype(int dwSize) -{ - switch(dwSize){ - case sizeof(DDSURFACEDESC): return "type1"; break; - case sizeof(DDSURFACEDESC2): return "type2"; break; - default: return "unknown"; break; - } - return ""; -} - -HRESULT WINAPI extSetClipperProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) -{ - HRESULT res; - OutTraceP("SetClipper(S): PROXED lpdds=%x lpddc=%x\n", lpdds, lpddc); - res=(*pSetClipper)(lpdds, lpddc); - if (res)OutTraceP("SetClipper(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extSetColorKeyProxy(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) -{ - HRESULT res; - OutTraceP("SetColorKey(S): PROXED lpdds=%x flags=%x ", lpdds, flags); - if (lpDDColorKey) - OutTraceP("colors=(L:%x,H:%x)\n",lpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue); - else - OutTraceP("colors=(NULL)\n"); - res=(*pSetColorKey)(lpdds, flags, lpDDColorKey); - if(res) OutTraceP("SetColorKey(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extSetPaletteProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) -{ - HRESULT res; - OutTraceP("SetPalette(S): PROXED lpdds=%x lpddp=%x\n", lpdds, lpddp); - res=(*pSetPalette)(lpdds, lpddp); - if(res)OutTraceP("SetPalette(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extLockProxy(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpdds2, DWORD flags, HANDLE hEvent) -{ - HRESULT res; - OutTraceP("Lock(S): PROXED lpdds=%x flags=%x(%s) lpdds2=%x", lpdds, flags, ExplainLockFlags(flags), lpdds2); - if (lprect) - OutTraceP(" rect=(%d,%d)-(%d,%d)\n", lprect->left, lprect->top, lprect->right, lprect->bottom); - else - OutTraceP(" rect=(NULL)\n"); - res=(*pLock)(lpdds, lprect, lpdds2, flags, hEvent); - if (res) OutTraceP("Lock(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extUnlock1Proxy(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) -{ - HRESULT res; - OutTraceP("Unlock(S): PROXED lpdds=%x ", lpdds); - if (lpvoid) - OutTraceP("lpvoid=%x->%x\n", lpvoid, *(DWORD *)lpvoid); - else - OutTraceP("lpvoid=(NULL)\n"); - res=(*pUnlock1)(lpdds, lpvoid); - if(res)OutTraceP("Unlock(S): ERROR res=%x(%s)\n",res,ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extUnlock4Proxy(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) -{ - HRESULT res; - OutTraceP("Unlock(S): PROXED lpdds=%x ", lpdds); - if (lprect) - OutTraceP("rect=(%d,%d)-(%d,%d)\n", lprect->left, lprect->top, lprect->right, lprect->bottom); - else - OutTraceP("rect=(NULL)\n"); - res=(*pUnlock4)(lpdds, lprect); - if(res)OutTraceP("Unlock(S): ERROR res=%x(%s)\n",res,ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extGetDCProxy(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) -{ - HRESULT res; - OutTraceP("GetDC(S): PROXED lpdss=%x\n",lpdds); - res=(*pGetDC)(lpdds,pHDC); - if(res) OutTraceP("GetDC(S): ERROR res=%x(%s)\n",res,ExplainDDError(res)); - else OutTraceP("GetDC(S): hdc=%x\n",*pHDC); - return res; -} - -HRESULT WINAPI extReleaseDCProxy(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) -{ - HRESULT res; - OutTraceP("ReleaseDC(S): lpdds=%x hdc=%x\n", lpdds, hdc); - res=(*pReleaseDC)(lpdds,hdc); - if(res) OutTraceP("ReleaseDC(S): ERROR res=%x(%s)\n",res,ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extDeleteAttachedSurfaceProxy(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) -{ - HRESULT res; - OutTraceP("DeleteAttachedSurface(S): lpdds=%x flags=%x lpddsdel=%x\n", lpdds, dwflags, lpddsdel); - res=(*pDeleteAttachedSurface)(lpdds, dwflags, lpddsdel); - if(res) OutTraceP("DeleteAttachedSurface(S): ERROR %x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extIsLostProxy(LPDIRECTDRAWSURFACE lpdds) -{ - HRESULT res; - //OutTraceP("IsLost: PROXED lpdds=%x\n", lpdds); - res=(*pIsLost)(lpdds); - OutTraceP("IsLost(S): PROXED lpdds=%x res=%x\n", lpdds, res); - return res; -} - -HRESULT WINAPI extRestoreProxy(LPDIRECTDRAWSURFACE lpdds) -{ - HRESULT res; - OutTraceP("Restore(S): PROXED lpdds=%x\n", lpdds); - res=(*pRestore)(lpdds); - if(res) OutTraceP("Restore(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extUpdateOverlayDisplayProxy(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags) -{ - HRESULT res; - OutTraceP("UpdateOverlayDisplay(S): PROXED lpdds=%x flags=%x\n", lpdds, dwflags); - res=(*pUpdateOverlayDisplay)(lpdds, dwflags); - if(res) OutTraceP("UpdateOverlayDisplay(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extFlipProxy(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddst, DWORD dwflags) -{ - HRESULT res; - OutTraceP("Flip(S): PROXED target=%x, src=%x, flags=%x(%s)\n", lpdds, lpddst, dwflags, ExplainFlipFlags(dwflags)); - res=(*pFlip)(lpdds, lpddst, dwflags); - if(res) OutTraceP("Flip(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extAddOverlayDirtyRectProxy(LPDIRECTDRAWSURFACE lpdds, LPRECT drect) -{ - HRESULT res; - OutTraceP("AddOverlayDirtyRect(S): PROXED lpdds=%x ", lpdds); - if (drect) - OutTraceP(" drect=(%d,%d)-(%d,%d)\n",drect->left, drect->top, drect->right, drect->bottom); - else - OutTraceP(" drect=(NULL)\n"); - - res=(*pAddOverlayDirtyRect)(lpdds, drect); - if(res) OutTraceP("AddOverlayDirtyRect(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extUpdateOverlayProxy(LPDIRECTDRAWSURFACE lpdds, LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpddsdest, LPRECT lpDestRect, DWORD dwflags, LPDDOVERLAYFX f) -{ - HRESULT res; - OutTraceP("UpdateOverlay(S): PROXED lpdds=%x lpddsdest=%x dwflags=%x", lpdds, lpddsdest, dwflags); - if (lpSrcRect) - OutTraceP(" src=(%d,%d)-(%d,%d)",lpSrcRect->left, lpSrcRect->top, lpSrcRect->right, lpSrcRect->bottom); - else - OutTraceP(" src=(NULL)"); - if (lpDestRect) - OutTraceP(" dest=(%d,%d)-(%d,%d)\n",lpDestRect->left, lpDestRect->top, lpDestRect->right, lpDestRect->bottom); - else - OutTraceP(" dest=(NULL)\n"); - res=(*pUpdateOverlay)(lpdds, lpSrcRect, lpddsdest, lpDestRect, dwflags, f); - if(res) OutTraceP("UpdateOverlay(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -HRESULT WINAPI extUpdateOverlayZOrderProxy(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDIRECTDRAWSURFACE lpDDSReference) -{ - HRESULT res; - OutTraceP("UpdateOverlayZOrder(S): PROXED lpdds=%x lpddsref=%x flags=%x\n",lpdds, lpDDSReference, flags); - res=(*pUpdateOverlayZOrder)(lpdds, flags, lpDDSReference); - if(res) OutTraceP("UpdateOverlayZOrder(S): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; -} - -ULONG WINAPI extAddRefSProxy(LPDIRECTDRAWSURFACE lpdds) -{ - ULONG ref; - ref=(*pAddRefS)(lpdds); - OutTraceP("AddRef(S): PROXED lpdds=%x ref=%x\n", lpdds, ref); - return ref; -} - - - - - -static void HookDDSessionProxy(LPDIRECTDRAW *lplpdd, int dxVersion) -{ - OutTraceP("Hooking directdraw session dd=%x dxVersion=%d thread_id=%x\n", *lplpdd, dxVersion, GetCurrentThreadId()); - - // IDIrectDraw::QueryInterface - SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceDProxy, (void **)&pQueryInterfaceD, "QueryInterface(D)"); -#ifdef TRACECOMMETHODS - // IDIrectDraw::AddRef - SetHook((void *)(**(DWORD **)lplpdd + 4), extAddRefDProxy, (void **)&pAddRefD, "AddRef(D)"); - // IDIrectDraw::Release - SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseDProxy, (void **)&pReleaseD, "Release(D)"); -#endif - // IDIrectDraw::Compact - SetHook((void *)(**(DWORD **)lplpdd + 12), extCompactProxy, (void **)&pCompact, "Compact(D)"); - // IDIrectDraw::CreateClipper - SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipperProxy, (void **)&pCreateClipper, "CreateClipper(D)"); - // IDIrectDraw::CreatePalette - SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePaletteProxy, (void **)&pCreatePalette, "CreatePalette(D)"); - switch(dxVersion) { - case 1: - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1Proxy, (void **)&pCreateSurface1, "CreateSurface(D1)"); - break; - case 2: - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2Proxy, (void **)&pCreateSurface2, "CreateSurface(D2)"); - break; - case 4: - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4Proxy, (void **)&pCreateSurface4, "CreateSurface(D4)"); - break; - case 7: - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7Proxy, (void **)&pCreateSurface7, "CreateSurface(D7)"); - break; - } - // IDIrectDraw::DuplicateSurface - SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurfaceProxy, (void **)&pDuplicateSurface, "DuplicateSurface(D)"); - // IDIrectDraw::EnumDisplayModes - switch(dxVersion) { - case 1: - case 2: - SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes1Proxy, (void **)&pEnumDisplayModes1, "EnumDisplayModes(D1)"); - break; - case 4: - case 7: - SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes4Proxy, (void **)&pEnumDisplayModes4, "EnumDisplayModes(D4)"); - break; - } - // IDIrectDraw::EnumSurfaces - if (dxVersion < 4) - SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy1, (void **)&pEnumSurfaces1, "EnumSurfaces(D1)"); - else - SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy4, (void **)&pEnumSurfaces4, "EnumSurfaces(D4)"); - // IDIrectDraw::FlipToGDISurface - SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurfaceProxy, (void **)&pFlipToGDISurface, "FlipToGDISurface(D)"); - // IDIrectDraw::GetCaps - // IDIrectDraw::GetDisplayMode - // IDIrectDraw::SetDisplayMode - switch(dxVersion) { - case 1: - SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)"); - SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1Proxy, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)"); - SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1Proxy, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)"); - break; - case 2: - SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)"); - SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2Proxy, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)"); - SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2Proxy, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)"); - break; - case 4: - SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)"); - SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4Proxy, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)"); - SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4Proxy, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)"); - break; - case 7: - SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)"); - SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7Proxy, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)"); - SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7Proxy, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)"); - break; - } - // IDIrectDraw::GetFourCCCodes - SetHook((void *)(**(DWORD **)lplpdd + 52), extGetFourCCCodesProxy, (void **)&pGetFourCCCodes, "GetFourCCCodes(D)"); - // IDIrectDraw::GetGDISurface - SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurfaceProxy, (void **)&pGetGDISurface, "GetGDISurface(D)"); - // IDIrectDraw::GetMonitorFrequency - SetHook((void *)(**(DWORD **)lplpdd + 60), extGetMonitorFrequencyProxy, (void **)&pGetMonitorFrequency, "GetMonitorFrequency(D)"); - // IDIrectDraw::GetScanLine - SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLineProxy, (void **)&pGetScanLine, "GetScanLine(D)"); - // IDIrectDraw::GetVerticalBlankStatus - SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)"); - // IDIrectDraw::Initialize - SetHook((void *)(**(DWORD **)lplpdd + 72), extInitializeProxy, (void **)&pInitialize, "Initialize(D)"); - // IDIrectDraw::RestoreDisplayMode - SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)"); - if (dxVersion >= 2){ - // IDIrectDraw::GetAvailableVidMem - SetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMemProxy, (void **)&pGetAvailableVidMem, "GetAvailableVidMem(D)"); - } - if (dxVersion >= 4){ - // IDIrectDraw::GetSurfaceFromDC - SetHook((void *)(**(DWORD **)lplpdd + 96), extGetSurfaceFromDCProxy, (void **)&pGetSurfaceFromDC, "GetSurfaceFromDC(D)"); - // IDIrectDraw::RestoreAllSurfaces - SetHook((void *)(**(DWORD **)lplpdd + 100), extRestoreAllSurfacesProxy, (void **)&pRestoreAllSurfaces, "RestoreAllSurfaces(D)"); - // IDIrectDraw::GetDeviceIdentifier - SetHook((void *)(**(DWORD **)lplpdd + 108), extGetDeviceIdentifierProxy, (void **)&pGetDeviceIdentifier, "GetDeviceIdentifier(D)"); - } - // IDIrectDraw::SetCooperativeLevel - SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevelProxy, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D)"); -#if 0 - // IDIrectDraw::WaitForVerticalBlank - SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlankProxy, (void **)&pWaitForVerticalBlank, "WaitForVerticalBlank(D)"); -#endif - if (dxVersion >= 4){ - // IDIrectDraw::TestCooperativeLevel - SetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevelProxy, (void **)&pTestCooperativeLevel, "TestCooperativeLevel(D)"); - } -} - -HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu) -{ - HRESULT res; - - OutTraceP("DirectDrawCreate: PROXED guid=%x(%s)\n", - lpguid, ExplainGUID(lpguid)); - - res = (*pDirectDrawCreate)(lpguid, lplpdd, pu); - if(res) { - OutTraceP("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - - dxw.dwDDVersion=1; - char *mode; - switch ((DWORD)lpguid){ - case 0: mode="NULL"; break; - case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break; - case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break; - default: - switch (*(DWORD *)lpguid){ - case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; - case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; - case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; - case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; - default: mode="unknown"; break; - } - break; - } - OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion); - -#ifdef HOOKDDRAW - HookDDSessionProxy(lplpdd, dxw.dwDDVersion); -#endif - return 0; -} - -HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu) -{ - HRESULT res; - - OutTraceP("DirectDrawCreateEx: PROXED guid=%x(%s) refiid=%x\n", - lpguid, ExplainGUID(lpguid), RefIid); - - res = (*pDirectDrawCreateEx)(lpguid, lplpdd, RefIid, pu); - if(res) { - OutTraceP("DirectDrawCreateEx: ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - - dxw.dwDDVersion=7; - char *mode; - switch ((DWORD)lpguid){ - case 0: mode="NULL"; break; - case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break; - case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break; - default: - switch (*(DWORD *)lpguid){ - case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; - case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; - case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; - case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; - default: mode="unknown"; break; - } - break; - } - OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion); - -#ifdef HOOKDDRAW - HookDDSessionProxy(lplpdd, dxw.dwDDVersion); -#endif - - return 0; -} - -HRESULT WINAPI extGetSurfaceDesc1Proxy(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) -{ - HRESULT res; - OutTraceP("GetSurfaceDesc(1): PROXED lpdds=%x lpddsd=%x size=%x\n", lpdds, lpddsd, lpddsd->dwSize); - res=(*pGetSurfaceDesc1)(lpdds, lpddsd); - if (res) OutTraceP("GetSurfaceDesc(1): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else DumpSurfaceAttributesProxy(lpddsd, "GetSurfaceDesc(1)"); - return res; -} - -HRESULT WINAPI extGetSurfaceDesc4Proxy(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd) -{ - HRESULT res; - OutTraceP("GetSurfaceDesc(4): PROXED lpdds=%x lpddsd=%x size=%x\n", lpdds, lpddsd, lpddsd->dwSize); - res=(*pGetSurfaceDesc4)(lpdds, lpddsd); - if (res) OutTraceP("GetSurfaceDesc(4): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - else DumpSurfaceAttributesProxy((LPDDSURFACEDESC)lpddsd, "GetSurfaceDesc(4)"); - return res; -} - -BOOL WINAPI DDEnumerateCallback(GUID *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext) -{ - OutTrace("DDEnumerateCallback: guid=%x DriverDescription=\"%s\" DriverName=\"%s\" Context=%x\n", - lpGuid, lpDriverDescription, lpDriverName, lpContext); - return TRUE; -} - -BOOL WINAPI DDEnumerateCallbackEx(GUID *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm) -{ - OutTrace("DDEnumerateCallbackEx: guid=%x DriverDescription=\"%s\" DriverName=\"%s\" Context=%x hm=%x\n", - lpGuid, lpDriverDescription, lpDriverName, lpContext, hm); - return TRUE; -} - -HRESULT WINAPI extDirectDrawEnumerateProxy(LPDDENUMCALLBACK lpCallback, LPVOID lpContext) -{ - HRESULT ret; - OutTraceP("DirectDrawEnumerate: PROXED lpCallback=%x lpContext=%x\n", lpCallback, lpContext); - if(IsDebug) (*pDirectDrawEnumerate)(DDEnumerateCallback, lpContext); - ret=(*pDirectDrawEnumerate)(lpCallback, lpContext); - if(ret) OutTraceP("DirectDrawEnumerate: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); - return ret; -} - -HRESULT WINAPI extDirectDrawEnumerateExProxy(LPDDENUMCALLBACKEX lpCallback, LPVOID lpContext, DWORD dwFlags) -{ - HRESULT ret; - OutTraceP("DirectDrawEnumerateEx: PROXED lpCallback=%x lpContext=%x Flags=%x(%s)\n", - lpCallback, lpContext, dxw.dwFlags1, ExplainDDEnumerateFlags(dwFlags)); - (*pDirectDrawEnumerateEx)(DDEnumerateCallbackEx, lpContext, dwFlags); - ret=(*pDirectDrawEnumerateEx)(lpCallback, lpContext, dwFlags); - if(ret) OutTraceP("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); - return ret; -} - -// GDI calls proxy - -extern GDIGetDC_Type pGDIGetDC; -//GDIGetDC_Type pGDIGetWinDC; -extern GDIReleaseDC_Type pGDIReleaseDC; -extern CreateDC_Type pGDICreateDC; -extern CreateCompatibleDC_Type pGDICreateCompatibleDC; -extern BitBlt_Type pGDIBitBlt; -extern PatBlt_Type pGDIPatBlt; -extern StretchBlt_Type pGDIStretchBlt; -extern DeleteDC_Type pGDIDeleteDC; -extern SaveDC_Type pSaveDC; -extern RestoreDC_Type pRestoreDC; - -HDC WINAPI extGDIGetDCProxy(HWND hwnd) -{ - HDC ret; - ret=(*pGDIGetDC)(hwnd); - OutTraceP("GDI.GetDC: PROXED hwnd=%x ret=%x\n", hwnd, ret); - return ret; -} - -HDC WINAPI extGetWindowDCProxy(HWND hwnd) -{ - HDC ret; - ret=(*pGDIGetWindowDC)(hwnd); - OutTraceP("GDI.GetWindowDC: PROXED hwnd=%x ret=%x\n", hwnd, ret); - return ret; -} - -int WINAPI extGDIReleaseDCProxy(HWND hwnd, HDC hDC) -{ - int res; - OutTraceP("GDI.ReleaseDC: PROXED hwnd=%x hdc=%x\n", hwnd, hDC); - res=(*pGDIReleaseDC)(hwnd, hDC); - if (!res) OutTraceP("GDI.ReleaseDC ERROR: err=%d\n", GetLastError()); - return(res); -} - -HDC WINAPI extCreateDCProxy(LPSTR Driver, LPSTR Device, LPSTR Output, CONST DEVMODE *InitData) -{ - HDC RetHDC; - OutTraceP("GDI.CreateDC: PROXED Driver=%s Device=%s Output=%s InitData=%x\n", - Driver?Driver:"(NULL)", Device?Device:"(NULL)", Output?Output:"(NULL)", InitData); - - RetHDC=(*pGDICreateDC)(Driver, Device, Output, InitData); - if(RetHDC) - OutTraceP("GDI.CreateDC: returning HDC=%x\n", RetHDC); - else - OutTraceP("GDI.CreateDC ERROR: err=%d\n", GetLastError()); - return RetHDC; -} - -HDC WINAPI extCreateCompatibleDCProxy(HDC hdc) -{ - HDC RetHdc; - OutTraceP("GDI.CreateCompatibleDC: PROXED hdc=%x\n", hdc); - RetHdc=(*pGDICreateCompatibleDC)(hdc); - if(RetHdc) - OutTraceP("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc); - else - OutTraceP("GDI.CreateCompatibleDC ERROR: err=%d\n", GetLastError()); - return RetHdc; -} - -BOOL WINAPI extBitBltProxy(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop) -{ - BOOL res; - - OutTraceP("GDI.BitBlt: PROXED HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d dwRop=%x(%s)\n", - hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop, ExplainROP(dwRop)); - - res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); - if(!res) OutTraceP("GDI.BitBlt: ERROR err=%d\n", GetLastError()); - return res; -} - -BOOL WINAPI extPatBltProxy(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, DWORD dwRop) -{ - BOOL res; - - OutTraceP("GDI.PatBlt: PROXED HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d dwRop=%x(%s)\n", - hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop, ExplainROP(dwRop)); - - res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); - if(!res) OutTraceP("GDI.PatBlt: ERROR err=%d\n", GetLastError()); - return res; -} - -BOOL WINAPI extStretchBltProxy(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, - HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, DWORD dwRop) -{ - BOOL res; - - OutTraceP("GDI.StretchBlt: PROXED HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d dwRop=%x(%s)\n", - hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop, ExplainROP(dwRop)); - - res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); - if(!res) OutTraceP("GDI.StretchBlt: ERROR err=%d\n", GetLastError()); - return res; -} - -BOOL WINAPI extDeleteDCProxy(HDC hdc) -{ - BOOL res; - - OutTraceP("GDI.DeleteDC: PROXED hdc=%x\n", hdc); - res=(*pGDIDeleteDC)(hdc); - if(!res) OutTraceP("GDI.DeleteDC: ERROR err=%d\n", GetLastError()); - return res; -} - -int WINAPI extSaveDCProxy(HDC hdc) -{ - int ret; - - ret=(*pGDISaveDC)(hdc); - OutTraceP("GDI.SaveDC: PROXED hdc=%x ret=%x\n", hdc, ret); - return ret; -} - -BOOL WINAPI extRestoreDCProxy(HDC hdc, int nSavedDC) -{ - BOOL ret; - - ret=(*pGDIRestoreDC)(hdc, nSavedDC); - OutTraceP("GDI.RestoreDC: PROXED hdc=%x nSavedDC=%x ret=%x\n", hdc, nSavedDC, ret); - return ret; -} - -HPALETTE WINAPI extSelectPaletteProxy(HDC hdc, HPALETTE hpal, BOOL bForceBackground) -{ - HPALETTE ret; - - ret=(*pGDISelectPalette)(hdc, hpal, bForceBackground); - OutTraceP("GDI.SelectPalette: PROXED hdc=%x hpal=%x ForceBackground=%x ret=%x\n", hdc, hpal, bForceBackground, ret); - return ret; -} - -UINT WINAPI extRealizePaletteProxy(HDC hdc) -{ - UINT ret; - - ret=(*pGDIRealizePalette)(hdc); - OutTraceP("GDI.RealizePalette: PROXED hdc=%x ret=%x\n", hdc, ret); - return ret; -} - -UINT WINAPI extGetSystemPaletteEntriesProxy(HDC hdc, UINT iStartIndex, UINT nEntries, LPPALETTEENTRY lppe) -{ - UINT ret; - - ret=(*pGDIGetSystemPaletteEntries)(hdc, iStartIndex, nEntries, lppe); - OutTrace("GDI.GetSystemPaletteEntries: PROXED hdc=%x start=%d num=%d ret=%d\n", hdc, iStartIndex, nEntries, ret); - if(IsDebug && ret) dxw.DumpPalette(nEntries, &lppe[iStartIndex]); - if(!ret) OutTrace("GDI.GetSystemPaletteEntries: ERROR err=%d\n", GetLastError()); - return ret; -} - -HDC WINAPI extBeginPaintProxy(HWND hwnd, LPPAINTSTRUCT lpPaint) -{ - HDC ret; - - OutTraceP("GDI.BeginPaint: PROXED hwnd=%x lpPaint=%x\n", hwnd, lpPaint); - ret=(*pBeginPaint)(hwnd, lpPaint); - OutTraceP("GDI.BeginPaint: ret=%x\n", ret); - return ret; -} - -int WINAPI extGetDeviceCapsProxy(HDC hdc, int nindex) -{ - DWORD res; - - res = (*pGDIGetDeviceCaps)(hdc, nindex); - OutTraceDW("GetDeviceCaps: hdc=%x index=%x(%s) res=%x\n", - hdc, nindex, ExplainDeviceCaps(nindex), res); - - switch(nindex){ - case VERTRES: - OutTraceDW("GetDeviceCaps: VERTRES=%d\n", res); - break; - case HORZRES: - OutTraceDW("GetDeviceCaps: HORZRES=%d\n", res); - break; - case RASTERCAPS: - OutTraceDW("GetDeviceCaps: RASTERCAPS=%x(%s)\n",res, ExplainRasterCaps(res)); - break; - } - return res; -} - - diff --git a/dll/ddproxy.h b/dll/ddproxy.h deleted file mode 100644 index 4d0070c..0000000 --- a/dll/ddproxy.h +++ /dev/null @@ -1,101 +0,0 @@ -// DirectDraw Proxed APIs - -extern HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu); -extern HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu); -extern HRESULT WINAPI extDirectDrawEnumerateProxy(LPDDENUMCALLBACK, LPVOID); -extern HRESULT WINAPI extDirectDrawEnumerateExProxy(LPDDENUMCALLBACKEX, LPVOID, DWORD); - -// DirectDraw Surface Proxed methods - -extern HRESULT WINAPI extQueryInterfaceSProxy(void *, REFIID, LPVOID *); -extern ULONG WINAPI extAddRefSProxy(LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extReleaseSProxy(LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extAddOverlayDirtyRectProxy(LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI extBltBatchProxy(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD); -extern HRESULT WINAPI extEnumOverlayZOrdersProxy(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); -extern HRESULT WINAPI extFlipProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); -extern HRESULT WINAPI extGetBltStatusProxy(LPDIRECTDRAWSURFACE , DWORD); -extern HRESULT WINAPI extGetClipperProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER FAR*); -extern HRESULT WINAPI extGetFlipStatusProxy(LPDIRECTDRAWSURFACE, DWORD); -extern HRESULT WINAPI extGetOverlayPositionProxy(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); -extern HRESULT WINAPI extIsLostProxy(LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extLockProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); -extern HRESULT WINAPI extRestoreProxy(LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extSetOverlayPositionProxy(LPDIRECTDRAWSURFACE, LONG, LONG); -extern HRESULT WINAPI extUnlock1Proxy(LPDIRECTDRAWSURFACE, LPVOID); -extern HRESULT WINAPI extUnlock4Proxy(LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI extUpdateOverlayProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDOVERLAYFX); -extern HRESULT WINAPI extUpdateOverlayDisplayProxy(LPDIRECTDRAWSURFACE, DWORD); -extern HRESULT WINAPI extUpdateOverlayZOrderProxy(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extFlipProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); -extern HRESULT WINAPI extBltBatchProxy(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD); -extern HRESULT WINAPI extGetAttachedSurface1Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); -extern HRESULT WINAPI extGetAttachedSurface3Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); -extern HRESULT WINAPI extGetAttachedSurface4Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); -extern HRESULT WINAPI extGetAttachedSurface7Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); -extern HRESULT WINAPI extAddAttachedSurfaceProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extBltProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); -extern HRESULT WINAPI extBltFastProxy(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); -extern HRESULT WINAPI extDeleteAttachedSurfaceProxy(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); -extern HRESULT WINAPI extEnumAttachedSurfacesProxy(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); -extern HRESULT WINAPI extGetCaps1SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS); -extern HRESULT WINAPI extGetCaps2SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS); -extern HRESULT WINAPI extGetCaps3SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS); -extern HRESULT WINAPI extGetCaps4SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS2); -extern HRESULT WINAPI extGetCaps7SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS2); -extern HRESULT WINAPI extGetColorKeyProxy(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); -extern HRESULT WINAPI extGetDCProxy(LPDIRECTDRAWSURFACE, HDC FAR *); -extern HRESULT WINAPI extGetPaletteProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); -extern HRESULT WINAPI extGetPixelFormatProxy(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); -extern HRESULT WINAPI extReleaseDCProxy(LPDIRECTDRAWSURFACE, HDC FAR); -extern HRESULT WINAPI extSetClipperProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); -extern HRESULT WINAPI extSetColorKeyProxy(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); -extern HRESULT WINAPI extSetPaletteProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); - -extern HRESULT WINAPI extGetSurfaceDesc1Proxy(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC); -extern HRESULT WINAPI extGetSurfaceDesc4Proxy(LPDIRECTDRAWSURFACE2, LPDDSURFACEDESC2); - -// DirectDraw Proxed methods - -extern ULONG WINAPI extAddRefDProxy(LPDIRECTDRAW); -extern ULONG WINAPI extCompactProxy(LPDIRECTDRAW); -extern HRESULT WINAPI extEnumDisplayModesProxy(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); -extern HRESULT WINAPI extGetCaps1D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); -extern HRESULT WINAPI extGetCaps2D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); -extern HRESULT WINAPI extGetCaps4D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); -extern HRESULT WINAPI extGetCaps7D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); -extern HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW, LPDWORD, LPDWORD); -extern HRESULT WINAPI extGetMonitorFrequencyProxy(LPDIRECTDRAW, LPDWORD); -extern HRESULT WINAPI extGetScanLineProxy(LPDIRECTDRAW, LPDWORD); -extern HRESULT WINAPI extGetVerticalBlankStatusProxy(LPDIRECTDRAW, LPBOOL); -extern HRESULT WINAPI extRestoreDisplayModeProxy(LPDIRECTDRAW); -extern HRESULT WINAPI extGetAvailableVidMemProxy(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD); -extern HRESULT WINAPI extGetSurfaceFromDCProxy(LPDIRECTDRAW, HDC, LPDIRECTDRAWSURFACE*); -extern HRESULT WINAPI extRestoreAllSurfacesProxy(LPDIRECTDRAW); -extern HRESULT WINAPI extGetDeviceIdentifierProxy(LPDIRECTDRAW, LPDDDEVICEIDENTIFIER, DWORD); -extern HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW, LPDWORD, LPDWORD); -extern HRESULT WINAPI extTestCooperativeLevelProxy(LPDIRECTDRAW); -extern HRESULT WINAPI extEnumSurfacesProxy1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK); -extern HRESULT WINAPI extEnumSurfacesProxy4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2); -extern HRESULT WINAPI extInitializeProxy(LPDIRECTDRAW, GUID FAR *); - -// DirectDraw Clipper Proxed methods - -extern HRESULT WINAPI extQueryInterfaceCProxy(void *, REFIID, LPVOID *); -extern HRESULT WINAPI extAddRefCProxy(LPDIRECTDRAWCLIPPER); -extern HRESULT WINAPI extReleaseCProxy(LPDIRECTDRAWCLIPPER); -extern HRESULT WINAPI extGetClipListProxy(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD); -extern HRESULT WINAPI extGetHWndProxy(LPDIRECTDRAWCLIPPER, HWND FAR *); -extern HRESULT WINAPI extInitializeCProxy(LPDIRECTDRAWCLIPPER, LPDIRECTDRAW, DWORD); -extern HRESULT WINAPI extIsClipListChangedProxy(LPDIRECTDRAWCLIPPER, BOOL FAR *); -extern HRESULT WINAPI extSetClipListProxy(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD); -extern HRESULT WINAPI extSetHWndProxy(LPDIRECTDRAWCLIPPER, DWORD, HWND); - -// DirectDraw Palette Proxed methods - -extern HRESULT WINAPI extQueryInterfacePProxy(void *, REFIID, LPVOID *); -extern HRESULT WINAPI extAddRefPProxy(LPDIRECTDRAWPALETTE); -extern HRESULT WINAPI extReleasePProxy(LPDIRECTDRAWPALETTE); -extern HRESULT WINAPI extGetCapsPProxy(LPDIRECTDRAWPALETTE, LPDWORD); -extern HRESULT WINAPI extGetEntriesProxy(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY); -extern HRESULT WINAPI extSetEntriesProxy(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index cd8b934..df09254 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -13,7 +13,6 @@ #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" -#include "ddproxy.h" #include "dxhelper.h" #include "syslibs.h" @@ -35,13 +34,20 @@ HRESULT WINAPI extDirectDrawEnumerateEx(LPDDENUMCALLBACKEX, LPVOID, DWORD); HRESULT WINAPI extDirectDrawCreateClipper(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *); // DirectDraw -HRESULT WINAPI extQueryInterfaceD(void *, REFIID, LPVOID *); -ULONG WINAPI extReleaseD(LPDIRECTDRAW); +HRESULT WINAPI extQueryInterfaceD1(void *, REFIID, LPVOID *); +HRESULT WINAPI extQueryInterfaceD2(void *, REFIID, LPVOID *); +HRESULT WINAPI extQueryInterfaceD4(void *, REFIID, LPVOID *); +HRESULT WINAPI extQueryInterfaceD7(void *, REFIID, LPVOID *); +ULONG WINAPI extReleaseD1(LPDIRECTDRAW); +ULONG WINAPI extReleaseD2(LPDIRECTDRAW); +ULONG WINAPI extReleaseD4(LPDIRECTDRAW); +ULONG WINAPI extReleaseD7(LPDIRECTDRAW); /*** IDirectDraw methods ***/ HRESULT WINAPI extCreateClipper(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreatePalette(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); +HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extDuplicateSurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *); @@ -120,6 +126,7 @@ HRESULT WINAPI extSetSurfaceDesc(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); // DirectDrawClipper HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER); HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD); +HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER, DWORD, HWND); // DirectDrawPalette HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE); @@ -143,9 +150,15 @@ DirectDrawEnumerateEx_Type pDirectDrawEnumerateEx = NULL; DirectDrawCreateClipper_Type pDirectDrawCreateClipper = NULL; /* DirectDraw hook pointers */ -QueryInterface_Type pQueryInterfaceD; +QueryInterface_Type pQueryInterfaceD1; +QueryInterface_Type pQueryInterfaceD2; +QueryInterface_Type pQueryInterfaceD4; +QueryInterface_Type pQueryInterfaceD7; AddRefD_Type pAddRefD; -ReleaseD_Type pReleaseD; +ReleaseD_Type pReleaseD1 = NULL; +ReleaseD_Type pReleaseD2 = NULL; +ReleaseD_Type pReleaseD4 = NULL; +ReleaseD_Type pReleaseD7 = NULL; Compact_Type pCompact; CreateClipper_Type pCreateClipper=NULL; CreatePalette_Type pCreatePalette; @@ -1016,26 +1029,33 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) OutTraceDW("Hooking directdraw session dd=%x dxversion=%d thread_id=%x\n", *lplpdd, dxversion, GetCurrentThreadId()); - // IDIrectDraw::QueryInterface - SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD, (void **)&pQueryInterfaceD, "QueryInterface(D)"); - // IDIrectDraw::Release - SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD, (void **)&pReleaseD, "Release(D)"); // IDIrectDraw::CreateClipper SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper, (void **)&pCreateClipper, "CreateClipper(D)"); // IDIrectDraw::CreatePalette SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette, (void **)&pCreatePalette, "CreatePalette(D)"); + // IDIrectDraw::QueryInterface // IDIrectDraw::CreateSurface + // IDIrectDraw::Release switch(dxversion) { + default: case 1: + SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)"); + SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(S1)"); break; case 2: + SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)"); + SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(S2)"); break; case 4: + SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)"); + SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(S4)"); break; case 7: + SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)"); + SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(S7)"); break; } @@ -1099,37 +1119,6 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) // IDIrectDraw::TestCooperativeLevel SetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel, (void **)&pTestCooperativeLevel, "TestCooperativeLevel(D)"); } - - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - // Just proxed ... - - // IDIrectDraw::AddRef - SetHook((void *)(**(DWORD **)lplpdd + 4), extAddRefDProxy, (void **)&pAddRefD, "AddRef(D)"); - // IDIrectDraw::Compact - SetHook((void *)(**(DWORD **)lplpdd + 12), extCompactProxy, (void **)&pCompact, "Compact(D)"); - // IDIrectDraw::EnumSurfaces - if (dxversion < 4) - SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy1, (void **)&pEnumSurfaces1, "EnumSurfaces(D1)"); - else - SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy4, (void **)&pEnumSurfaces4, "EnumSurfaces(D4)"); - // IDIrectDraw::GetFourCCCodes - SetHook((void *)(**(DWORD **)lplpdd + 52), extGetFourCCCodesProxy, (void **)&pGetFourCCCodes, "GetFourCCCodes(D)"); - // IDIrectDraw::GetMonitorFrequency - SetHook((void *)(**(DWORD **)lplpdd + 60), extGetMonitorFrequencyProxy, (void **)&pGetMonitorFrequency, "GetMonitorFrequency(D)"); - // IDIrectDraw::GetScanLine - SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLineProxy, (void **)&pGetScanLine, "GetScanLine(D)"); - // IDIrectDraw::GetVerticalBlankStatus - SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)"); - // IDIrectDraw::RestoreDisplayMode - SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)"); - if (dxversion >= 4){ - // IDIrectDraw::GetSurfaceFromDC - SetHook((void *)(**(DWORD **)lplpdd + 96), extGetSurfaceFromDCProxy, (void **)&pGetSurfaceFromDC, "GetSurfaceFromDC(D)"); - // IDIrectDraw::RestoreAllSurfaces - SetHook((void *)(**(DWORD **)lplpdd + 100), extRestoreAllSurfacesProxy, (void **)&pRestoreAllSurfaces, "RestoreAllSurfaces(D)"); - // IDIrectDraw::GetDeviceIdentifier - SetHook((void *)(**(DWORD **)lplpdd + 108), extGetDeviceIdentifierProxy, (void **)&pGetDeviceIdentifier, "GetDeviceIdentifier(D)"); - } } static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper) @@ -1141,25 +1130,7 @@ static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper) // IDirectDrawClipper::GetClipList SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, "GetClipList(C)"); // IDirectDrawClipper::SetHWnd - SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWndProxy, (void **)&pSetHWnd, "SetHWnd(C)"); - - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - // Just proxed ... - - // IDirectDrawClipper::QueryInterface - SetHook((void *)(**(DWORD **)lplpDDClipper), extQueryInterfaceCProxy, (void **)&pQueryInterfaceC, "QueryInterface(C)"); - // IDirectDrawClipper::AddRef - SetHook((void *)(**(DWORD **)lplpDDClipper + 4), extAddRefCProxy, (void **)&pAddRefC, "AddRef(C)"); - // IDirectDrawClipper::GetHWnd - SetHook((void *)(**(DWORD **)lplpDDClipper + 16), extGetHWndProxy, (void **)&pGetHWnd, "GetHWnd(C)"); - // IDirectDrawClipper::Initialize - SetHook((void *)(**(DWORD **)lplpDDClipper + 20), extInitializeCProxy, (void **)&pInitializeC, "Initialize(C)"); - // IDirectDrawClipper::IsClipListChanged - SetHook((void *)(**(DWORD **)lplpDDClipper + 24), extIsClipListChangedProxy, (void **)&pIsClipListChanged, "IsClipListChanged(C)"); - // IDirectDrawClipper::SetClipList - SetHook((void *)(**(DWORD **)lplpDDClipper + 28), extSetClipListProxy, (void **)&pSetClipList, "SetClipList(C)"); - - return; + SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWnd, (void **)&pSetHWnd, "SetHWnd(C)"); } static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) @@ -1171,19 +1142,6 @@ static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) SetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleaseP, (void **)&pReleaseP, "Release(P)"); // IDirectDrawPalette::SetEntries SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, "SetEntries(P)"); - - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - - // IDirectDrawPalette::QueryInterface - SetHook((void *)(**(DWORD **)lplpDDPalette), extQueryInterfacePProxy, (void **)&pQueryInterfaceP, "QueryInterface(P)"); - // IDirectDrawPalette::AddRef - SetHook((void *)(**(DWORD **)lplpDDPalette + 4), extAddRefPProxy, (void **)&pAddRefP, "AddRef(P)"); - // IDirectDrawPalette::GetCaps - SetHook((void *)(**(DWORD **)lplpDDPalette + 12), extGetCapsPProxy, (void **)&pGetCapsP, "GetCaps(P)"); - // IDirectDrawPalette::GetEntries - SetHook((void *)(**(DWORD **)lplpDDPalette + 16), extGetEntriesProxy, (void **)&pGetEntries, "GetEntries(P)"); - - return; } static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) @@ -1285,39 +1243,6 @@ static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) else SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)"); } - - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - - // Just proxed ... - - // IDirectDrawSurface::AddRef - SetHook((void *)(**(DWORD **)lplpdds + 4), extAddRefSProxy, (void **)&pAddRefS, "AddRef(S)"); - // IDirectDrawSurface::AddOverlayDirtyRect - SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)"); - // IDirectDrawSurface::BltBatch - SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)"); - // IDirectDrawSurface::EnumOverlayZOrders - SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrdersProxy, (void **)&pEnumOverlayZOrders, "EnumOverlayZOrders(S)"); - // IDirectDrawSurface::GetBltStatus - SetHook((void *)(**(DWORD **)lplpdds + 52), extGetBltStatusProxy, (void **)&pGetBltStatus, "GetBltStatus(S)"); - // IDirectDrawSurface::GetClipper - SetHook((void *)(**(DWORD **)lplpdds + 60), extGetClipperProxy, (void **)&pGetClipper, "GetClipper(S)"); - // IDirectDrawSurface::GetFlipStatus - SetHook((void *)(**(DWORD **)lplpdds + 72), extGetFlipStatusProxy, (void **)&pGetFlipStatus, "GetFlipStatus(S)"); - // IDirectDrawSurface::GetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPositionProxy, (void **)&pGetOverlayPosition, "GetOverlayPosition(S)"); - // IDirectDrawSurface::IsLost - SetHook((void *)(**(DWORD **)lplpdds + 96), extIsLostProxy, (void **)&pIsLost, "IsLost(S)"); - // IDirectDrawSurface::Restore - SetHook((void *)(**(DWORD **)lplpdds + 108), extRestoreProxy, (void **)&pRestore, "Restore(S)"); - // IDirectDrawSurface::SetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPositionProxy, (void **)&pSetOverlayPosition, "SetOverlayPosition(S)"); - // IDirectDrawSurface::UpdateOverlay - SetHook((void *)(**(DWORD **)lplpdds + 132), extUpdateOverlayProxy, (void **)&pUpdateOverlay, "UpdateOverlay(S)"); - // IDirectDrawSurface::UpdateOverlayDisplay - SetHook((void *)(**(DWORD **)lplpdds + 136), extUpdateOverlayDisplayProxy, (void **)&pUpdateOverlayDisplay, "UpdateOverlayDisplay(S)"); - // IDirectDrawSurface::UpdateOverlayZOrder - SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)"); } static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) @@ -1403,48 +1328,6 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) else SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)"); } - - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - - // just proxed .... - - // IDirectDrawSurface::AddRef - SetHook((void *)(**(DWORD **)lplpdds + 4), extAddRefSProxy, (void **)&pAddRefS, "AddRef(S)"); - // IDirectDrawSurface::AddOverlayDirtyRect - SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)"); - // IDirectDrawSurface::BltBatch - SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)"); - // IDirectDrawSurface::EnumAttachedSurfaces - SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)"); - // IDirectDrawSurface::EnumOverlayZOrders - SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrdersProxy, (void **)&pEnumOverlayZOrders, "EnumOverlayZOrders(S)"); - // IDirectDrawSurface::GetBltStatus - SetHook((void *)(**(DWORD **)lplpdds + 52), extGetBltStatusProxy, (void **)&pGetBltStatus, "GetBltStatus(S)"); - // IDirectDrawSurface::GetClipper - SetHook((void *)(**(DWORD **)lplpdds + 60), extGetClipperProxy, (void **)&pGetClipper, "GetClipper(S)"); - // IDirectDrawSurface::GetFlipStatus - SetHook((void *)(**(DWORD **)lplpdds + 72), extGetFlipStatusProxy, (void **)&pGetFlipStatus, "GetFlipStatus(S)"); - // IDirectDrawSurface::GetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPositionProxy, (void **)&pGetOverlayPosition, "GetOverlayPosition(S)"); - // IDirectDrawSurface::IsLost - SetHook((void *)(**(DWORD **)lplpdds + 96), extIsLostProxy, (void **)&pIsLost, "IsLost(S)"); - // IDirectDrawSurface::Lock - SetHook((void *)(**(DWORD **)lplpdds + 100), extLock, (void **)&pLock, "Lock(S)"); - // IDirectDrawSurface::Restore - SetHook((void *)(**(DWORD **)lplpdds + 108), extRestoreProxy, (void **)&pRestore, "Restore(S)"); - // IDirectDrawSurface::SetOverlayPosition - SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPositionProxy, (void **)&pSetOverlayPosition, "SetOverlayPosition(S)"); - // IDirectDrawSurface::Unlock - if (dxversion < 4) - SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock1, (void **)&pUnlock1, "Unlock(S1)"); - else - SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock4, (void **)&pUnlock4, "Unlock(S4)"); - // IDirectDrawSurface::UpdateOverlay - SetHook((void *)(**(DWORD **)lplpdds + 132), extUpdateOverlayProxy, (void **)&pUpdateOverlay, "UpdateOverlay(S)"); - // IDirectDrawSurface::UpdateOverlayDisplay - SetHook((void *)(**(DWORD **)lplpdds + 136), extUpdateOverlayDisplayProxy, (void **)&pUpdateOverlayDisplay, "UpdateOverlayDisplay(S)"); - // IDirectDrawSurface::UpdateOverlayZOrder - SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)"); if (dxversion == 7) SetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc, (void **)&pSetSurfaceDesc, "SetSurfaceDesc(S3)"); @@ -1693,7 +1576,7 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I //if(dxw.dwDDVersion==1) (*lplpdd)->AddRef(); // seems to fix problems in "Warhammer 40K Rites Of War" - if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){ + if(IsDebug){ DDCAPS DriverCaps, EmulCaps; memset(&DriverCaps, 0, sizeof(DriverCaps)); DriverCaps.dwSize=sizeof(DriverCaps); @@ -1766,7 +1649,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid, HookDDSession(lplpdd, dxw.dwDDVersion); - if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){ + if(IsDebug){ DDCAPS DriverCaps, EmulCaps; memset(&DriverCaps, 0, sizeof(DriverCaps)); DriverCaps.dwSize=sizeof(DriverCaps); @@ -1799,7 +1682,7 @@ HRESULT WINAPI extInitialize(LPDIRECTDRAW lpdd, GUID FAR *lpguid) return res; } -HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp) +HRESULT WINAPI extQueryInterfaceD(QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp) { HRESULT res; unsigned int dwLocalDDVersion; @@ -1880,6 +1763,18 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp) return 0; } +HRESULT WINAPI extQueryInterfaceD1(void *lpdd, REFIID riid, LPVOID *obp) +{ return extQueryInterfaceD(pQueryInterfaceD1, lpdd, riid, obp); } + +HRESULT WINAPI extQueryInterfaceD2(void *lpdd, REFIID riid, LPVOID *obp) +{ return extQueryInterfaceD(pQueryInterfaceD2, lpdd, riid, obp); } + +HRESULT WINAPI extQueryInterfaceD4(void *lpdd, REFIID riid, LPVOID *obp) +{ return extQueryInterfaceD(pQueryInterfaceD4, lpdd, riid, obp); } + +HRESULT WINAPI extQueryInterfaceD7(void *lpdd, REFIID riid, LPVOID *obp) +{ return extQueryInterfaceD(pQueryInterfaceD7, lpdd, riid, obp); } + // some unhandled interfaces in emulation mode: // REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice @@ -2438,7 +2333,7 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa OutTraceDW("CreateSurface: created new DDSEmu_Back=%x\n", lpDDSEmu_Back); if(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, "DDSEmu_Back", __LINE__); dxwss.PopSurface(lpDDSEmu_Back); - if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion); + //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion); } } @@ -3175,24 +3070,19 @@ static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreate HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} +{ return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} +{ return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } + +HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} +{ return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); -} +{ return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGetAttachedSurface, @@ -4465,38 +4355,6 @@ typedef struct { DWORD dwHeight; } NewContext_Type; -typedef struct { - int w; - int h; -} SupportedRes_Type; - -static SupportedRes_Type SupportedSVGARes[11]= { - {320,200}, - {320,240}, - {512,384}, // needed by "Outcast" loading screen - {640,400}, - {640,480}, - {720,480}, - {800,600}, - {1024,768}, // XGA - {1280,800}, // WXGA - {1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode - {0,0} -}; - -static SupportedRes_Type SupportedHDTVRes[10]= { - {640,360}, // nHD - {720,480}, // DVD - {720,576}, // DV-PAL - {960,540}, // qHD - {1176,1000}, - {1280,720}, // HD - {1440,960}, - {1600,900}, // HD+ - {1920,1080}, // FHD - {0,0} -}; - static BOOL CheckResolutionLimit(LPDDSURFACEDESC lpDDSurfaceDesc) { #define HUGE 100000 @@ -4986,14 +4844,13 @@ HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps); } -ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd) +ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd) { ULONG ActualRef; LONG VirtualRef; - int dxversion; - dxversion=lpddHookedVersion(lpdd); // must be called BEFORE releasing the session!! - OutTraceDDRAW("Release(D): lpdd=%x dxversion=%d\n", lpdd, dxversion); + OutTraceDDRAW("Release(D%d): lpdd=%x\n", dxversion, lpdd); + if((ReleaseD_Type)extReleaseD == pReleaseD) return 0; ActualRef=(*pReleaseD)(lpdd); VirtualRef=(LONG)ActualRef; @@ -5032,6 +4889,18 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd) return (ULONG)VirtualRef; } +ULONG WINAPI extReleaseD1(LPDIRECTDRAW lpdd) +{ return extReleaseD(1, pReleaseD1, lpdd); } + +ULONG WINAPI extReleaseD2(LPDIRECTDRAW lpdd) +{ return extReleaseD(2, pReleaseD2, lpdd); } + +ULONG WINAPI extReleaseD4(LPDIRECTDRAW lpdd) +{ return extReleaseD(4, pReleaseD4, lpdd); } + +ULONG WINAPI extReleaseD7(LPDIRECTDRAW lpdd) +{ return extReleaseD(7, pReleaseD7, lpdd); } + HRESULT WINAPI extCreateClipper(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { @@ -5109,6 +4978,15 @@ HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGN return res; } +HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd) +{ + HRESULT res; + OutTraceP("SetHWnd(C): lpddClip=%x w=%x hwnd=%x\n", lpddClip, w, hwnd); + res=(*pSetHWnd)(lpddClip, w, hwnd); + if(res) OutTraceP("SetHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { HRESULT res; @@ -5453,4 +5331,4 @@ HRESULT WINAPI extDirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER *lp } HookDDClipper(lplpDDClipper); return res; -} \ No newline at end of file +} diff --git a/dll/dinput.cpp b/dll/dinput.cpp index 8b3a898..78c3611 100644 --- a/dll/dinput.cpp +++ b/dll/dinput.cpp @@ -147,14 +147,14 @@ void HookDirectInput8(HMODULE module) FARPROC Remap_DInput_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; - if (addr=RemapLibrary(proc, hModule, diHooks)) return addr; + if ((dxw.dwFlags1 & HOOKDI) && (addr=RemapLibrary(proc, hModule, diHooks))) return addr; return NULL; } FARPROC Remap_DInput8_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; - if (addr=RemapLibrary(proc, hModule, di8Hooks)) return addr; + if ((dxw.dwFlags1 & HOOKDI8) && (addr=RemapLibrary(proc, hModule, di8Hooks))) return addr; return NULL; } @@ -294,6 +294,7 @@ HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPU OutTraceE("CreateDevice(I): ERROR res=%x\n", res); return res; } + OutTraceDW("CreateDevice(I): did=%x\n", *lplpdid); SetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, "Acquire(I)"); SetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)"); @@ -370,6 +371,19 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID lpdid, sDevice(lpdid), cbdata, rgdod, *pdwinout, dwflags); res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); + + if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){ + OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n"); + if(lpdid == lpDIDSysMouse) { + res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); + if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); + if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); + } + res = (*pAcquire)(lpdid); + if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res)); + res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); + } + switch(res){ case DI_OK: break; @@ -419,7 +433,7 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID for(i = 0; i < *pdwinout; i ++){ if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X) OutTraceB("GetDeviceData(I): REL mousedata X=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData); if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y) OutTraceB("GetDeviceData(I): REL mousedata Y=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData); - tmp += cbdata; + tmp += cbdata; } } } @@ -428,20 +442,22 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata) { - HRESULT res; + HRESULT res; POINT p = {0, 0}; OutTraceDW("GetDeviceState(I): did=%x(%s) cbData=%i,%i\n", lpdid, sDevice(lpdid), cbdata, dxw.bActive); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); - if ((res == DIERR_INPUTLOST) && RECOVERINPUTLOST){ + if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){ OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n"); - res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); - if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); + if(lpdid == lpDIDSysMouse) { + res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); + if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); + if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); + } res = (*pAcquire)(lpdid); if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res)); - if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); } @@ -569,10 +585,9 @@ HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DW lpdid, sDevice(lpdid), hwnd, dwflags, ExplainDICooperativeFlags(dwflags)); if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); - //dwflags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND; - dwflags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND; - hwnd=dxw.GethWnd(); + if(lpdid == lpDIDSysMouse) dwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); + res = (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags); if(res != DD_OK){ OutTraceE("SetCooperativeLevel(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res)); diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index af65552..1c3461e 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -53,7 +53,7 @@ extern HANDLE hTraceMutex; CRITICAL_SECTION TraceCS; static char *FlagNames[32]={ - "UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "RESETPRIMARY", + "UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "**", "HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD", "EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING", "AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN", @@ -66,7 +66,7 @@ static char *FlagNames[32]={ static char *Flag2Names[32]={ "RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE", "KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP", - "KEEPCURSORFIXED", "DISABLEGAMMARAMP", "DIFFERENTIALMOUSE", "FIXNCHITTEST", + "KEEPCURSORFIXED", "DISABLEGAMMARAMP", "**", "FIXNCHITTEST", "LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR", "TIMESTRETCH", "HOOKOPENGL", "WALLPAPERMODE", "SHOWHWCURSOR", "GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT", @@ -78,8 +78,8 @@ static char *Flag3Names[32]={ "FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT", "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", "MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE", - "NOWINDOWMOVE", "--DISABLEHAL--", "LOCKSYSCOLORS", "GDIEMULATEDC", - "FULLSCREENONLY", "FONTBYPASS", "YUV2RGB", "RGB2YUV", + "NOWINDOWMOVE", "**", "LOCKSYSCOLORS", "GDIEMULATEDC", + "FULLSCREENONLY", "FONTBYPASS", "**", "**", "BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN", "ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX", "NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT", @@ -98,7 +98,7 @@ static char *Flag4Names[32]={ static char *Flag5Names[32]={ "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "--NOSYSTEMMEMORY--", - "NOBLT", "--NOSYSTEMEMULATED--", "DOFASTBLT", "AEROBOOST", + "NOBLT", "**", "DOFASTBLT", "AEROBOOST", "QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS", "REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK", "TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV", @@ -115,12 +115,34 @@ static char *Flag6Names[32]={ "FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY", "STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC", "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK", - "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "", + "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE", +}; + +static char *Flag7Names[32]={ + "LIMITDDRAW", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", +}; + +static char *Flag8Names[32]={ + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", }; static char *TFlagNames[32]={ "OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE", - "OUTPROXYTRACE", "DXPROXED", "ASSERTDIALOG", "OUTIMPORTTABLE", + "**", "**", "ASSERTDIALOG", "OUTIMPORTTABLE", "OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE", "OUTDXWINTRACE", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE", "", "", "", "", @@ -166,6 +188,8 @@ static void OutTraceHeader(FILE *fp) for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag4Names[i]); for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag5Names[i]); for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]); + for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]); + for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]); for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]); fprintf(fp, "***\n"); } @@ -456,6 +480,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) sprintf(msg,"SetHook: proc=%s oldhook=%x->%x newhook=%x\n", hookname, hookedproc, *(DWORD *)hookedproc, tmp); OutTraceDW(msg); if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); + tmp = *hookedproc; } *hookedproc = tmp; } @@ -1235,6 +1260,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) osinfo.dwMajorVersion, osinfo.dwMinorVersion, osinfo.dwPlatformId, osinfo.dwPlatformId, osinfo.szCSDVersion); } if (dxw.dwFlags4 & LIMITSCREENRES) OutTrace("HookInit: max resolution=%s\n", (dxw.MaxScreenRes<6)?Resolutions[dxw.MaxScreenRes]:"unknown"); + if (dxw.dwFlags7 & LIMITDDRAW) OutTrace("HookInit: max supported IDidrectDrawInterface=%d\n", dxw.MaxDdrawInterface); } { @@ -1304,11 +1330,6 @@ void HookInit(TARGETMAP *target, HWND hwnd) if (dxw.dwFlags4 & INTERCEPTRDTSC) ReplaceRDTSC(); if (dxw.dwFlags5 & REPLACEPRIVOPS) ReplacePrivilegedOps(); - if (dxw.dwTFlags & DXPROXED){ - HookDDProxy(base, dxw.dwTargetDDVersion); - return; - } - // make InitPosition used for both DInput and DDraw if(dxw.Windowize) dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy); diff --git a/dll/dxhook.h b/dll/dxhook.h index 67860f6..db3cd1e 100644 --- a/dll/dxhook.h +++ b/dll/dxhook.h @@ -1,5 +1,4 @@ extern int HookDirectDraw(HMODULE, int); -extern int HookDDProxy(HMODULE, int); extern int HookDirect3D(HMODULE, int); extern int HookDirect3D7(HMODULE, int); extern void HookOle32(HMODULE); diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 2dc6f5f..0a70508 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -84,6 +84,8 @@ void dxwCore::InitTarget(TARGETMAP *target) dwFlags4 = target->flags4; dwFlags5 = target->flags5; dwFlags6 = target->flags6; + dwFlags7 = target->flags7; + dwFlags8 = target->flags8; dwTFlags = target->tflags; Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE; if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE; @@ -93,6 +95,7 @@ void dxwCore::InitTarget(TARGETMAP *target) if(!strlen(CustomOpenGLLib)) CustomOpenGLLib=NULL; // bounds control dwTargetDDVersion = target->dxversion; + MaxDdrawInterface = target->MaxDdrawInterface; if(dwTargetDDVersion<0) dwTargetDDVersion=0; if(dwTargetDDVersion>12) dwTargetDDVersion=12; TimeShift = target->InitTS; diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 7312e1b..238e441 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -140,12 +140,15 @@ public: // simple data variables DWORD dwDDVersion; DWORD dwTargetDDVersion; DWORD dwMaxDDVersion; + DWORD MaxDdrawInterface; DWORD dwFlags1; DWORD dwFlags2; DWORD dwFlags3; DWORD dwFlags4; DWORD dwFlags5; DWORD dwFlags6; + DWORD dwFlags7; + DWORD dwFlags8; DWORD dwTFlags; HWND hParentWnd; HWND hChildWnd; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 57178f7..babde65 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.51" +#define VERSION "2.03.52" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 54f9aab..1c97efc 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/dxwnd.vs2008.vcproj b/dll/dxwnd.vs2008.vcproj index 1825348..1ab5fc5 100644 --- a/dll/dxwnd.vs2008.vcproj +++ b/dll/dxwnd.vs2008.vcproj @@ -241,10 +241,6 @@ RelativePath=".\ddblit.cpp" > - - @@ -465,6 +461,10 @@ RelativePath=".\smack.cpp" > + + @@ -486,10 +486,6 @@ Name="Header Files" Filter="h;hpp;hxx;hm;inl" > - - @@ -518,6 +514,10 @@ RelativePath=".\hd3d.doc.hpp" > + + diff --git a/dll/gdiblt.cpp b/dll/gdiblt.cpp index 465bb3c..002be4b 100644 --- a/dll/gdiblt.cpp +++ b/dll/gdiblt.cpp @@ -10,7 +10,6 @@ #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" -#include "ddproxy.h" #include "dxhelper.h" #include "syslibs.h" diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index bb75bcb..308259a 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -557,9 +557,9 @@ void HookD3DDevice9(void** ppD3Ddev9) if((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 260), extSetTexture9, (void **)&pSetTexture9, "SetTexture(D9)"); } - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 4), extAddRef9, (void **)&pAddRef9, "AddRef(D9)"); - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 8), extRelease9, (void **)&pRelease9, "Release(D9)"); + //if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; + //SetHook((void *)(**(DWORD **)ppD3Ddev9 + 4), extAddRef9, (void **)&pAddRef9, "AddRef(D9)"); + //SetHook((void *)(**(DWORD **)ppD3Ddev9 + 8), extRelease9, (void **)&pRelease9, "Release(D9)"); } // WIP @@ -626,15 +626,15 @@ void HookDirect3D9(void *lpd3d, BOOL ex) SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps, "GetDeviceCaps(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice9, "CreateDevice(D9)"); if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)"); - if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - SetHook((void *)(*(DWORD *)lpd3d + 12), extRegisterSoftwareDevice, (void **)&pRegisterSoftwareDevice, "RegisterSoftwareDevice(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount, (void **)&pGetAdapterModeCount, "GetAdapterModeCount(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType, (void **)&pCheckDeviceType, "CheckDeviceType(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 40), extCheckDeviceFormat, (void **)&pCheckDeviceFormat, "CheckDeviceFormat(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 44), extCheckDeviceMultiSampleType, (void **)&pCheckDeviceMultiSampleType, "CheckDeviceMultiSampleType(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 48), extCheckDepthStencilMatch, (void **)&pCheckDepthStencilMatch, "CheckDepthStencilMatch(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 52), extCheckDeviceFormatConversion, (void **)&pCheckDeviceFormatConversion, "CheckDeviceFormatConversion(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor, (void **)&pGetAdapterMonitor, "GetAdapterMonitor(D9)"); + //if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; + //SetHook((void *)(*(DWORD *)lpd3d + 12), extRegisterSoftwareDevice, (void **)&pRegisterSoftwareDevice, "RegisterSoftwareDevice(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount, (void **)&pGetAdapterModeCount, "GetAdapterModeCount(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType, (void **)&pCheckDeviceType, "CheckDeviceType(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 40), extCheckDeviceFormat, (void **)&pCheckDeviceFormat, "CheckDeviceFormat(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 44), extCheckDeviceMultiSampleType, (void **)&pCheckDeviceMultiSampleType, "CheckDeviceMultiSampleType(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 48), extCheckDepthStencilMatch, (void **)&pCheckDepthStencilMatch, "CheckDepthStencilMatch(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 52), extCheckDeviceFormatConversion, (void **)&pCheckDeviceFormatConversion, "CheckDeviceFormatConversion(D9)"); + //SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor, (void **)&pGetAdapterMonitor, "GetAdapterMonitor(D9)"); } void* WINAPI extDirect3DCreate9(UINT sdkversion) diff --git a/dll/kernel32.cpp b/dll/kernel32.cpp index 1095595..65d1af9 100644 --- a/dll/kernel32.cpp +++ b/dll/kernel32.cpp @@ -4,7 +4,6 @@ #include "dxhook.h" #include "dxhelper.h" #include "hddraw.h" -#include "ddproxy.h" #include "stdio.h" //#undef IsTraceDW @@ -15,6 +14,9 @@ BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL); LPVOID WINAPI extVirtualAlloc(LPVOID, SIZE_T, DWORD, DWORD); UINT WINAPI extWinExec(LPCSTR, UINT); +extern HRESULT WINAPI extDirectDrawEnumerate(LPDDENUMCALLBACK, LPVOID); +extern HRESULT WINAPI extDirectDrawEnumerateEx(LPDDENUMCALLBACKEX, LPVOID, DWORD); + typedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD); typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); @@ -676,12 +678,12 @@ FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc) case 0x000B: // DirectDrawEnumerateA pDirectDrawEnumerate=(DirectDrawEnumerate_Type)(*pGetProcAddress)(hModule, proc); OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerate); - return (FARPROC)extDirectDrawEnumerateProxy; + return (FARPROC)extDirectDrawEnumerate; break; case 0x000C: // DirectDrawEnumerateExA pDirectDrawEnumerateEx=(DirectDrawEnumerateEx_Type)(*pGetProcAddress)(hModule, proc); OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerateEx); - return (FARPROC)extDirectDrawEnumerateExProxy; + return (FARPROC)extDirectDrawEnumerateEx; break; } break; diff --git a/dll/supmodes.cpp b/dll/supmodes.cpp new file mode 100644 index 0000000..d24e27f --- /dev/null +++ b/dll/supmodes.cpp @@ -0,0 +1,32 @@ +#include "dxwnd.h" + +SupportedRes_Type SupportedSVGARes[12]= { + {320,200}, + {320,240}, + {512,384}, // needed by "Outcast" loading screen + {640,400}, + {640,480}, + {720,480}, + {800,600}, + {1024,768}, // XGA + {1280,800}, // WXGA + {1280,1024}, + {1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode + {0,0} +}; + +SupportedRes_Type SupportedHDTVRes[11]= { + {640,360}, // nHD + {720,480}, // DVD + {720,576}, // DV-PAL + {960,540}, // qHD + {1176,1000}, + {1280,720}, // HD + {1440,900}, // Swat 3 hack + {1440,960}, + {1600,900}, // HD+ + {1920,1080}, // FHD + {0,0} +}; + +int SupportedDepths[5]={8,16,24,32,0}; diff --git a/dll/user32.cpp b/dll/user32.cpp index ba7697c..8d0adf1 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -90,7 +90,7 @@ static HookEntry_Type Hooks[]={ {HOOK_IAT_CANDIDATE, "CreateDialogIndirectParamA", (FARPROC)CreateDialogIndirectParamA, (FARPROC *)&pCreateDialogIndirectParam, (FARPROC)extCreateDialogIndirectParam}, {HOOK_IAT_CANDIDATE, "CreateDialogParamA", (FARPROC)CreateDialogParamA, (FARPROC *)&pCreateDialogParam, (FARPROC)extCreateDialogParam}, {HOOK_IAT_CANDIDATE, "MoveWindow", (FARPROC)MoveWindow, (FARPROC *)&pMoveWindow, (FARPROC)extMoveWindow}, - {HOOK_IAT_CANDIDATE, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings}, + {HOOK_HOT_CANDIDATE, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings}, {HOOK_IAT_CANDIDATE, "GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor}, {HOOK_IAT_CANDIDATE, "ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor}, {HOOK_IAT_CANDIDATE, "DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProcA, (FARPROC)extDefWindowProcA}, @@ -1116,6 +1116,9 @@ BOOL WINAPI extGetWindowRect(HWND hwnd, LPRECT lpRect) { BOOL ret; OutTraceB("GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen()); + + if(dxw.IsRealDesktop(hwnd)) hwnd = dxw.GethWnd(); // v2.03.52: fix for "Storm Angel" + ret=(*pGetWindowRect)(hwnd, lpRect); if(!ret) { OutTraceE("GetWindowRect: GetWindowRect hwnd=%x error %d at %d\n", hwnd, GetLastError(), __LINE__); @@ -1377,7 +1380,7 @@ static HWND WINAPI extCreateWindowCommon( // main win was 640x480 only! // v2.02.13: if it's a WS_CHILD window, don't reposition the x,y, placement for BIG win. // v2.02.30: fix (Fable - lost chapters) Fable creates a bigger win with negative x,y coordinates. - if ( +if ( ( ((x<=0)&&(y<=0)) || @@ -1629,7 +1632,7 @@ HWND WINAPI extCreateWindowExA( dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu); } - OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", + OutTraceB("CreateWindowExA: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){ @@ -1839,8 +1842,56 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect) LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMODE *lpDevMode) { LONG res; - OutTraceDW("EnumDisplaySettings: Devicename=%s ModeNum=%x\n", lpszDeviceName, iModeNum); - res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode); + OSVERSIONINFO osinfo; + + osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + (*pGetVersionExA)(&osinfo); + OutTraceDW("EnumDisplaySettings: Devicename=%s ModeNum=%x OS=%d.%d\n", lpszDeviceName, iModeNum, osinfo.dwMajorVersion, osinfo.dwMinorVersion); + + if(dxw.dwFlags4 & NATIVERES){ + // lists video card native resolutions, though faking emulated color resolutions + if((osinfo.dwMajorVersion >= 6) && (dxw.dwFlags1 & EMULATESURFACE)){ + switch(iModeNum){ + case ENUM_CURRENT_SETTINGS: + case ENUM_REGISTRY_SETTINGS: // lie ... + res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode); + if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8; + if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16; + if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16; + break; + default: + res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum / SUPPORTED_DEPTHS_NUMBER, lpDevMode); + lpDevMode->dmBitsPerPel = (DWORD)SupportedDepths[iModeNum % SUPPORTED_DEPTHS_NUMBER]; + break; + } + } + else + res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode); + + } + else { // simulated modes: VGA or HDTV + //int SupportedDepths[5]={8,16,24,32,0}; + SupportedRes_Type *SupportedRes; + SupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0]; + res=(*pEnumDisplaySettings)(lpszDeviceName, ENUM_CURRENT_SETTINGS, lpDevMode); + switch(iModeNum){ + case ENUM_CURRENT_SETTINGS: + case ENUM_REGISTRY_SETTINGS: // lie ... + lpDevMode->dmPelsHeight = 600; + lpDevMode->dmPelsWidth = 800; + if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8; + if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16; + if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16; + break; + default: + lpDevMode->dmPelsHeight = SupportedRes[iModeNum / 4].h; + lpDevMode->dmPelsWidth = SupportedRes[iModeNum / 4].w; + lpDevMode->dmBitsPerPel = SupportedDepths[iModeNum % 4]; + if(lpDevMode->dmPelsHeight == 0) res = 0; // end of list + break; + } + } + if(dxw.dwFlags4 & LIMITSCREENRES){ #define HUGE 100000 DWORD maxw, maxh; @@ -1859,6 +1910,9 @@ LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMO lpDevMode->dmPelsHeight = maxh; } } + + OutTraceDW("EnumDisplaySettings: color=%dBPP size=(%dx%d) refresh=%dHz\n", + lpDevMode->dmBitsPerPel, lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency); return res; } diff --git a/host/CoolUtils.cpp b/host/CoolUtils.cpp index d0a330a..6e0e343 100644 --- a/host/CoolUtils.cpp +++ b/host/CoolUtils.cpp @@ -22,6 +22,7 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/) CWnd *pWnd = CWnd::FindWindow("Shell_TrayWnd", ""); //CWnd *pDesktopWnd = CWnd::GetDesktopWindow(); CWnd *pStart; + pStart = NULL; if( bHide ) { @@ -44,8 +45,9 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/) //This will retrieve the Handle of Start Button using the above // handle and class name of start Button. + // v2.03.52 fix: Win10 has no such a button! pStart = pWnd->FindWindow("Button", NULL); - pStart->ShowWindow(SW_HIDE); + if(pStart) pStart->ShowWindow(SW_HIDE); } } else @@ -68,8 +70,9 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/) //This will retrieve the Handle of Start Button using the above // handle and class name of start Button. + // v2.03.52 fix: Win10 has no such a button! pStart = pWnd->FindWindow("Button", NULL); - pStart->ShowWindow(SW_SHOW); + if(pStart) pStart->ShowWindow(SW_SHOW); } } } diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index ce167b3..d99d990 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -27,9 +27,9 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); - DDX_Check(pDX, IDC_RGB2YUV, cTarget->m_ForceRGBtoYUV); - DDX_Check(pDX, IDC_YUV2RGB, cTarget->m_ForceYUVtoRGB); - DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed); + //DDX_Check(pDX, IDC_RGB2YUV, cTarget->m_ForceRGBtoYUV); + //DDX_Check(pDX, IDC_YUV2RGB, cTarget->m_ForceYUVtoRGB); + //DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed); DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog); DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit); DDX_Check(pDX, IDC_MARKLOCK, cTarget->m_MarkLock); diff --git a/host/TabDirect3D.cpp b/host/TabDirect3D.cpp index 68e4599..307c4a8 100644 --- a/host/TabDirect3D.cpp +++ b/host/TabDirect3D.cpp @@ -46,6 +46,8 @@ void CTabDirect3D::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt); DDX_Check(pDX, IDC_CENTERTOWIN, cTarget->m_CenterToWin); DDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace); + DDX_Check(pDX, IDC_LIMITDDRAW, cTarget->m_LimitDdraw); + DDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface); // Texture management DDX_Radio(pDX, IDC_TEXTURENONE, cTarget->m_TextureHandling); diff --git a/host/TabLogs.cpp b/host/TabLogs.cpp index dab1eab..45449b5 100644 --- a/host/TabLogs.cpp +++ b/host/TabLogs.cpp @@ -36,7 +36,6 @@ void CTabLogs::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); //extern BOOL gbDebug; - DDX_Check(pDX, IDC_OUTPROXYTRACE, cTarget->m_OutProxyTrace); DDX_Check(pDX, IDC_OUTD3DTRACE, cTarget->m_OutD3DTrace); DDX_Check(pDX, IDC_OUTDDRAWTRACE, cTarget->m_OutDDRAWTrace); DDX_Check(pDX, IDC_OUTDEBUG, cTarget->m_OutDebug); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 700ade6..91239ca 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -21,6 +21,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) { //{{AFX_DATA_INIT(CTargetDlg) m_DXVersion = 0; + m_MaxDdrawInterface = 6; m_Coordinates = 0; m_DxEmulationMode = 3; // default: emulated m_DxFilterMode = 0; // default: ddraw filtering @@ -34,7 +35,6 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_VirtualJoystick = FALSE; m_Unacquire = FALSE; m_LogEnabled = FALSE; - m_OutProxyTrace = FALSE; m_OutDebug = FALSE; m_RegistryOp = FALSE; m_CursorTrace = FALSE; @@ -48,7 +48,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_AddRelativeTime = FALSE; m_ImportTable = FALSE; m_TraceHooks = FALSE; - m_DXProxed = FALSE; + //m_DXProxed = FALSE; //m_HandleDC = FALSE; m_HandleExceptions = FALSE; m_SuppressIME = FALSE; @@ -77,8 +77,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_NoDestroyWindow = FALSE; m_LockSysColors = FALSE; m_LockReservedPalette = FALSE; - m_ForceYUVtoRGB = FALSE; - m_ForceRGBtoYUV = FALSE; + //m_ForceYUVtoRGB = FALSE; + //m_ForceRGBtoYUV = FALSE; m_LimitScreenRes = FALSE; m_SingleProcAffinity = FALSE; m_LimitResources = FALSE; @@ -198,6 +198,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_FullRectBlt = FALSE; m_CenterToWin = FALSE; m_Deinterlace = FALSE; + m_LimitDdraw = FALSE; m_SurfaceWarn = FALSE; m_CapMask = FALSE; m_NoWindowHooks = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index f1b071b..a48428c 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -32,13 +32,13 @@ public: int m_MouseVisibility; int m_TextureHandling; int m_SonProcessMode; + int m_MaxDdrawInterface; BOOL m_HookDI; BOOL m_HookDI8; BOOL m_EmulateRelMouse; BOOL m_ModifyMouse; BOOL m_VirtualJoystick; BOOL m_Unacquire; - BOOL m_OutProxyTrace; BOOL m_OutDebug; BOOL m_CursorTrace; BOOL m_LogEnabled; @@ -50,7 +50,7 @@ public: BOOL m_OutDWTrace; BOOL m_OutD3DTrace; BOOL m_OutDDRAWTrace; - BOOL m_DXProxed; + //BOOL m_DXProxed; BOOL m_AssertDialog; BOOL m_ImportTable; BOOL m_RegistryOp; @@ -160,6 +160,7 @@ public: BOOL m_FullRectBlt; BOOL m_CenterToWin; BOOL m_Deinterlace; + BOOL m_LimitDdraw; BOOL m_SurfaceWarn; BOOL m_CapMask; BOOL m_NoWindowHooks; @@ -221,8 +222,8 @@ public: BOOL m_BlackWhite; BOOL m_SuppressD3DExt; BOOL m_Force16BPP; - BOOL m_ForceYUVtoRGB; - BOOL m_ForceRGBtoYUV; + //BOOL m_ForceYUVtoRGB; + //BOOL m_ForceRGBtoYUV; BOOL m_LimitScreenRes; int m_PosX; int m_PosY; diff --git a/host/dxwnd.ini b/host/dxwnd.ini deleted file mode 100644 index 018ba37..0000000 --- a/host/dxwnd.ini +++ /dev/null @@ -1,38 +0,0 @@ -[window] -exportpath=D:\DxWnd\exports.wip\ -posx=880 -posy=437 -sizx=320 -sizy=200 -[target] -title0=Star Trek Armada -path0=D:\Games\armada_demo\Armada.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0=ciao\n -ver0=0 -coord0=0 -flag0=-2011168669 -flagg0=1543503872 -flagh0=98320 -flagi0=136314884 -flagj0=4224 -flagk0=327680 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=100 -posy0=100 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 78e3d2c..2cda1ed 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 4c19159..e063715 100644 Binary files a/host/dxwndhost.rc and b/host/dxwndhost.rc differ diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index fb921d0..7d227fc 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 1b13042..3be5377 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -170,6 +170,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) strcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib); if(dlg->m_DXVersion > 1) dlg->m_DXVersion += 5; t->dxversion = dlg->m_DXVersion; + t->MaxDdrawInterface = dlg->m_MaxDdrawInterface+1; t->coordinates = dlg->m_Coordinates; t->flags = 0; t->flags2 = 0; @@ -255,7 +256,6 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ModifyMouse) t->flags |= MODIFYMOUSE; if(dlg->m_VirtualJoystick) t->flags6 |= VIRTUALJOYSTICK; if(dlg->m_Unacquire) t->flags6 |= UNACQUIRE; - if(dlg->m_OutProxyTrace) t->tflags |= OUTPROXYTRACE; if(dlg->m_OutDebug) t->tflags |= OUTDEBUG; if(dlg->m_CursorTrace) t->tflags |= OUTCURSORTRACE; if(dlg->m_LogEnabled) t->tflags |= OUTTRACE; @@ -267,7 +267,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_OutDWTrace) t->tflags |= OUTDXWINTRACE; if(dlg->m_OutDDRAWTrace) t->tflags |= OUTDDRAWTRACE; if(dlg->m_OutD3DTrace) t->tflags |= OUTD3DTRACE; - if(dlg->m_DXProxed) t->tflags |= DXPROXED; + //if(dlg->m_DXProxed) t->tflags |= DXPROXED; if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG; if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE; if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY; @@ -317,8 +317,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_NoDestroyWindow) t->flags6 |= NODESTROYWINDOW; if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS; if(dlg->m_LockReservedPalette) t->flags5 |= LOCKRESERVEDPALETTE; - if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB; - if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV; + //if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB; + //if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV; if(dlg->m_LimitScreenRes) t->flags4 |= LIMITSCREENRES; if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY; if(dlg->m_SaveLoad) t->flags |= SAVELOAD; @@ -402,6 +402,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT; if(dlg->m_CenterToWin) t->flags5 |= CENTERTOWIN; if(dlg->m_Deinterlace) t->flags5 |= DEINTERLACE; + if(dlg->m_LimitDdraw) t->flags7 |= LIMITDDRAW; if(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE; if(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN; if(dlg->m_CapMask) t->flags3 |= CAPMASK; @@ -431,6 +432,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) { dlg->m_DXVersion = t->dxversion; + dlg->m_MaxDdrawInterface = t->MaxDdrawInterface-1; if(dlg->m_DXVersion > 6) dlg->m_DXVersion -= 5; dlg->m_Coordinates = t->coordinates; dlg->m_FilePath = t->path; @@ -497,7 +499,6 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ModifyMouse = t->flags & MODIFYMOUSE ? 1 : 0; dlg->m_VirtualJoystick = t->flags6 & VIRTUALJOYSTICK ? 1 : 0; dlg->m_Unacquire = t->flags6 & UNACQUIRE ? 1 : 0; - dlg->m_OutProxyTrace = t->tflags & OUTPROXYTRACE ? 1 : 0; dlg->m_OutDebug = t->tflags & OUTDEBUG ? 1 : 0; dlg->m_CursorTrace = t->tflags & OUTCURSORTRACE ? 1 : 0; dlg->m_LogEnabled = t->tflags & OUTTRACE ? 1 : 0; @@ -509,7 +510,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_OutDWTrace = t->tflags & OUTDXWINTRACE ? 1 : 0; dlg->m_OutD3DTrace = t->tflags & OUTD3DTRACE ? 1 : 0; dlg->m_OutDDRAWTrace = t->tflags & OUTDDRAWTRACE ? 1 : 0; - dlg->m_DXProxed = t->tflags & DXPROXED ? 1 : 0; + //dlg->m_DXProxed = t->tflags & DXPROXED ? 1 : 0; dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0; dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0; dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0; @@ -541,8 +542,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_NoDestroyWindow = t->flags6 & NODESTROYWINDOW ? 1 : 0; dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0; dlg->m_LockReservedPalette = t->flags5 & LOCKRESERVEDPALETTE ? 1 : 0; - dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0; - dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0; + //dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0; + //dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0; dlg->m_LimitScreenRes = t->flags4 & LIMITSCREENRES ? 1 : 0; dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0; dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0; @@ -645,6 +646,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0; dlg->m_CenterToWin = t->flags5 & CENTERTOWIN ? 1 : 0; dlg->m_Deinterlace = t->flags5 & DEINTERLACE ? 1 : 0; + dlg->m_LimitDdraw = t->flags7 & LIMITDDRAW ? 1 : 0; dlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0; dlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0; dlg->m_CapMask = t->flags3 & CAPMASK ? 1 : 0; @@ -754,6 +756,9 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, sprintf_s(key, sizeof(key), "swapeffect%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->SwapEffect); WritePrivateProfileString("target", key, val, InitPath); + sprintf_s(key, sizeof(key), "maxddinterface%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->MaxDdrawInterface); + WritePrivateProfileString("target", key, val, InitPath); free(EscBuf); EscBuf = NULL; @@ -823,6 +828,8 @@ static void ClearTarget(int i, char *InitPath) WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "registry%i", i); WritePrivateProfileString("target", key, 0, InitPath); + sprintf_s(key, sizeof(key), "maxddinterface%i", i); + WritePrivateProfileString("target", key, 0, InitPath); } static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath) @@ -920,11 +927,14 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c // ------- sprintf_s(key, sizeof(key), "maxres%i", i); TargetMap->MaxScreenRes = GetPrivateProfileInt("target", key, 0, InitPath); + // ------- + sprintf_s(key, sizeof(key), "maxddinterface%i", i); + TargetMap->MaxDdrawInterface = GetPrivateProfileInt("target", key, 7, InitPath); if (!gbDebug){ // clear debug flags TargetMap->flags &= ~(0); - TargetMap->flags3 &= ~(YUV2RGB|RGB2YUV|SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT); + TargetMap->flags3 &= ~(SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT); } free(EscBuf); EscBuf = NULL; @@ -1119,7 +1129,7 @@ void CDxwndhostView::OnExport() // XP fix: if(strlen(path)>4){ char *p; - p = &path[strlen(path-4)]; + p = &path[strlen(path)-4]; if(strcasecmp(p, ".dxw")) strcat(path, ".dxw"); } else diff --git a/host/resource b/host/resource index 205c43b..2d616ea 100644 Binary files a/host/resource and b/host/resource differ