diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 1fdaa57..b7db443 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -251,6 +251,7 @@ // DxWnd host app data to be passed to the hook callback typedef struct TARGETMAP { + int index; char path[MAX_PATH+1]; char module[60+1]; char OpenGLLib[20+1]; @@ -264,7 +265,8 @@ typedef struct TARGETMAP int flags6; int flags7; int flags8; - int tflags; + int tflags; // trace flags (cleared when exported/imported) + int dflags; // debug flags (cleared when exported/imported) short posx; short posy; short sizx; @@ -281,6 +283,7 @@ typedef struct { short Status; short TaskIdx; + short OrigIdx; short IsFullScreen; short Width, Height; short ColorDepth; diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 2bcf3a2..990b74e 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:537e48142d49baefcb73703effbe1cbdf7577aa64e9326adac8f4fe6dfe99958 -size 644096 +oid sha256:73656cf90cf6d5ad5a6c62da1bd48b14b7d0ff353dca4e04d87fb50445dfe178 +size 646656 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 133d6a3..1d2df4c 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f4fdbf4310c5fd473a72b37e4fcc5c30f5f12f4537a238748890b2b9ce38b43 +oid sha256:41b726e8f958c18372ccc7f6fbc5b53b3a2293c2298e5933dbb0b4b0f6fe4fba size 557056 diff --git a/build/exports/A10 Cuba.dxw b/build/exports/A10 Cuba.dxw index 34a202f..9052c32 100644 --- a/build/exports/A10 Cuba.dxw +++ b/build/exports/A10 Cuba.dxw @@ -27,9 +27,3 @@ notes0= flagj0=128 winver0=0 maxres0=0 -registry0= -flagk0=65536 -flagl0=0 -flagm0=0 -swapeffect0=0 -maxddinterface0=7 diff --git a/build/proxy/d3d8.dll b/build/proxy/d3d8.dll index ec3c3db..c251817 100644 --- a/build/proxy/d3d8.dll +++ b/build/proxy/d3d8.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f84be0f5c6643d8c83967d60f343b4d1a61f278287206ee56fbcb2991001d34 +oid sha256:fa29fd8235aa5d5495b9c746b2136881651c5b6b20eff49fd3b8066af4b02d32 size 54784 diff --git a/build/proxy/d3d9.dll b/build/proxy/d3d9.dll index e83a734..b2d5c1e 100644 --- a/build/proxy/d3d9.dll +++ b/build/proxy/d3d9.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1e79093e9a141f7936c8c8cd27ac2dc36196683294a81f21e5f84a5f5fcc5e0 +oid sha256:56c095298d34bb02e98bacc0a6003ad912dc590311f9b83e0e855e5da5109ec2 size 55808 diff --git a/build/proxy/ddraw.dll b/build/proxy/ddraw.dll index 22148b1..2c8099d 100644 --- a/build/proxy/ddraw.dll +++ b/build/proxy/ddraw.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73324ad26838bc56f13cdcb1e23c1e122f9a6bb96cb3fdc3f13ad47f249ecb8e +oid sha256:cdec1b4fb66b410c4d83bad4c9d12d9195bb1b1dc4dba15a11123d320bd09fc4 size 56320 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index e9836f5..b8cb6ef 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1089,3 +1089,8 @@ fix: saved config changes in case DxWnd is restarted for acquiring admin caps fix: duplicated several function pointers in D3D8/9 wrappers: fix some GTA3 crashes and reduce the need to suppress Reset operation add: flag "Widechar program vs. ANSI" to replace default ansi calls with widechar equivalents: fixes "Tomb Raider Anniversary" mouse problems +v2.03.64 +fix: completed the hook pointers separation per COM interface version: this is of growing importance on Win10 because of the system updates (shims?) +fix: fixed incoherences in task refences of the GUI +fix: recovered task kill on WinXP +fix: updated RedrawWindow, now allows better handling of "Galapagos" pause screen \ No newline at end of file diff --git a/build/v2_03_63_fix3_build.rar b/build/v2_03_63_fix3_build.rar deleted file mode 100644 index ddd3f53..0000000 Binary files a/build/v2_03_63_fix3_build.rar and /dev/null differ diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 8817830..ecdfa00 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -134,7 +134,11 @@ HRESULT WINAPI extDeleteAttachedSurface2(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDR HRESULT WINAPI extDeleteAttachedSurface3(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface4(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface7(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); -HRESULT WINAPI extEnumAttachedSurfaces(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); +HRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); +HRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); +HRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); +HRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); +HRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extFlip1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); @@ -190,8 +194,16 @@ HRESULT WINAPI extReleaseDC2(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC3(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC4(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC7(LPDIRECTDRAWSURFACE, HDC); -HRESULT WINAPI extSetClipper(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); -HRESULT WINAPI extSetColorKey(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); +HRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); +HRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); +HRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); +HRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); +HRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetPalette1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); @@ -286,7 +298,7 @@ Blt_Type pBlt1, pBlt2, pBlt3, pBlt4, pBlt7; //BltBatch_Type pBltBatch; BltFast_Type pBltFast1, pBltFast2, pBltFast3, pBltFast4, pBltFast7; DeleteAttachedSurface_Type pDeleteAttachedSurface1, pDeleteAttachedSurface2, pDeleteAttachedSurface3, pDeleteAttachedSurface4, pDeleteAttachedSurface7; -EnumAttachedSurfaces_Type pEnumAttachedSurfaces; +EnumAttachedSurfaces_Type pEnumAttachedSurfaces1, pEnumAttachedSurfaces2, pEnumAttachedSurfaces3, pEnumAttachedSurfaces4, pEnumAttachedSurfaces7; EnumOverlayZOrders_Type pEnumOverlayZOrders; Flip_Type pFlip1, pFlip2, pFlip3, pFlip4, pFlip7; GetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7; @@ -307,8 +319,8 @@ Lock_Type pLock1, pLock2, pLock3, pLock4, pLock7; IsLost_Type pIsLost; ReleaseDC_Type pReleaseDC1, pReleaseDC2, pReleaseDC3, pReleaseDC4, pReleaseDC7; Restore_Type pRestore; -SetClipper_Type pSetClipper; -SetColorKey_Type pSetColorKey; +SetClipper_Type pSetClipper1, pSetClipper2, pSetClipper3, pSetClipper4, pSetClipper7; +SetColorKey_Type pSetColorKey1, pSetColorKey2, pSetColorKey3, pSetColorKey4, pSetColorKey7; SetOverlayPosition_Type pSetOverlayPosition; SetPalette_Type pSetPalette1, pSetPalette2, pSetPalette3, pSetPalette4, pSetPalette7; Unlock1_Type pUnlock1, pUnlock2, pUnlock3; @@ -1149,11 +1161,8 @@ static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper) { OutTraceDW("Hooking directdraw clipper dd=%x\n", *lplpDDClipper); - // IDirectDrawClipper::Release SetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseC, (void **)&pReleaseC, "Release(C)"); - // IDirectDrawClipper::GetClipList SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, "GetClipList(C)"); - // IDirectDrawClipper::SetHWnd SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWnd, (void **)&pSetHWnd, "SetHWnd(C)"); } @@ -1162,9 +1171,7 @@ static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) OutTraceDW("Hooking directdraw palette dd=%x\n", *lplpDDPalette); /*** IDirectDrawPalette methods ***/ - // IDirectDrawPalette::Release SetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleaseP, (void **)&pReleaseP, "Release(P)"); - // IDirectDrawPalette::SetEntries SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, "SetEntries(P)"); } @@ -1176,8 +1183,6 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr OutTraceDW("Hooking surface dds=%x dxversion=%d prim=%x thread_id=%x\n", *lplpdds, dxversion, isPrim, GetCurrentThreadId()); - // IDirectDrawSurface::EnumAttachedSurfaces - SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)"); switch(dxversion) { case 1: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS1, (void **)&pQueryInterfaceS1, "QueryInterface(S1)"); @@ -1186,6 +1191,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast1, (void **)&pBltFast1, "BltFast(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt1, (void **)&pBlt1, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface1, (void **)&pDeleteAttachedSurface1, "DeleteAttachedSurface(S1)"); + SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces1, (void **)&pEnumAttachedSurfaces1, "EnumAttachedSurfaces(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip1, (void **)&pFlip1, "Flip(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps1S, (void **)&pGetCaps1S, "GetCaps(S1)"); @@ -1206,6 +1212,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast2, (void **)&pBltFast2, "BltFast(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt2, (void **)&pBlt2, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface2, (void **)&pDeleteAttachedSurface2, "DeleteAttachedSurface(S2)"); + SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces2, (void **)&pEnumAttachedSurfaces2, "EnumAttachedSurfaces(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip2, (void **)&pFlip2, "Flip(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface2, (void **)&pGetAttachedSurface2, "GetAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps2S, (void **)&pGetCaps2S, "GetCaps(S2)"); @@ -1226,6 +1233,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast3, (void **)&pBltFast3, "BltFast(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt3, (void **)&pBlt3, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface3, (void **)&pDeleteAttachedSurface3, "DeleteAttachedSurface(S3)"); + SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces3, (void **)&pEnumAttachedSurfaces3, "EnumAttachedSurfaces(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip3, (void **)&pFlip3, "Flip(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps3S, (void **)&pGetCaps3S, "GetCaps(S3)"); @@ -1248,6 +1256,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast4, (void **)&pBltFast4, "BltFast(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt4, (void **)&pBlt4, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface4, (void **)&pDeleteAttachedSurface4, "DeleteAttachedSurface(S4)"); + SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces4, (void **)&pEnumAttachedSurfaces4, "EnumAttachedSurfaces(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip4, (void **)&pFlip4, "Flip(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps4S, (void **)&pGetCaps4S, "GetCaps(S4)"); @@ -1270,6 +1279,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast7, (void **)&pBltFast7, "BltFast(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt7, (void **)&pBlt7, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface7, (void **)&pDeleteAttachedSurface7, "DeleteAttachedSurface(S7)"); + SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces7, (void **)&pEnumAttachedSurfaces7, "EnumAttachedSurfaces(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip7, (void **)&pFlip7, "Flip(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps7S, (void **)&pGetCaps7S, "GetCaps(S7)"); @@ -1289,19 +1299,26 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr if (!isPrim) return; - SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper, (void **)&pSetClipper, "SetClipper(S)"); - // IDirectDrawSurface::SetColorKey - SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey, (void **)&pSetColorKey, "SetColorKey(S)"); switch(dxversion) { case 1: + SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper1, (void **)&pSetClipper1, "SetClipper(S1)"); + SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey1, (void **)&pSetColorKey1, "SetColorKey(S1)"); break; case 2: + SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper2, (void **)&pSetClipper2, "SetClipper(S2)"); + SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey2, (void **)&pSetColorKey2, "SetColorKey(S2)"); break; case 3: + SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper3, (void **)&pSetClipper3, "SetClipper(S3)"); + SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey3, (void **)&pSetColorKey3, "SetColorKey(S3)"); break; case 4: + SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper4, (void **)&pSetClipper4, "SetClipper(S4)"); + SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey4, (void **)&pSetColorKey4, "SetColorKey(S4)"); break; case 7: + SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper7, (void **)&pSetClipper7, "SetClipper(S7)"); + SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey7, (void **)&pSetColorKey7, "SetColorKey(S7)"); break; } } @@ -1444,7 +1461,7 @@ static void HandleCapsD(char *sLabel, LPDDCAPS c) OutTraceDDRAW("GetCaps(%s): FIXED VidMemTotal=%x VidMemFree=%x\n", sLabel, c->dwVidMemTotal, c->dwVidMemFree); } -HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) +static HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { HRESULT res; OutTraceDDRAW("GetCaps(D): lpdd=%x %s %s\n", lpdd, c1?"c1":"NULL", c2?"c2":"NULL"); @@ -1647,7 +1664,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid, return DD_OK; } -HRESULT WINAPI extInitialize(Initialize_Type pInitialize, LPDIRECTDRAW lpdd, GUID FAR *lpguid) +static HRESULT WINAPI extInitialize(Initialize_Type pInitialize, LPDIRECTDRAW lpdd, GUID FAR *lpguid) { HRESULT res; GUID FAR *lpPrivGuid = lpguid; @@ -1674,7 +1691,7 @@ HRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid) HRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(pInitialize7, lpdd, lpguid); } -HRESULT WINAPI extQueryInterfaceD(QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp) +static HRESULT WINAPI extQueryInterfaceD(QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp) { HRESULT res; unsigned int dwLocalDDVersion; @@ -1767,7 +1784,7 @@ HRESULT WINAPI extQueryInterfaceD7(void *lpdd, REFIID riid, LPVOID *obp) // some unhandled interfaces in emulation mode: // REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice -HRESULT WINAPI extQueryInterfaceS(QueryInterface_Type pQueryInterfaceS, void *lpdds, REFIID riid, LPVOID *obp) +static HRESULT WINAPI extQueryInterfaceS(QueryInterface_Type pQueryInterfaceS, void *lpdds, REFIID riid, LPVOID *obp) { HRESULT res; BOOL IsPrim; @@ -4020,7 +4037,7 @@ HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dws return res; } -HRESULT WINAPI extSetClipper(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +static HRESULT WINAPI extSetClipper(SetClipper_Type pSetClipper, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { HRESULT res; BOOL isPrim; @@ -4063,10 +4080,21 @@ HRESULT WINAPI extSetClipper(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpdd return res; } +HRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +{ return extSetClipper(pSetClipper1, lpdds, lpddc); } +HRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +{ return extSetClipper(pSetClipper2, lpdds, lpddc); } +HRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +{ return extSetClipper(pSetClipper3, lpdds, lpddc); } +HRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +{ return extSetClipper(pSetClipper4, lpdds, lpddc); } +HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) +{ return extSetClipper(pSetClipper7, lpdds, lpddc); } + DDSURFACEDESC SaveSurfaceDesc; LPDIRECTDRAWSURFACE SaveSurface = NULL; -HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) +static HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { HRESULT res; @@ -4112,23 +4140,18 @@ HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect HRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } - HRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } - HRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } - HRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } - HRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } - LPDIRECTDRAWSURFACE2 lpDDSBuffer = NULL; -HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) +static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { HRESULT res, res2; static RECT client; @@ -4235,7 +4258,7 @@ HRESULT WINAPI extLockDir7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACE #define MARK16COLOR 0x7C1F #define MARK32COLOR 0x00FF00FF -HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) +static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { HRESULT res; BOOL IsPrim; @@ -4343,20 +4366,16 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC HRESULT WINAPI extUnlock1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlock(1, (Unlock4_Type)pUnlock1, lpdds, (LPRECT)lpvoid); } - HRESULT WINAPI extUnlock2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlock(2, (Unlock4_Type)pUnlock2, lpdds, (LPRECT)lpvoid); } - HRESULT WINAPI extUnlock3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlock(3, (Unlock4_Type)pUnlock3, lpdds, (LPRECT)lpvoid); } - HRESULT WINAPI extUnlock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { return extUnlock(4, pUnlock4, lpdds, lprect); } - HRESULT WINAPI extUnlock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { return extUnlock(7, pUnlock7, lpdds, lprect); } -HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) +static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { HRESULT res; //RECT screen, rect; @@ -4438,7 +4457,7 @@ ReleaseDC with Unlock, returning the surface memory ptr (???) as HDC and avoiding the consistency check performed by surface::GetDC (why should it bother if the screen is 32BPP and the surface is not??? */ -HRESULT WINAPI extGetDC(int dxversion, GetDC_Type pGetDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) +static HRESULT WINAPI extGetDC(int dxversion, GetDC_Type pGetDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { HRESULT res; BOOL IsPrim; @@ -4907,7 +4926,7 @@ HRESULT WINAPI extReleaseS4(LPDIRECTDRAWSURFACE lpdds) HRESULT WINAPI extReleaseS7(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS7, lpdds); } -HRESULT WINAPI extSetColorKey(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +static HRESULT WINAPI extSetColorKey(SetColorKey_Type pSetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { HRESULT res; BOOL IsPrim; @@ -4926,7 +4945,18 @@ HRESULT WINAPI extSetColorKey(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORK return res; } -HRESULT WINAPI extGetColorKey(GetColorKey_Type pGetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +HRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +{ return extSetColorKey(pSetColorKey1, lpdds, flags, lpDDColorKey); } +HRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +{ return extSetColorKey(pSetColorKey2, lpdds, flags, lpDDColorKey); } +HRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +{ return extSetColorKey(pSetColorKey3, lpdds, flags, lpDDColorKey); } +HRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +{ return extSetColorKey(pSetColorKey4, lpdds, flags, lpDDColorKey); } +HRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) +{ return extSetColorKey(pSetColorKey7, lpdds, flags, lpDDColorKey); } + +static HRESULT WINAPI extGetColorKey(GetColorKey_Type pGetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { HRESULT res; BOOL IsPrim; @@ -4953,7 +4983,7 @@ HRESULT WINAPI extGetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLOR HRESULT WINAPI extGetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(pGetColorKey7, lpdds, flags, lpDDColorKey); } -HRESULT WINAPI extEnumAttachedSurfaces(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +static HRESULT WINAPI extEnumAttachedSurfaces(EnumAttachedSurfaces_Type pEnumAttachedSurfaces, LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { HRESULT res; BOOL IsPrim; @@ -4994,7 +5024,18 @@ HRESULT WINAPI extEnumAttachedSurfaces(LPDIRECTDRAWSURFACE lpdds, LPVOID lpConte return res; } -HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttachedSurface, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) +HRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces1, lpdds, lpContext, lpEnumSurfacesCallback); } +HRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces2, lpdds, lpContext, lpEnumSurfacesCallback); } +HRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces3, lpdds, lpContext, lpEnumSurfacesCallback); } +HRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces4, lpdds, lpContext, lpEnumSurfacesCallback); } +HRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) +{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces7, lpdds, lpContext, lpEnumSurfacesCallback); } + +static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttachedSurface, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { HRESULT res; BOOL IsPrim, IsBack; @@ -5059,7 +5100,7 @@ HRESULT WINAPI extAddAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSUR HRESULT WINAPI extAddAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface7, lpdds, lpddsadd); } -HRESULT WINAPI extDeleteAttachedSurface(DeleteAttachedSurface_Type pDeleteAttachedSurface, LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) +static HRESULT WINAPI extDeleteAttachedSurface(DeleteAttachedSurface_Type pDeleteAttachedSurface, LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { HRESULT res; OutTraceDDRAW("DeleteAttachedSurface: lpdds=%x flags=%x lpddsdel=%x\n", lpdds, dwflags, lpddsdel); @@ -5092,7 +5133,7 @@ HRESULT WINAPI cbDump(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) return 1; } -HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) +static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) { HRESULT res; BOOL IsPrim, IsBack, IsFixed; @@ -5144,27 +5185,17 @@ HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRA } HRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - return extGetCapsS(1, pGetCaps1S, lpdds, caps); -} +{ return extGetCapsS(1, pGetCaps1S, lpdds, caps); } HRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - return extGetCapsS(2, pGetCaps2S, lpdds, caps); -} +{ return extGetCapsS(2, pGetCaps2S, lpdds, caps); } HRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) -{ - return extGetCapsS(3, pGetCaps3S, lpdds, caps); -} +{ return extGetCapsS(3, pGetCaps3S, lpdds, caps); } HRESULT WINAPI extGetCaps4S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) -{ - return extGetCapsS(4, (GetCapsS_Type)pGetCaps4S, lpdds, (LPDDSCAPS)caps); -} +{ return extGetCapsS(4, (GetCapsS_Type)pGetCaps4S, lpdds, (LPDDSCAPS)caps); } HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) -{ - return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps); -} +{ return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps); } -ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd) +static ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd) { ULONG ActualRef; LONG VirtualRef; @@ -5212,17 +5243,14 @@ ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lp 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(CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags, +static HRESULT WINAPI extCreateClipper(CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { HRESULT res; @@ -5317,7 +5345,7 @@ HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd) return res; } -HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) +static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { HRESULT res; BOOL IsPrim, IsBack, IsFixed; @@ -5356,19 +5384,10 @@ HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceD if (IsBack) { OutTraceDW("GetSurfaceDesc: fixing BACKBUFFER surface\n"); IsFixed=TRUE; - //lpddsd->ddsCaps.dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // you never know.... - //lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way - //if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM; - - //if(!(dxw.dwFlags6 & FLIPEMULATION)){ - // lpddsd->ddsCaps.dwCaps |= (DDSCAPS_3DDEVICE); // you never know.... - // lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_COMPLEX|DDSCAPS_FLIP); // backbuffer surfaces can't be this way - //} - // try ... + // flags that backbuffer surfaces must have set lpddsd->ddsCaps.dwCaps |= (DDSCAPS_3DDEVICE|DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); - lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_COMPLEX|DDSCAPS_FLIP); // backbuffer surfaces can't be this way - - + // flags that backbuffer surfaces can't have set + lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_COMPLEX|DDSCAPS_FLIP); } if (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) { @@ -5592,7 +5611,7 @@ HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG return ret; } -HRESULT WINAPI extGetAvailableVidMem(GetAvailableVidMem_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) +static HRESULT WINAPI extGetAvailableVidMem(GetAvailableVidMem_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { HRESULT res; //const DWORD dwMaxMem = 0x7FFFF000; diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index d2ac7ef..0bbaebb 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -446,6 +446,7 @@ void dxwCore::SetClipCursor() OutTraceDW("SetClipCursor: ASSERT hWnd==NULL\n"); return; } + // check for errors to avoid setting random clip regions if(!(*pGetClientRect)(hWnd, &Rect)){ OutTraceE("SetClipCursor: GetClientRect ERROR err=%d at %d\n", GetLastError(), __LINE__); diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index d24a3f8..450f68e 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.63" +#define VERSION "2.03.64" #define DDTHREADLOCK 1 //#define LOCKTHREADS @@ -234,6 +234,7 @@ LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam) pStatus->Status=DXW_RUNNING; pStatus->TaskIdx=i; + pStatus->OrigIdx=pMapping[i].index; pStatus->IsFullScreen=FALSE; pStatus->hWnd=hwnd; pStatus->dwPid=GetProcessId(GetCurrentProcess()); diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index d8b0e53..a2070cb 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index f830f4b..992f227 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -22,7 +22,6 @@ extern void D3D9TextureHandling(void *, int); extern void D3D8TextureHandling(void *, int); void *lpD3DActiveDevice = NULL; -//DWORD gActiveDeviceParams[64]; typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID riid, void** ppvObj); // D3D8/9 API @@ -43,63 +42,50 @@ void WINAPI voidDebugSetMute(void); BOOL WINAPI voidDisableD3DSpy(void); BOOL WINAPI extDisableD3DSpy(void); +Direct3DCreate8_Type pDirect3DCreate8 = 0; +Direct3DCreate9_Type pDirect3DCreate9 = 0; +Direct3DCreate9Ex_Type pDirect3DCreate9Ex = 0; +CheckFullScreen_Type pCheckFullScreen = 0; +DisableD3DSpy_Type pDisableD3DSpy = 0; + // IDirect3D8/9 methods -typedef HRESULT (WINAPI *RegisterSoftwareDevice_Type)(void *, void*); -typedef UINT (WINAPI *GetAdapterCount_Type)(void *); +typedef UINT (WINAPI *GetAdapterCount_Type)(void *); typedef HRESULT (WINAPI *GetAdapterIdentifier_Type)(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); -typedef UINT (WINAPI *GetAdapterModeCount_Type)(void *, UINT, D3DFORMAT); +typedef UINT (WINAPI *GetAdapterModeCount_Type)(void *, UINT, D3DFORMAT); typedef HRESULT (WINAPI *EnumAdapterModes8_Type)(void *, UINT, UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *CheckDeviceType_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); -typedef HRESULT (WINAPI *CheckDeviceFormat_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, DWORD, D3DRESOURCETYPE, D3DFORMAT); -typedef HRESULT (WINAPI *CheckDeviceMultiSampleType_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, BOOL, D3DMULTISAMPLE_TYPE, DWORD *); -typedef HRESULT (WINAPI *CheckDepthStencilMatch_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, D3DFORMAT); -typedef HRESULT (WINAPI *CheckDeviceFormatConversion_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT); typedef HRESULT (WINAPI *D3DGetDeviceCaps8_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS8 *); typedef HRESULT (WINAPI *D3DGetDeviceCaps9_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS9 *); typedef HMONITOR (WINAPI *GetAdapterMonitor_Type)(void *, UINT); typedef HRESULT (WINAPI *CreateDevice_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, void **); typedef HRESULT (WINAPI *CreateDeviceEx_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, D3DDISPLAYMODEEX *, void **); -typedef BOOL (WINAPI *DisableD3DSpy_Type)(void); +typedef BOOL (WINAPI *DisableD3DSpy_Type)(void); -HRESULT WINAPI extRegisterSoftwareDevice(void *, void*); UINT WINAPI extGetAdapterCount8(void *); UINT WINAPI extGetAdapterCount9(void *); HRESULT WINAPI extGetAdapterIdentifier8(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); HRESULT WINAPI extGetAdapterIdentifier9(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); -UINT WINAPI extGetAdapterModeCount(void *, UINT, D3DFORMAT); -HRESULT WINAPI extCheckDeviceType(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); -HRESULT WINAPI extCheckDeviceFormat(void *, UINT, D3DDEVTYPE, D3DFORMAT, DWORD, D3DRESOURCETYPE, D3DFORMAT); -HRESULT WINAPI extCheckDeviceMultiSampleType(void *, UINT, D3DDEVTYPE, D3DFORMAT, BOOL, D3DMULTISAMPLE_TYPE, DWORD *); -HRESULT WINAPI extCheckDepthStencilMatch(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, D3DFORMAT); -HRESULT WINAPI extCheckDeviceFormatConversion(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT); +HRESULT WINAPI extCheckDeviceType8(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); +HRESULT WINAPI extCheckDeviceType9(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); HRESULT WINAPI extD3DGetDeviceCaps8(void *, UINT, D3DDEVTYPE, D3DCAPS8 *); HRESULT WINAPI extD3DGetDeviceCaps9(void *, UINT, D3DDEVTYPE, D3DCAPS9 *); -HMONITOR WINAPI extGetAdapterMonitor(void *, UINT); +HMONITOR WINAPI extGetAdapterMonitor8(void *, UINT); +HMONITOR WINAPI extGetAdapterMonitor9(void *, UINT); HRESULT WINAPI extCreateDevice8(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **); HRESULT WINAPI extCreateDevice9(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **); HRESULT WINAPI extCreateDeviceEx(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, D3DDISPLAYMODEEX *, void **); -RegisterSoftwareDevice_Type pRegisterSoftwareDevice = 0; -GetAdapterCount_Type pGetAdapterCount8 = 0; -GetAdapterCount_Type pGetAdapterCount9 = 0; -GetAdapterIdentifier_Type pGetAdapterIdentifier8 = 0; -GetAdapterIdentifier_Type pGetAdapterIdentifier9 = 0; -GetAdapterModeCount_Type pGetAdapterModeCount = 0; -CheckDeviceType_Type pCheckDeviceType = 0; -CheckDeviceFormat_Type pCheckDeviceFormat = 0; -CheckDeviceMultiSampleType_Type pCheckDeviceMultiSampleType = 0; -CheckDepthStencilMatch_Type pCheckDepthStencilMatch = 0; -CheckDeviceFormatConversion_Type pCheckDeviceFormatConversion = 0; +GetAdapterCount_Type pGetAdapterCount8, pGetAdapterCount9; +GetAdapterIdentifier_Type pGetAdapterIdentifier8, pGetAdapterIdentifier9; +CheckDeviceType_Type pCheckDeviceType8, pCheckDeviceType9; D3DGetDeviceCaps8_Type pD3DGetDeviceCaps8 = 0; D3DGetDeviceCaps9_Type pD3DGetDeviceCaps9 = 0; -GetAdapterMonitor_Type pGetAdapterMonitor = 0; -CreateDevice_Type pCreateDevice8 = 0; -CreateDevice_Type pCreateDevice9 = 0; +GetAdapterMonitor_Type pGetAdapterMonitor8, pGetAdapterMonitor9; +CreateDevice_Type pCreateDevice8, pCreateDevice9; CreateDeviceEx_Type pCreateDeviceEx = 0; -DisableD3DSpy_Type pDisableD3DSpy = 0; // IDirect3DDevice8/9 methods @@ -121,14 +107,11 @@ typedef HRESULT (WINAPI *EndStateBlock8_Type)(void *, DWORD *); typedef HRESULT (WINAPI *EndStateBlock9_Type)(void *, IDirect3DStateBlock9**); typedef HRESULT (WINAPI *CreateTexture8_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **); typedef HRESULT (WINAPI *CreateTexture9_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *); -#ifdef DXWNDDISABLEDHOOKS -typedef HRESULT (WINAPI *CopyRects_Type)(void *, void *, CONST RECT *, UINT, void *, CONST POINT *); -typedef HRESULT (WINAPI *UpdateSurface_Type)(void *, IDirect3DSurface9 *, CONST RECT *, IDirect3DSurface9 *, CONST POINT *); -typedef HRESULT (WINAPI *UpdateTexture_Type)(void *, IDirect3DBaseTexture9 *, IDirect3DBaseTexture9 *); -#endif -UINT WINAPI extGetAvailableTextureMem(void *); -HRESULT WINAPI extTestCooperativeLevel(void *); +UINT WINAPI extGetAvailableTextureMem8(void *); +UINT WINAPI extGetAvailableTextureMem9(void *); +HRESULT WINAPI extTestCooperativeLevel8(void *); +HRESULT WINAPI extTestCooperativeLevel9(void *); HRESULT WINAPI extGetDirect3D8(void *, void **); HRESULT WINAPI extGetDirect3D9(void *, void **); HRESULT WINAPI extGetDisplayMode8(void *, D3DDISPLAYMODE *); @@ -147,14 +130,9 @@ HRESULT WINAPI extEndStateBlock8(void *, DWORD *); HRESULT WINAPI extEndStateBlock9(void *, IDirect3DStateBlock9**); HRESULT WINAPI extCreateTexture8(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **); HRESULT WINAPI extCreateTexture9(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *); -#ifdef DXWNDDISABLEDHOOKS -HRESULT WINAPI extCopyRects(void *, void *, CONST RECT *, UINT, void *, CONST POINT *); -HRESULT WINAPI extUpdateSurface(void *, IDirect3DSurface9 *, CONST RECT *, IDirect3DSurface9 *, CONST POINT *); -HRESULT WINAPI extUpdateTexture(void *, IDirect3DBaseTexture9 *, IDirect3DBaseTexture9 *); -#endif -GetAvailableTextureMem_Type pGetAvailableTextureMem = 0; -TestCooperativeLevel_Type pTestCooperativeLevel = 0; +GetAvailableTextureMem_Type pGetAvailableTextureMem8, pGetAvailableTextureMem9; +TestCooperativeLevel_Type pTestCooperativeLevel8, pTestCooperativeLevel9; GetDirect3D8_Type pGetDirect3D8 = 0; GetDirect3D9_Type pGetDirect3D9 = 0; GetDisplayMode8_Type pGetDisplayMode8 = 0; @@ -173,38 +151,19 @@ EndStateBlock8_Type pEndStateBlock8 = 0; EndStateBlock9_Type pEndStateBlock9 = 0; CreateTexture8_Type pCreateTexture8 = 0; CreateTexture9_Type pCreateTexture9 = 0; -#ifdef DXWNDDISABLEDHOOKS -CopyRects_Type pCopyRects = 0; -UpdateSurface_Type pUpdateSurface = NULL; -UpdateTexture_Type pUpdateTexture = NULL; -#endif // IDirect3DTexture8/9 methods typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); -#ifdef DXWNDDISABLEDHOOKS -typedef HRESULT (WINAPI *GetSurfaceLevel_Type)(void *, UINT, IDirect3DSurface9**); -typedef HRESULT (WINAPI *SetPrivateData_Type)(void *, REFGUID, CONST void *, DWORD, DWORD); -typedef HRESULT (WINAPI *QueryInterfaceTex_Type)(void *, REFIID, void**); -#endif -HRESULT WINAPI extLockRect(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); +HRESULT WINAPI extLockRect8(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); +HRESULT WINAPI extLockRect9(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); HRESULT WINAPI extUnlockRect8(void *, UINT); HRESULT WINAPI extUnlockRect9(void *, UINT); -#ifdef DXWNDDISABLEDHOOKS -HRESULT WINAPI extGetSurfaceLevel9(void *, UINT, IDirect3DSurface9**); -HRESULT WINAPI extSetPrivateData(void *, REFGUID, CONST void *, DWORD, DWORD); -HRESULT WINAPI extQueryInterfaceTex(void *, REFIID, void**); -#endif -LockRect_Type pLockRect = NULL; -UnlockRect_Type pUnlockRect = NULL; -#ifdef DXWNDDISABLEDHOOKS -GetSurfaceLevel_Type pGetSurfaceLevel9 = NULL; -SetPrivateData_Type pSetPrivateData = NULL; -QueryInterfaceTex_Type pQueryInterfaceTex = NULL; -#endif +LockRect_Type pLockRect8, pLockRect9; +UnlockRect_Type pUnlockRect8, pUnlockRect9; // to sort ... @@ -247,19 +206,22 @@ HRESULT WINAPI extGetAdapterDisplayMode8(void *, UINT, D3DDISPLAYMODE *); HRESULT WINAPI extGetAdapterDisplayMode9(void *, UINT, D3DDISPLAYMODE *); HRESULT WINAPI extPresent8(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); HRESULT WINAPI extPresent9(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); -HRESULT WINAPI extSetRenderState(void *, D3DRENDERSTATETYPE, DWORD); -HRESULT WINAPI extGetRenderState(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extSetRenderState8(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extSetRenderState9(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extGetRenderState8(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extGetRenderState9(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extGetViewport(void *, D3DVIEWPORT9 *); HRESULT WINAPI extSetViewport(void *, D3DVIEWPORT9 *); HRESULT WINAPI extReset8(void *, D3DPRESENT_PARAMETERS *); HRESULT WINAPI extReset9(void *, D3DPRESENT_PARAMETERS *); -void WINAPI extSetGammaRamp(void *, UINT, DWORD, D3DGAMMARAMP *); -void WINAPI extGetGammaRamp(void *, UINT, D3DGAMMARAMP *); +void WINAPI extSetGammaRamp8(void *, UINT, DWORD, D3DGAMMARAMP *); +void WINAPI extSetGammaRamp9(void *, UINT, DWORD, D3DGAMMARAMP *); +void WINAPI extGetGammaRamp8(void *, UINT, D3DGAMMARAMP *); +void WINAPI extGetGammaRamp9(void *, UINT, D3DGAMMARAMP *); ULONG WINAPI extAddRef9(void *); ULONG WINAPI extRelease9(void *); BOOL WINAPI voidDisableD3DSpy(void); -//ULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, IDirect3DSurface8**); ULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); ULONG WINAPI extCreateRenderTarget9(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); ULONG WINAPI extBeginScene8(void *); @@ -285,32 +247,24 @@ QueryInterface_Type pQueryInterfaceDev8 = 0; QueryInterface_Type pQueryInterfaceD3D9 = 0; QueryInterface_Type pQueryInterfaceDev9 = 0; -Direct3DCreate8_Type pDirect3DCreate8 = 0; -Direct3DCreate9_Type pDirect3DCreate9 = 0; -Direct3DCreate9Ex_Type pDirect3DCreate9Ex = 0; -CheckFullScreen_Type pCheckFullScreen = 0; - EnumAdapterModes8_Type pEnumAdapterModes8 = 0; EnumAdapterModes9_Type pEnumAdapterModes9 = 0; GetAdapterDisplayMode_Type pGetAdapterDisplayMode8 = 0; GetAdapterDisplayMode_Type pGetAdapterDisplayMode9 = 0; Present_Type pPresent8 = 0; Present_Type pPresent9 = 0; -SetRenderState_Type pSetRenderState = 0; -GetRenderState_Type pGetRenderState = 0; +SetRenderState_Type pSetRenderState8, pSetRenderState9; +GetRenderState_Type pGetRenderState8, pGetRenderState9; GetViewport_Type pGetViewport = 0; SetViewport_Type pSetViewport = 0; -SetGammaRamp_Type pSetGammaRamp = 0; -GetGammaRamp_Type pGetGammaRamp = 0; +SetGammaRamp_Type pSetGammaRamp8, pSetGammaRamp9; +GetGammaRamp_Type pGetGammaRamp8, pGetGammaRamp9; CreateRenderTarget8_Type pCreateRenderTarget8 = 0; CreateRenderTarget9_Type pCreateRenderTarget9 = 0; -BeginScene_Type pBeginScene8 = 0; -EndScene_Type pEndScene8 = 0; -BeginScene_Type pBeginScene9 = 0; -EndScene_Type pEndScene9 = 0; -Reset_Type pReset8 = 0; -Reset_Type pReset9 = 0; +BeginScene_Type pBeginScene8, pBeginScene9; +EndScene_Type pEndScene8, pEndScene9; +Reset_Type pReset8, pReset9; SetTexture8_Type pSetTexture8 = 0; SetTexture9_Type pSetTexture9 = 0; @@ -490,8 +444,8 @@ void HookD3DDevice8(void** ppD3Ddev8) { OutTraceD3D("Device hook for IID_IDirect3DDevice8 interface\n"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 0), extQueryInterfaceDev8, (void **)&pQueryInterfaceDev8, "QueryInterface(D8)"); - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 12), extTestCooperativeLevel, (void **)&pTestCooperativeLevel, "TestCooperativeLevel(D8)"); - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 16), extGetAvailableTextureMem, (void **)&pGetAvailableTextureMem, "GetAvailableTextureMem(D8)"); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 12), extTestCooperativeLevel8, (void **)&pTestCooperativeLevel8, "TestCooperativeLevel(D8)"); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 16), extGetAvailableTextureMem8, (void **)&pGetAvailableTextureMem8, "GetAvailableTextureMem(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 24), extGetDirect3D8, (void **)&pGetDirect3D8, "GetDirect3D(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 32), extGetDisplayMode8, (void **)&pGetDisplayMode8, "GetDisplayMode(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 44), extSetCursorPosition8, (void **)&pSetCursorPosition8, "SetCursorPosition(D8)"); @@ -500,8 +454,8 @@ void HookD3DDevice8(void** ppD3Ddev8) SetHook((void *)(**(DWORD **)ppD3Ddev8 + 56), extReset8, (void **)&pReset8, "Reset(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 60), extPresent8, (void **)&pPresent8, "Present(D8)"); if(dxw.dwFlags2 & DISABLEGAMMARAMP){ - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 72), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D8)"); - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 76), extGetGammaRamp, (void **)&pGetGammaRamp, "GetGammaRamp(D8)"); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 72), extSetGammaRamp8, (void **)&pSetGammaRamp8, "SetGammaRamp(D8)"); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 76), extGetGammaRamp8, (void **)&pGetGammaRamp8, "GetGammaRamp(D8)"); } if(dxw.dwFlags5 & TEXTUREMASK){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 80), extCreateTexture8, (void **)&pCreateTexture8, "CreateTexture(D8)"); @@ -511,12 +465,12 @@ void HookD3DDevice8(void** ppD3Ddev8) SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)"); if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){ - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D8)"); - SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D8)"); - if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME); - if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_FOGENABLE, FALSE); - if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_ZFUNC, D3DCMP_ALWAYS); - //if(1) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_SPECULARENABLE, TRUE); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, "SetRenderState(D8)"); + SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)"); + if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME); + if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FOGENABLE, FALSE); + if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_ZFUNC, D3DCMP_ALWAYS); + //if(1) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_SPECULARENABLE, TRUE); } SetHook((void *)(**(DWORD **)ppD3Ddev8 + 208), extBeginStateBlock8, (void **)&pBeginStateBlock8, "BeginStateBlock(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 212), extEndStateBlock8, (void **)&pEndStateBlock8, "EndStateBlock(D8)"); @@ -532,8 +486,8 @@ void HookD3DDevice9(void** ppD3Ddev9) { OutTraceD3D("Device hook for IID_IDirect3DDevice9 interface\n"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 0), extQueryInterfaceDev9, (void **)&pQueryInterfaceDev9, "QueryInterface(D9)"); - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 12), extTestCooperativeLevel, (void **)&pTestCooperativeLevel, "TestCooperativeLevel(D9)"); - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 16), extGetAvailableTextureMem, (void **)&pGetAvailableTextureMem, "GetAvailableTextureMem(D9)"); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 12), extTestCooperativeLevel9, (void **)&pTestCooperativeLevel9, "TestCooperativeLevel(D9)"); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 16), extGetAvailableTextureMem9, (void **)&pGetAvailableTextureMem9, "GetAvailableTextureMem(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 24), extGetDirect3D9, (void **)&pGetDirect3D9, "GetDirect3D(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 32), extGetDisplayMode9, (void **)&pGetDisplayMode9, "GetDisplayMode(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 44), extSetCursorPosition9, (void **)&pSetCursorPosition9, "SetCursorPosition(D9)"); @@ -544,8 +498,8 @@ void HookD3DDevice9(void** ppD3Ddev9) SetHook((void *)(**(DWORD **)ppD3Ddev9 + 64), extReset9, (void **)&pReset9, "Reset(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 68), extPresent9, (void **)&pPresent9, "Present(D9)"); if(dxw.dwFlags2 & DISABLEGAMMARAMP){ - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 84), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D9)"); - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 88), extGetGammaRamp, (void **)&pGetGammaRamp, "GetGammaRamp(D9)"); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 84), extSetGammaRamp9, (void **)&pSetGammaRamp9, "SetGammaRamp(D9)"); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 88), extGetGammaRamp9, (void **)&pGetGammaRamp9, "GetGammaRamp(D9)"); } if(dxw.dwFlags5 & TEXTUREMASK){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 92), extCreateTexture9, (void **)&pCreateTexture9, "CreateTexture(D9)"); @@ -561,41 +515,33 @@ void HookD3DDevice9(void** ppD3Ddev9) //SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)"); if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){ - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D9)"); - SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D9)"); - if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME); - if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_FOGENABLE, FALSE); - if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_ZFUNC, D3DCMP_ALWAYS); - //if(1) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_SPECULARENABLE, TRUE); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, "SetRenderState(D9)"); + SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)"); + if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME); + if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FOGENABLE, FALSE); + if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_ZFUNC, D3DCMP_ALWAYS); + //if(1) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_SPECULARENABLE, TRUE); } SetHook((void *)(**(DWORD **)ppD3Ddev9 + 240), extBeginStateBlock9, (void **)&pBeginStateBlock9, "BeginStateBlock(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 244), extEndStateBlock9, (void **)&pEndStateBlock9, "EndStateBlock(D9)"); 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)"); } // WIP void HookD3DTexture8(void** ppD3Dtex8) { OutTraceD3D("Device hook for IDirect3DTexture8 interface\n"); - SetHook((void *)(**(DWORD **)ppD3Dtex8 + 64), extLockRect, (void **)&pLockRect, "LockRect(D8)"); - SetHook((void *)(**(DWORD **)ppD3Dtex8 + 68), extUnlockRect8, (void **)&pUnlockRect, "UnlockRect(D8)"); + SetHook((void *)(**(DWORD **)ppD3Dtex8 + 64), extLockRect8, (void **)&pLockRect8, "LockRect(D8)"); + SetHook((void *)(**(DWORD **)ppD3Dtex8 + 68), extUnlockRect8, (void **)&pUnlockRect8, "UnlockRect(D8)"); } void HookD3DTexture9(void** ppD3Dtex9) { OutTraceD3D("Device hook for IDirect3DTexture9 interface\n"); - SetHook((void *)(**(DWORD **)ppD3Dtex9 + 76), extLockRect, (void **)&pLockRect, "LockRect(T9)"); - SetHook((void *)(**(DWORD **)ppD3Dtex9 + 80), extUnlockRect9, (void **)&pUnlockRect, "UnlockRect(T9)"); -#ifdef DXWNDDISABLEDHOOKS - SetHook((void *)(**(DWORD **)ppD3Dtex9 + 0), extQueryInterfaceTex, (void **)&pQueryInterfaceTex, "QueryInterface(T9)"); - SetHook((void *)(**(DWORD **)ppD3Dtex9 + 16), extSetPrivateData, (void **)&pSetPrivateData, "SetPrivateData(T9)"); - SetHook((void *)(**(DWORD **)ppD3Dtex9 + 72), extGetSurfaceLevel9, (void **)&pGetSurfaceLevel9, "GetSurfaceLevel(T9)"); -#endif + SetHook((void *)(**(DWORD **)ppD3Dtex9 + 76), extLockRect9, (void **)&pLockRect9, "LockRect(T9)"); + SetHook((void *)(**(DWORD **)ppD3Dtex9 + 80), extUnlockRect9, (void **)&pUnlockRect9, "UnlockRect(T9)"); } void HookDirect3D8(void *lpd3d) @@ -605,7 +551,9 @@ void HookDirect3D8(void *lpd3d) SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier8, (void **)&pGetAdapterIdentifier8, "GetAdapterIdentifier(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes8, (void **)&pEnumAdapterModes8, "EnumAdapterModes(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode8, (void **)&pGetAdapterDisplayMode8, "GetAdapterDisplayMode(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType8, (void **)&pCheckDeviceType8, "CheckDeviceType(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 52), extD3DGetDeviceCaps8, (void **)&pD3DGetDeviceCaps8, "GetDeviceCaps(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 56), extGetAdapterMonitor8, (void **)&pGetAdapterMonitor8, "GetAdapterMonitor(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, "CreateDevice(D8)"); } @@ -639,18 +587,11 @@ void HookDirect3D9(void *lpd3d, BOOL ex) SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (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)"); } void* WINAPI extDirect3DCreate9(UINT sdkversion) @@ -1312,7 +1253,7 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp extern char *ExplainRenderstateValue(DWORD Value); -HRESULT WINAPI extSetRenderState(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +static HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { HRESULT res; OutTraceD3D("SetRenderState: d3dd=%x State=%x(%s) Value=%x\n", pd3dd, State, ExplainD3DRenderState(State), Value); @@ -1335,11 +1276,21 @@ HRESULT WINAPI extSetRenderState(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Va return res; } -HRESULT WINAPI extGetRenderState(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +HRESULT WINAPI extSetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ return extSetRenderState(pSetRenderState8, pd3dd, State, Value); } +HRESULT WINAPI extSetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ return extSetRenderState(pSetRenderState9, pd3dd, State, Value); } + +static HRESULT WINAPI extGetRenderState(GetRenderState_Type pGetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return (*pGetRenderState)(pd3dd, State, Value); } +HRESULT WINAPI extGetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ return extGetRenderState(pSetRenderState8, pd3dd, State, Value); } +HRESULT WINAPI extGetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ return extGetRenderState(pSetRenderState9, pd3dd, State, Value); } + HRESULT WINAPI extGetViewport(void *pd3dd, D3DVIEWPORT9 *pViewport) { return (*pGetViewport)(pd3dd, pViewport); @@ -1756,19 +1707,29 @@ HRESULT WINAPI extCheckFullScreen(void) return res; } -void WINAPI extSetGammaRamp(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) +static void WINAPI extSetGammaRamp(SetGammaRamp_Type pSetGammaRamp, void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) { OutTraceD3D("SetGammaRamp: dd3dd=%x SwapChain=%d flags=%x\n", lpdd3dd, iSwapChain, Flags); if (dxw.dwFlags2 & DISABLEGAMMARAMP) return; (*pSetGammaRamp)(lpdd3dd, iSwapChain, Flags, pRamp); } -void WINAPI extGetGammaRamp(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) +void WINAPI extSetGammaRamp8(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) +{ return extSetGammaRamp(pSetGammaRamp8, lpdd3dd, iSwapChain, Flags, pRamp); } +void WINAPI extSetGammaRamp9(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) +{ return extSetGammaRamp(pSetGammaRamp9, lpdd3dd, iSwapChain, Flags, pRamp); } + +static void WINAPI extGetGammaRamp(GetGammaRamp_Type pGetGammaRamp, void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) { OutTraceD3D("GetGammaRamp: dd3dd=%x SwapChain=%d\n", lpdd3dd, iSwapChain); (*pGetGammaRamp)(lpdd3dd, iSwapChain, pRamp); } +void WINAPI extGetGammaRamp8(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) +{ return extGetGammaRamp(pGetGammaRamp8, lpdd3dd, iSwapChain, pRamp); } +void WINAPI extGetGammaRamp9(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) +{ return extGetGammaRamp(pGetGammaRamp9, lpdd3dd, iSwapChain, pRamp); } + void WINAPI extSetCursorPosition9(void *lpdd3dd, int X, int Y, DWORD Flags) { OutTraceD3D("SetCursorPosition: dd3dd=%x pos=(%d,%d) flags=%x\n", lpdd3dd, X, Y, Flags); @@ -1927,19 +1888,7 @@ HRESULT WINAPI voidDirect3DShaderValidatorCreate9(void) return 0; } -HRESULT WINAPI extRegisterSoftwareDevice(void *lpd3d, void *pInitializeFunction) -{ - OutTraceD3D("RegisterSoftwareDevice: d3d=%x\n", lpd3d); - return (*pRegisterSoftwareDevice)(lpd3d, pInitializeFunction); -} - -UINT WINAPI extGetAdapterModeCount(void *lpd3d, UINT Adapter, D3DFORMAT Format) -{ - OutTraceD3D("GetAdapterModeCount: d3d=%x adapter=%d\n", lpd3d, Adapter); - return (*pGetAdapterModeCount)(lpd3d, Adapter, Format); -} - -HRESULT WINAPI extCheckDeviceType(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) +static HRESULT WINAPI extCheckDeviceType(CheckDeviceType_Type pCheckDeviceType, void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) { HRESULT res; OutTraceD3D("CheckDeviceType: d3d=%x adapter=%d windowed=%x\n", lpd3d, Adapter, bWindowed); @@ -1949,29 +1898,10 @@ HRESULT WINAPI extCheckDeviceType(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, return res; } -HRESULT WINAPI extCheckDeviceFormat(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) -{ - OutTraceD3D("CheckDeviceFormat: d3d=%x adapter=%d\n", lpd3d, Adapter); - return (*pCheckDeviceFormat)(lpd3d, Adapter, DeviceType, AdapterFormat, Usage, RType, CheckFormat); -} - -HRESULT WINAPI extCheckDeviceMultiSampleType(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD *pQualityLevels) -{ - OutTraceD3D("CheckDeviceMultiSampleType: d3d=%x adapter=%d windowed=%x\n", lpd3d, Adapter, Windowed); - return (*pCheckDeviceMultiSampleType)(lpd3d, Adapter, DeviceType, SurfaceFormat, Windowed, MultiSampleType, pQualityLevels); -} - -HRESULT WINAPI extCheckDepthStencilMatch(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) -{ - OutTraceD3D("CheckDepthStencilMatch: d3d=%x adapter=%d\n", lpd3d, Adapter); - return (*pCheckDepthStencilMatch)(lpd3d, Adapter, DeviceType, AdapterFormat, RenderTargetFormat, DepthStencilFormat); -} - -HRESULT WINAPI extCheckDeviceFormatConversion(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) -{ - OutTraceD3D("CheckDeviceFormatConversion: d3d=%x adapter=%d\n", lpd3d, Adapter); - return (*pCheckDeviceFormatConversion)(lpd3d, Adapter, DeviceType, SourceFormat, TargetFormat); -} +HRESULT WINAPI extCheckDeviceType8(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) +{ return extCheckDeviceType(pCheckDeviceType8, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); } +HRESULT WINAPI extCheckDeviceType9(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) +{ return extCheckDeviceType(pCheckDeviceType9, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); } static char *ExplainD3D9DeviceType(D3DDEVTYPE DeviceType) { @@ -2135,22 +2065,27 @@ HRESULT WINAPI extD3DGetDeviceCaps(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceT } HRESULT WINAPI extD3DGetDeviceCaps8(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 *pCaps) -{ - return extD3DGetDeviceCaps(lpd3d, Adapter, DeviceType, (D3DCAPS9 *)pCaps, 8); -} - +{ return extD3DGetDeviceCaps(lpd3d, Adapter, DeviceType, (D3DCAPS9 *)pCaps, 8); } HRESULT WINAPI extD3DGetDeviceCaps9(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps) -{ - return extD3DGetDeviceCaps(lpd3d, Adapter, DeviceType, pCaps, 9); -} +{ return extD3DGetDeviceCaps(lpd3d, Adapter, DeviceType, pCaps, 9); } -HMONITOR WINAPI extGetAdapterMonitor(void *lpd3d, UINT Adapter) +static HMONITOR WINAPI extGetAdapterMonitor(GetAdapterMonitor_Type pGetAdapterMonitor, void *lpd3d, UINT Adapter) { OutTraceD3D("GetAdapterMonitor: d3d=%x adapter=%d\n", lpd3d, Adapter); + if((dxw.dwFlags2 & HIDEMULTIMONITOR) && (Adapter != D3DADAPTER_DEFAULT)){ + OutTraceD3D("GetAdapterMonitor: HIDE adapter=%d\n", Adapter); + return NULL; + } return (*pGetAdapterMonitor)(lpd3d, Adapter); } -UINT WINAPI extGetAvailableTextureMem(void *lpd3dd) +HMONITOR WINAPI extGetAdapterMonitor8(void *lpd3d, UINT Adapter) +{ return extGetAdapterMonitor(pGetAdapterMonitor8, lpd3d, Adapter); } +HMONITOR WINAPI extGetAdapterMonitor9(void *lpd3d, UINT Adapter) +{ return extGetAdapterMonitor(pGetAdapterMonitor9, lpd3d, Adapter); } + + +static UINT WINAPI extGetAvailableTextureMem(GetAvailableTextureMem_Type pGetAvailableTextureMem, void *lpd3dd) { const UINT TextureMemoryLimit = 1024 * 1024 * 1024; // 1GB // const DWORD dwMaxMem = 0x70000000; = 1.8G @@ -2164,7 +2099,12 @@ UINT WINAPI extGetAvailableTextureMem(void *lpd3dd) return AvailableTextureMem; } -HRESULT WINAPI extTestCooperativeLevel(void *lpd3dd) +UINT WINAPI extGetAvailableTextureMem8(void *lpd3dd) +{ return extGetAvailableTextureMem(pGetAvailableTextureMem8, lpd3dd); } +UINT WINAPI extGetAvailableTextureMem9(void *lpd3dd) +{ return extGetAvailableTextureMem(pGetAvailableTextureMem9, lpd3dd); } + +static HRESULT WINAPI extTestCooperativeLevel(TestCooperativeLevel_Type pTestCooperativeLevel, void *lpd3dd) { HRESULT res; res = (*pTestCooperativeLevel)(lpd3dd); @@ -2172,6 +2112,11 @@ HRESULT WINAPI extTestCooperativeLevel(void *lpd3dd) return res; } +HRESULT WINAPI extTestCooperativeLevel8(void *lpd3dd) +{ return extTestCooperativeLevel(pTestCooperativeLevel8, lpd3dd); } +HRESULT WINAPI extTestCooperativeLevel9(void *lpd3dd) +{ return extTestCooperativeLevel(pTestCooperativeLevel9, lpd3dd); } + HRESULT WINAPI extGetSwapChain(void *lpd3dd, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) { HRESULT res; @@ -2260,7 +2205,7 @@ HRESULT WINAPI extCreateTexture9(void *lpd3dd, UINT Width, UINT Height, UINT Lev return res; } -HRESULT WINAPI extLockRect(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) +static HRESULT WINAPI extLockRect(LockRect_Type pLockRect, void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) { HRESULT res; if(IsTraceD3D){ @@ -2279,9 +2224,14 @@ HRESULT WINAPI extLockRect(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRe return res; } +HRESULT WINAPI extLockRect8(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) +{ return extLockRect(pLockRect8, lpd3dtex, Level, pLockedRect, pRect, Flags); } +HRESULT WINAPI extLockRect9(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) +{ return extLockRect(pLockRect9, lpd3dtex, Level, pLockedRect, pRect, Flags); } + typedef void (*TextureHandling_Type)(void *, int); -HRESULT WINAPI extUnlockRect(void *lpd3dtex, UINT Level, TextureHandling_Type TextureHandling) +static HRESULT WINAPI extUnlockRect(UnlockRect_Type pUnlockRect, void *lpd3dtex, UINT Level, TextureHandling_Type TextureHandling) { HRESULT res; OutTraceD3D("Texture::UnlockRect: lpd3dtex=%x level=%d\n", lpd3dtex, Level); @@ -2292,74 +2242,9 @@ HRESULT WINAPI extUnlockRect(void *lpd3dtex, UINT Level, TextureHandling_Type Te } HRESULT WINAPI extUnlockRect8(void *lpd3dtex, UINT Level) -{ - return extUnlockRect(lpd3dtex, Level, D3D8TextureHandling); -} - +{ return extUnlockRect(pUnlockRect8, lpd3dtex, Level, D3D8TextureHandling); } HRESULT WINAPI extUnlockRect9(void *lpd3dtex, UINT Level) -{ - return extUnlockRect(lpd3dtex, Level, D3D9TextureHandling); -} - -#ifdef DXWNDDISABLEDHOOKS -HRESULT WINAPI extGetSurfaceLevel9(void *lpd3dtex, UINT Level, IDirect3DSurface9** ppSurfaceLevel) -{ - HRESULT res; - OutTraceD3D("GetSurfaceLevel(9): lpd3dtex=%x level=%d\n", lpd3dtex, Level); - res = (*pGetSurfaceLevel9)(lpd3dtex, Level, ppSurfaceLevel); - if(res == DD_OK){ - OutTraceD3D("GetSurfaceLevel(9): SurfaceLevel=%x\n", lpd3dtex, Level, *ppSurfaceLevel); - //HookD3DTexture9((void **)ppSurfaceLevel); - } - return res; -} - -HRESULT WINAPI extCopyRects(void *lpd3dd, void *pSourceSurface, CONST RECT *pSourceRectsArray, UINT cRects, void *pDestinationSurface, CONST POINT* pDestPointsArray) -{ - HRESULT res; - OutTraceD3D("CopyRects: rects=%d\n", cRects); - res = (pCopyRects)(lpd3dd, pSourceSurface, pSourceRectsArray, cRects, pDestinationSurface, pDestPointsArray); - //extern void D3D8TextureHandling(void *, int); - //D3D8TextureHandling(pDestinationSurface, 0); - return res; -} - -HRESULT WINAPI extUpdateSurface(void *lpd3dd, IDirect3DSurface9 *pSourceSurface, CONST RECT *pSourceRect, IDirect3DSurface9 *pDestinationSurface, CONST POINT *pDestPoint) -{ - HRESULT res; - OutTraceD3D("UpdateSurface: lpd3dd=%x sourcesurface=%x destsurface=%x\n", lpd3dd, pSourceSurface, pDestinationSurface); - res = (*pUpdateSurface)(lpd3dd, pSourceSurface, pSourceRect, pDestinationSurface, pDestPoint); - return res; -} - -HRESULT WINAPI extUpdateTexture(void *lpd3dd, IDirect3DBaseTexture9 *pSourceTexture, IDirect3DBaseTexture9 *pDestinationTexture) -{ - HRESULT res; - OutTraceD3D("UpdateTexture: lpd3dd=%x sourcetexture=%x desttexture=%x\n", lpd3dd, pSourceTexture, pDestinationTexture); - res = (*pUpdateTexture)(lpd3dd, pSourceTexture, pDestinationTexture); - return res; -} - -HRESULT WINAPI extSetPrivateData(void *lpd3dd, REFGUID refguid, CONST void *pData, DWORD SizeOfData, DWORD Flags) -{ - HRESULT res; - OutTraceD3D("SetPrivateData: lpd3dd=%x refguid=%x pData=%x size=%x flags=%x\n", lpd3dd, refguid, pData, SizeOfData, Flags); - res = (*pSetPrivateData)(lpd3dd, refguid, pData, SizeOfData, Flags); - return res; -} - -HRESULT WINAPI extQueryInterfaceTex(void *obj, REFIID riid, void** ppvObj) -{ - HRESULT res; - OutTraceD3D("D3D::QueryInterface(T9): d3d=%x riid=%x\n", obj, riid.Data1); - res=pQueryInterfaceTex(obj, riid, ppvObj); - if(res) - OutTraceE("D3D::QueryInterface(T9): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else - OutTraceD3D("D3D::QueryInterface(T9): obp=%x\n", *ppvObj); - return res; -} -#endif +{ return extUnlockRect(pUnlockRect9, lpd3dtex, Level, D3D9TextureHandling); } void RestoreD3DSurfaces(BOOL bFullScreen) { diff --git a/dll/hd3d8.cpp b/dll/hd3d8.cpp index e641791..f3c8328 100644 --- a/dll/hd3d8.cpp +++ b/dll/hd3d8.cpp @@ -11,8 +11,8 @@ extern void TextureHandling(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); -extern LockRect_Type pLockRect; -extern UnlockRect_Type pUnlockRect; +extern LockRect_Type pLockRect8; +extern UnlockRect_Type pUnlockRect8; extern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT); @@ -49,7 +49,7 @@ void D3D8TextureHandling(void *arg, int Level) } if(Desc.Usage == D3DUSAGE_RENDERTARGET)return; //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); - res=(*pLockRect)(lpd3dtex, Level, &LockedRect, NULL, 0); + res=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0); OutTrace("D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", lpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), Desc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch); @@ -67,5 +67,5 @@ void D3D8TextureHandling(void *arg, int Level) D3DTextureTransp(Desc, LockedRect); break; } - res=(*pUnlockRect)(lpd3dtex, Level); + res=(*pUnlockRect8)(lpd3dtex, Level); } diff --git a/dll/hd3d9.cpp b/dll/hd3d9.cpp index 2a031b4..4784c1e 100644 --- a/dll/hd3d9.cpp +++ b/dll/hd3d9.cpp @@ -11,8 +11,8 @@ extern void TextureHandling(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); -extern LockRect_Type pLockRect; -extern UnlockRect_Type pUnlockRect; +extern LockRect_Type pLockRect9; +extern UnlockRect_Type pUnlockRect9; extern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT); @@ -49,7 +49,7 @@ void D3D9TextureHandling(void *arg, int Level) } if(Desc.Usage == D3DUSAGE_RENDERTARGET)return; //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); - res=(*pLockRect)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY); + res=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY); OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", lpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), Desc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch); @@ -67,5 +67,5 @@ void D3D9TextureHandling(void *arg, int Level) D3DTextureTransp(Desc, LockedRect); break; } - res=(*pUnlockRect)(lpd3dtex, Level); + res=(*pUnlockRect9)(lpd3dtex, Level); } diff --git a/dll/user32.cpp b/dll/user32.cpp index c09ede2..7c77061 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -97,6 +97,12 @@ BOOL WINAPI extPaintDesktop(HDC); typedef VOID (WINAPI *mouse_event_Type)(DWORD, DWORD, DWORD, DWORD, ULONG_PTR); mouse_event_Type pmouse_event = NULL; VOID WINAPI extmouse_event(DWORD, DWORD, DWORD, DWORD, ULONG_PTR); +typedef BOOL (WINAPI *ShowScrollBar_Type)(HWND, int, BOOL); +ShowScrollBar_Type pShowScrollBar = NULL; +BOOL WINAPI extShowScrollBar(HWND, int, BOOL); +typedef BOOL (WINAPI *DrawMenuBar_Type)(HWND); +DrawMenuBar_Type pDrawMenuBar = NULL; +BOOL WINAPI extDrawMenuBar(HWND); #ifdef TRACEPALETTE @@ -181,6 +187,10 @@ static HookEntryEx_Type Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "ScrollDC", (FARPROC)NULL, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC}, //{HOOK_IAT_CANDIDATE, 0, "mouse_event", (FARPROC)NULL, (FARPROC *)&pmouse_event, (FARPROC)extmouse_event}, + // both added to fix the Galapagos menu bar, but with no success !!!! + {HOOK_HOT_CANDIDATE, 0, "ShowScrollBar", (FARPROC)ShowScrollBar, (FARPROC *)&pShowScrollBar, (FARPROC)extShowScrollBar}, + {HOOK_HOT_CANDIDATE, 0, "DrawMenuBar", (FARPROC)DrawMenuBar, (FARPROC *)&pDrawMenuBar, (FARPROC)extDrawMenuBar}, + {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -192,13 +202,12 @@ static HookEntryEx_Type RemapHooks[]={ {HOOK_HOT_CANDIDATE, 0, "MapWindowPoints", (FARPROC)MapWindowPoints, (FARPROC *)&pMapWindowPoints, (FARPROC)extMapWindowPoints}, {HOOK_HOT_CANDIDATE, 0, "GetUpdateRgn", (FARPROC)GetUpdateRgn, (FARPROC *)&pGetUpdateRgn, (FARPROC)extGetUpdateRgn}, //{HOOK_IAT_CANDIDATE, 0, "GetUpdateRect", (FARPROC)GetUpdateRect, (FARPROC *)&pGetUpdateRect, (FARPROC)extGetUpdateRect}, - //{HOOK_IAT_CANDIDATE, 0, "RedrawWindow", (FARPROC)RedrawWindow, (FARPROC *)&pRedrawWindow, (FARPROC)extRedrawWindow}, + {HOOK_IAT_CANDIDATE, 0, "RedrawWindow", (FARPROC)RedrawWindow, (FARPROC *)&pRedrawWindow, (FARPROC)extRedrawWindow}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type SyscallHooks[]={ {HOOK_IAT_CANDIDATE, 0, "FrameRect", (FARPROC)FrameRect, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect}, - {HOOK_IAT_CANDIDATE, 0, "RedrawWindow", (FARPROC)RedrawWindow, (FARPROC *)&pRedrawWindow, (FARPROC)extRedrawWindow}, {HOOK_IAT_CANDIDATE, 0, "GetParent", (FARPROC)GetParent, (FARPROC *)&pGetParent, (FARPROC)extGetParent}, {HOOK_HOT_CANDIDATE, 0, "InvalidateRgn", (FARPROC)InvalidateRgn, (FARPROC *)&pInvalidateRgn, (FARPROC)extInvalidateRgn}, {HOOK_IAT_CANDIDATE, 0, "TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA}, @@ -2902,22 +2911,19 @@ BOOL WINAPI extRedrawWindow(HWND hWnd, const RECT *lprcUpdate, HRGN hrgnUpdate, RECT rcUpdate; BOOL ret; - OutTraceDW("RedrawWindow: hwnd=%x flags=%x\n", hWnd, flags); + OutTraceDW("RedrawWindow: hwnd=%x hrgn=%x flags=%x\n", hWnd, hrgnUpdate, flags); - rcUpdate = *lprcUpdate; + // v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled + // beware: they both could be null, and that means the whole window + if (!hrgnUpdate && lprcUpdate) rcUpdate = *lprcUpdate; // avoid redrawing the whole desktop if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); if(dxw.IsFullScreen()){ - switch(dxw.GDIEmulationMode){ - case GDIMODE_STRETCHED: - rcUpdate = dxw.MapClientRect((LPRECT)lprcUpdate); - break; - default: - break; - } + // v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled + if (!hrgnUpdate && lprcUpdate) rcUpdate = dxw.MapClientRect((LPRECT)lprcUpdate); } - ret = (*pRedrawWindow)(hWnd, &rcUpdate, hrgnUpdate, flags); + ret = (*pRedrawWindow)(hWnd, lprcUpdate ? &rcUpdate : NULL, hrgnUpdate, flags); if(ret) OutTraceE("RedrawWindow ERROR: err=%d\n", GetLastError()); return ret; } @@ -3649,4 +3655,24 @@ VOID WINAPI extmouse_event(DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULON { OutTrace("mouse_event: flags=%x xy=(%d,%d) data=%x, extrainfo=%lx\n", dwFlags, dx, dy, dwData, dwExtraInfo); return (*pmouse_event)(dwFlags, dx, dy, dwData, dwExtraInfo); +} + +BOOL WINAPI extShowScrollBar(HWND hWnd, int wBar, BOOL bShow) +{ + BOOL ret; + OutTraceDW("ShowScrollBar: hwnd=%x wBar=%x show=%x\n", hWnd, wBar, bShow); + if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); + ret=(*pShowScrollBar)(hWnd, wBar, bShow); + if(!ret) OutTraceE("ShowScrollBar ERROR: err=%d\n", GetLastError()); + return ret; +} + +BOOL WINAPI extDrawMenuBar(HWND hWnd) +{ + BOOL ret; + OutTraceDW("DrawMenuBar: hwnd=%x\n", hWnd); + if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); + ret=(*pDrawMenuBar)(hWnd); + if(!ret) OutTraceE("DrawMenuBar ERROR: err=%d\n", GetLastError()); + return ret; } \ No newline at end of file diff --git a/host/KillProc.cpp b/host/KillProc.cpp index 3498c2a..e6fb91e 100644 --- a/host/KillProc.cpp +++ b/host/KillProc.cpp @@ -157,37 +157,36 @@ int KillProcByName(char *sProcessTail, BOOL bKill) return 0; // just tell you found it. } -#ifdef KILLSINGLEPROCESS - // First open for termination - hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]); - if(hProc) - { - if(TerminateProcess(hProc,0)) - { - // process terminated - CloseHandle(hProc); - FreeLibrary(hInstLib); - return 0; + if(osvi.dwMajorVersion == 5){ + // First open for termination + hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]); + if(hProc){ + if(TerminateProcess(hProc,0)){ + // process terminated + CloseHandle(hProc); + FreeLibrary(hInstLib); + return 0; + } + else{ + // Unable to terminate process + CloseHandle(hProc); + FreeLibrary(hInstLib); + return 602; + } } - else - { - // Unable to terminate process - CloseHandle(hProc); - FreeLibrary(hInstLib); - return 602; + else{ + // Unable to open process for termination + FreeLibrary(hInstLib); + return 604; } } - else - { - // Unable to open process for termination - FreeLibrary(hInstLib); - return 604; + else { + // this will kill the whole process tree - though with no feedback retcode. + extern void KillProcessTree(DWORD); + KillProcessTree(aiPID[i]); + FreeLibrary(hInstLib); + return 0; } -#else - // this will kill the whole process tree - though with no feedback retcode. - extern void KillProcessTree(DWORD); - KillProcessTree(aiPID[i]); -#endif } } } diff --git a/host/StatusDialog.cpp b/host/StatusDialog.cpp index dea3aac..eb0c93e 100644 --- a/host/StatusDialog.cpp +++ b/host/StatusDialog.cpp @@ -66,12 +66,14 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent) Target=&pTargets[DxWndStatus.TaskIdx]; sprintf_s(sMsg2, 1024, - "\nTask=%s\n" + "\nTask=(%d): %s\n" + "pid=%x\n" "Screen = (%dx%d) Color BPP=%d\n" "FullScreen = %s\nDX version = %d\n" "Logging = %s\n" "Cursor = (%d,%d)", - pTitles[DxWndStatus.TaskIdx].title, + (DxWndStatus.OrigIdx+1), pTitles[DxWndStatus.OrigIdx].title, + DxWndStatus.dwPid, DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion, DxWndStatus.isLogging?"ON":"OFF", diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 582521c..8c42425 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 28c13b0..781b00d 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 e967260..31481db 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 bbadf4e..99652d4 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -767,6 +767,8 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "tflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->tflags); + sprintf_s(key, sizeof(key), "dflag%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->dflags); WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "posx%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->posx); @@ -879,6 +881,7 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c char *sBuf; sBuf = (char *)malloc(1000000); extern BOOL gbDebug; + TargetMap->index = i; // ------- sprintf_s(key, sizeof(key), "path%i", i); GetPrivateProfileString("target", key, "", TargetMap->path, MAX_PATH, InitPath); @@ -941,6 +944,9 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c sprintf_s(key, sizeof(key), "tflag%i", i); TargetMap->tflags = GetPrivateProfileInt("target", key, 0, InitPath); // ------- + sprintf_s(key, sizeof(key), "dflag%i", i); + TargetMap->dflags = GetPrivateProfileInt("target", key, 0, InitPath); + // ------- sprintf_s(key, sizeof(key), "posx%i", i); TargetMap->posx = GetPrivateProfileInt("target", key, 0, InitPath); // ------- @@ -1514,6 +1520,7 @@ void CDxwndhostView::OnSort() listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); + TargetMaps[i].index = i; // renumber } SetTarget(TargetMaps); @@ -1568,12 +1575,12 @@ void CDxwndhostView::OnPause() CTargetDlg dlg; HRESULT res; DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) || (DxWndStatus.hWnd==NULL)) { + if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/ ) { MessageBoxLang(DXW_STRING_NOPAUSETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; - mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE); + mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_PAUSETASK, DXW_STRING_INFO, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; PauseResumeThreadList(DxWndStatus.dwPid, FALSE); @@ -1585,12 +1592,12 @@ void CDxwndhostView::OnResume() CTargetDlg dlg; HRESULT res; DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) || (DxWndStatus.hWnd==NULL)) { + if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) { MessageBoxLang(DXW_STRING_NORESUMETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; - mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE); + mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_RESUMETASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; PauseResumeThreadList(DxWndStatus.dwPid, TRUE); @@ -1639,12 +1646,12 @@ void CDxwndhostView::OnKill() HRESULT res; HANDLE TargetHandle; DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) || (DxWndStatus.hWnd==NULL)) { + if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) { MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; - mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.TaskIdx].title, _TRUNCATE); + mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; DxWndStatus.dwPid; @@ -1730,6 +1737,7 @@ void CDxwndhostView::OnAdd() len=FilePath.ReverseFind('\\'); FilePath=FilePath.Right(FilePath.GetLength()-len-1); strncpy_s(PrivateMaps[i].title, sizeof(PrivateMaps[i].title), FilePath.GetString(), sizeof(PrivateMaps[i].title)-1); + TargetMaps[i].index = i; } listitem.pszText = PrivateMaps[i].title; listctrl.InsertItem(&listitem); @@ -1766,6 +1774,7 @@ void CDxwndhostView::OnDuplicate() listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); + TargetMaps[i].index = i; } SetTarget(TargetMaps); this->isUpdated=TRUE; @@ -2065,7 +2074,7 @@ DWORD WINAPI TrayIconUpdate(CSystemTray *Tray) GetHookStatus(&DxWndStatus); sprintf_s(sMsg, 1024, "Running \"%s\"\nScreen = (%dx%d) %dBPP\nFullScreen = %s\nDX version = %d", - pTitles[DxWndStatus.TaskIdx].title, + pTitles[DxWndStatus.OrigIdx].title, DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion); } @@ -2171,6 +2180,7 @@ void CDxwndhostView::Resize() int i, tmp, size = 0; for(i = 0; i < MAXTARGETS; i ++){ + TargetMaps[i].index = i; // renumber the items if(strlen(TargetMaps[i].path) == 0) break; tmp = listctrl.GetStringWidth(PrivateMaps[i].title); if(size < tmp) size = tmp; diff --git a/proxy/d3d8.suo b/proxy/d3d8.suo index a77b40d..38585e0 100644 Binary files a/proxy/d3d8.suo and b/proxy/d3d8.suo differ diff --git a/proxy/d3d9.suo b/proxy/d3d9.suo index be9ce2e..8acc9aa 100644 Binary files a/proxy/d3d9.suo and b/proxy/d3d9.suo differ diff --git a/proxy/ddraw.suo b/proxy/ddraw.suo index e65c76f..3c73a47 100644 Binary files a/proxy/ddraw.suo and b/proxy/ddraw.suo differ