From e0e9bcffd2f175fc9fa6be0ff28f24bf22ec480d Mon Sep 17 00:00:00 2001 From: gho tik Date: Sun, 22 Sep 2013 12:38:19 -0400 Subject: [PATCH] v2_02_36_src Former-commit-id: 178cc79be8d4d9da34476bbe4f5e51f44d840c13 --- Include/dxwnd.h | 8 ++- build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 52 -------------------- build/readme-relnotes.txt | 8 ++- dll/ddraw.cpp | 101 +++++++++++++++++++++++--------------- dll/dxhook.cpp | 31 ++++++------ dll/dxwcore.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 227020 -> 210432 bytes dll/kernel32.cpp | 49 +++++++++++++++--- dll/user32.cpp | 28 +++++------ dll/wndproc.cpp | 3 +- host/Resource.h | 2 + host/TabLogs.cpp | 1 + host/TabProgram.cpp | 1 + host/TargetDlg.cpp | 1 + host/TargetDlg.h | 2 + host/dxwnd.ini | 5 -- host/dxwndhost.aps | Bin 163848 -> 164148 bytes host/dxwndhost.rc | 10 ++-- host/dxwndhost.vs2008.suo | Bin 317440 -> 309248 bytes host/dxwndhostView.cpp | 4 ++ 22 files changed, 165 insertions(+), 151 deletions(-) delete mode 100644 build/dxwnd.ini delete mode 100644 host/dxwnd.ini diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 19f592c..a2d3fdb 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -100,19 +100,21 @@ #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 // eliminates window-related messages that might be offending for a fullscreen program +#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 // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general #define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling #define OUTWINMESSAGES 0x00000004 // traces windows messages -#define OUTCURSORTRACE 0x00000008 // traces windows messages +#define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations #define OUTPROXYTRACE 0x00000010 // warning: it also enables 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 #define OUTREGISTRY 0x00000200 // log registry operations +#define TRACEHOOKS 0x00000400 // log hook operations #define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE | LOCKEDSURFACE) #define HANDLEFPS (SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS) @@ -186,6 +188,7 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM); #define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace #define OutTraceB if(dxw.dwTFlags & OUTDEBUG) OutTrace #define OutTraceR if(dxw.dwTFlags & OUTREGISTRY) OutTrace +#define OutTraceH if(dxw.dwTFlags & TRACEHOOKS) OutTrace #define OutTraceP OutTrace #define OutTraceE OutTrace @@ -194,6 +197,7 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM); #define IsTraceD (dxw.dwTFlags & OUTDDRAWTRACE) #define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE) #define IsTraceR (dxw.dwTFlags & OUTREGISTRY) +#define IsTraceH (dxw.dwTFlags & TRACEHOOKS) #define IsTraceP (TRUE) #define IsTraceE (TRUE) #define IsDebug (dxw.dwTFlags & OUTDEBUG) diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 55ef062..dc4571c 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f5743861a1292a4618e1a2ba0010db02dbcd6cf7af54405d41963ffc14594c0 -size 407040 +oid sha256:87bb2172d84948aba5cd6af6e3b810430441b3935584ea3d46b3ef4c0bf1f8ed +size 407552 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index d840ab8..876a9db 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fdfc4f4a7a785e89e56cf5ea2ec95e1735e2ffe4a572a4036764839d377bf628 -size 524800 +oid sha256:6228efb8d349dfee02f1fc5b997651e2bb36d01120398c7743ab495286852aeb +size 525312 diff --git a/build/dxwnd.ini b/build/dxwnd.ini deleted file mode 100644 index aeb736c..0000000 --- a/build/dxwnd.ini +++ /dev/null @@ -1,52 +0,0 @@ -[window] -posx=1435 -posy=210 -sizx=320 -sizy=420 -[target] -title0=Rayman 2 Demo -path0=D:\Games\Rayman2Demo\Rayman2Demo.exe -module0= -opengllib0= -ver0=1 -coord0=0 -flag0=402653217 -flagg0=1207959552 -flagh0=2097172 -flagi0=0 -tflag0=64 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -title1=Mirror's Edge -path1=D:\Games\Mirror's Edge\Binaries\MirrorsEdge.exe -module1= -opengllib1= -ver1=0 -coord1=0 -flag1=134217762 -flagg1=1207959552 -flagh1=2097172 -flagi1=0 -tflag1=512 -initx1=0 -inity1=0 -minx1=0 -miny1=0 -maxx1=0 -maxy1=0 -posx1=50 -posy1=50 -sizx1=800 -sizy1=600 -maxfps1=0 -initts1=6 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index dcc2b62..6588311 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -260,7 +260,11 @@ fixed BACKBUFFER surface attributes in direct (not emulated) mode: Rayman 2 play added FILTERMESSAGES flag ("filter offending messages") to eliminate some problems to games not developed to work windowized (Rayman 2, Mirror's Edge ...) fixed bug crashing the program when "keep aspect ratio" is selected with window size set to 0 - - +v2.02.36 +hooked GetAttachedSurface to non-PRIMARY surface to track ZBUFFER attach to BACKBUFFER. Useless, so far... +revised capability handling in CreateSurface +hook trace is now activated from a separate log flag to reduce debug log size +added "Peek all messages in queue" to avoid queue saturation and automatic task kill in Win7 (thank to P K help) +fixed message handling in the case messages are passed to a routine handle diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 37b7074..ab10273 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -268,6 +268,7 @@ static void RefProbe(INTERFACE *obj, char *op, int line) OutTrace("### COM obj=%x op=%s refcount=%d at %d ###\n", obj, op, (*pReleaseS)((LPDIRECTDRAWSURFACE)obj), line); } +//#define REFPROVE_TEST // comment out to eliminate #ifdef REFPROVE_TEST #define REFPROBE(obj, op) RefProbe((INTERFACE *)(obj), op, __LINE__) #else @@ -1287,6 +1288,22 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast, (void **)&pBltFast, "BltFast(S)"); // IDirectDrawSurface::DeleteAttachedSurface SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface, (void **)&pDeleteAttachedSurface, "DeleteAttachedSurface(S)"); + // IDirectDrawSurface::GetAttachedSurface + switch(dxversion) { + case 1: + case 2: + SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)"); + break; + case 3: + SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)"); + break; + case 4: + SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)"); + break; + case 7: + SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)"); + break; + } // IDirectDrawSurface::GetCaps switch(dxversion) { case 1: @@ -1350,22 +1367,6 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)"); // IDirectDrawSurface::BltBatch SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(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::EnumAttachedSurfaces SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)"); // IDirectDrawSurface::EnumOverlayZOrders @@ -1739,6 +1740,7 @@ HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp) } if(lpdds == lpDDSBack) lpDDSBack = (LPDIRECTDRAWSURFACE)*obp; + return 0; } @@ -1947,20 +1949,20 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd) // Submarine titans (8BPP) OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (1)\n"); //lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN; + lpddsd->ddsCaps.dwCaps = (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); return SetPixFmt(lpddsd); break; case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY: // Duckman OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (2)\n"); //lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - //lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN; + //lpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); return SetPixFmt(lpddsd); break; case DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER: // the Sims OutTrace("FixSurfaceCaps: SystemMemory ZBuffer for the Sims\n"); - //lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; identical ... + //lpddsd->ddsCaps.dwCaps = (DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER); identical ... return "ZBUFFER"; break; } @@ -2005,7 +2007,7 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd) if(((lpddsd->dwFlags & (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) == (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)){ OutTraceB("FixSurfaceCaps: Experimental pixelformat for ZBUFFER case\n"); - lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // Evany + lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // Evany lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; return "ZBUFFER"; } @@ -2021,9 +2023,9 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd) } // adjust pixel format OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n"); - lpddsd->dwFlags |= DDSD_CAPS | DDSD_PIXELFORMAT; + lpddsd->dwFlags |= (DDSD_CAPS|DDSD_PIXELFORMAT); lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN; + lpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); return SetPixFmt(lpddsd); } @@ -2041,6 +2043,7 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf HRESULT res; // emulated primary surface +#if 0 ClearSurfaceDesc((void *)&ddsd, dxversion); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN; @@ -2051,6 +2054,17 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); SetPixFmt((LPDDSURFACEDESC2)&ddsd); +#else + memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); + ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces + ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + SetPixFmt((LPDDSURFACEDESC2)&ddsd); +#endif // create Primary surface DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__); @@ -2134,7 +2148,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf // genuine primary surface memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP | DDSCAPS_COMPLEX); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX); // create Primary surface DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__); @@ -2192,12 +2206,25 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS HRESULT res; // create BackBuffer surface +#if 0 ClearSurfaceDesc((void *)&ddsd, dxversion); ddsd.dwFlags = DDSD_CAPS|DDSD_PIXELFORMAT|DDSD_HEIGHT|DDSD_WIDTH; ddsd.ddsCaps.dwCaps=DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); SetPixFmt(&ddsd); +#else + memcpy(&ddsd, lpddsd, lpddsd->dwSize); + ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces + ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + SetPixFmt(&ddsd); +#endif + DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]" , __LINE__); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res) { @@ -2280,23 +2307,19 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf HRESULT res; memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... + if(ddsd.dwFlags & DDSD_CAPS){ + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + } + else{ + ddsd.dwFlags |= DDSD_CAPS; + ddsd.ddsCaps.dwCaps = 0; + } + ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + //if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; FixSurfaceCaps(&ddsd); + DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]" , __LINE__); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); - if(res){ - // v2.1.81: retry on system memory may fix not only the DDERR_OUTOFVIDEOMEMORY - // error, but the DDERR_INVALIDPIXELFORMAT (see "The Sims ???") - if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && - ((res==DDERR_OUTOFVIDEOMEMORY) || (res==DDERR_INVALIDPIXELFORMAT))){ - OutTraceD("CreateSurface: CreateSurface ERROR err=%x(%s) at %d, retry in SYSTEMMEMORY\n", - res, ExplainDDError(res), __LINE__); - ddsd.dwFlags |= DDSD_CAPS; - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic2]" , __LINE__); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - } - } if (res) { OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; @@ -3931,7 +3954,7 @@ HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRA // note: C&C95 Gold Edition includes a check for the primary surface NOT having // DDSCAPS_SYSTEMMEMORY bit set - if(IsPrim) caps->dwCaps = dxw.dwPrimarySurfaceCaps; + if(IsPrim) caps->dwCaps |= dxw.dwPrimarySurfaceCaps; // v2.1.83: add FLIP capability (Funtraks a.k.a. Ignition) // v2.2.26: add VIDEOMEMORY|LOCALVIDMEM capability (Alien Cabal 95 - partial fix) if(dxw.dwFlags1 & EMULATESURFACE) { @@ -4101,7 +4124,7 @@ HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDR //if(dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE; if(dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM; - + if(IsFixed) DumpSurfaceAttributes(lpddsd, "GetSurfaceDesc [FIXED]", __LINE__); return DD_OK; } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 92f45fb..80bf360 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -78,7 +78,7 @@ static char *Flag4Names[32]={ static char *TFlagNames[32]={ "OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE", "OUTPROXYTRACE", "DXPROXED", "ASSERTDIALOG", "OUTIMPORTTABLE", - "OUTDEBUG", "OUTREGISTRY", "", "", + "OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -167,12 +167,12 @@ void HookDlls(HMODULE module) __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { - OutTraceB("HookDlls: ERROR no pnth at %d\n", __LINE__); + OutTraceH("HookDlls: ERROR no pnth at %d\n", __LINE__); return; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { - OutTraceB("HookDlls: ERROR no rva at %d\n", __LINE__); + OutTraceH("HookDlls: ERROR no rva at %d\n", __LINE__); return; } @@ -190,18 +190,18 @@ void HookDlls(HMODULE module) if(idx != -1) { DllBase=GetModuleHandle(impmodule); SysLibs[idx]=DllBase; - OutTraceB("HookDlls: system module %s at %x\n", impmodule, DllBase); + OutTraceH("HookDlls: system module %s at %x\n", impmodule, DllBase); continue; } - OutTraceB("HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\n", + OutTraceH("HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\n", pidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain); if(pidesc->OriginalFirstThunk) { ptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk); } else{ ptname = 0; - OutTraceB("HookDlls: no PE OFTs - stripped module=%s\n", impmodule); + OutTraceH("HookDlls: no PE OFTs - stripped module=%s\n", impmodule); } DllBase=GetModuleHandle(impmodule); @@ -283,7 +283,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) static DWORD MinHook=0xFFFFFFFF; static DWORD MaxHook=0; - OutTraceB("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname); + OutTraceH("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname); // keep track of hooked call range to avoid re-hooking of hooked addresses !!! if ((DWORD)hookproc < MinHook) MinHook=(DWORD)hookproc; if ((DWORD)hookproc > MaxHook) MaxHook=(DWORD)hookproc; @@ -488,7 +488,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi pidesc ++; } if(!pidesc->FirstThunk) { - OutTraceB("HookAPI: PE unreferenced dll=%s\n", dll); + OutTraceH("HookAPI: PE unreferenced dll=%s\n", dll); return 0; } @@ -496,7 +496,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; if((apiproc==NULL) && (ptname==NULL)){ - if (IsDebug) OutTraceD("HookAPI: unreacheable api=%s dll=%s\n", apiname, dll); + OutTraceH("HookAPI: unreacheable api=%s dll=%s\n", apiname, dll); return 0; } @@ -531,7 +531,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi OutTraceD("HookAPI: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__); return 0; } - if(IsDebug) OutTrace("HookAPI hook=%s address=%x->%x\n", apiname, org, hookproc); + OutTraceH("HookAPI hook=%s address=%x->%x\n", apiname, org, hookproc); } __except(EXCEPTION_EXECUTE_HANDLER) { @@ -657,11 +657,6 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height) // fixing windows message handling procedure pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); - if (((DWORD)pWindowProc & 0xFFFF0000) == 0xFFFF0000){ - // don't hook pseudo-callbacks (v2.1.71: Commandos 2) - OutTraceD("GetWindowLong: no valid WindowProc routine detected, hwnd=%x WindowProc=%x\n", hwnd, (DWORD)pWindowProc); - } - else if (pWindowProc == extWindowProc){ // hooked already !!! OutTraceD("GetWindowLong: extWindowProc already in place, hwnd=%x\n", hwnd); @@ -1090,7 +1085,6 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp case VK_F6: case VK_F5: if (dxw.dwFlags2 & TIMESTRETCH) { - char *sTSCaption[17]={"x16","x8","x4","x2","x1",":2",":4",":8",":16"}; if (wparam == VK_F5 && (dxw.TimeShift < 8)) dxw.TimeShift++; if (wparam == VK_F6 && (dxw.TimeShift > -8)) dxw.TimeShift--; OutTrace("Time Stretch: shift=%d speed=%s\n", dxw.TimeShift, dxw.GetTSCaption()); @@ -1116,7 +1110,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp // (*pWindowProc), extWindowProc, message, ExplainWinMessage(message), wparam, lparam); if(pWindowProc) { LRESULT ret; - ret=(*pWindowProc)(hwnd, message, wparam, lparam); + + // v2.02.36: use CallWindowProc that handles WinProc handles + ret=(*pCallWindowProc)(pWindowProc, hwnd, message, wparam, lparam); + // save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling if(message==WM_NCHITTEST) LastCursorPos=ret; // v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 46282f0..e37214c 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -911,7 +911,7 @@ char *dxwCore::GetTSCaption(int shift) "x1", ":1.5",":2",":3",":4", ":6",":8",":12",":16"}; - if (shift<0 || shift>16) return "???"; + if (shift<(-8) || shift>(+8)) return "???"; return sTSCaption[shift+8]; } char *dxwCore::GetTSCaption(void) diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 9dad871508c362a0e6c024754ce885c7955f1f34..bd248bbc05d14157ec7803b3a1fc1f3183b34f76 100644 GIT binary patch delta 14508 zcmd6u33OCNy2q<-FN6?c49H+W$ilvakc2=GNk~{@fFP?7fouxO5|bv0pmsozQBVTy zq;OmY!H0_I3&x>+iUNYdC?JU9iX!T`j^a9^Ebsrn{RKOmcRUhuocD2x`rlvIy;ZmN z`Z~SmU(GAO46B*t3{RLo{#cQJpLQsvDx1{Kci!rVX!dc+;e8igmtE5}e{%TUBVRNN zk68(|=^-;N)+uIXl5SDEC1!b;-dH;#{ugIR2i$oYW}=r_(Y^#{NUbMnmSxtY>o7BC ztZum~C9|n&b#@}3Cnd+X)0yD=J|)L>5kCEsZ%lX#ld#N+;4^%lzU$2qmo?qgxGeW& zZWXGuR_ZyYQU?%1aKqk5lOw-A_0?(e!MMH>ffmdoaD7qjv;A&$xOGeDwr6EBASWaW zxL)zyD?mCqd_ND!GCP;*1b6!;O5M`jH~+E`O?B(DQ@d7yeD6Dc*<+}ig$263dGswS z%6DX7m!Rv`wdrXNmv4u&cdch|j&>cyJ(2Z_;#vz7R(pKNXqRudvxj>PE*GcO&c8f# zwzg`QJoU9RbR~*W1+0|s)Yjs zRfa?r$Rto8bW}4YQ^)y^JQeOw&(^K2^*N}AZ%631e$Oa9RG+ERP9~?n4)N!X)1xf& z{0P)@@p#?RR2J%1{_IKmNy`kp4pr`%qO(oaaGla510^a|MZRhME-{hWI^O@)6dma{ z2fnac`M0I(bZydm>sC6{Y|7TDzOvZX{w?{sMx#FU5ZzTj%bw7YgR@oj5@b|esB?a8 z&<~PycfBQ$q-HQaMvrM_5{u9WoNKk`0?Ay(s~Kp7rvvS5Cq#iG{n1zJ&5l)vqW#gc z^qLTJ@W zR+sA;4;`ARt?FL7oxk0DeYB~0FIl(K8_dGKC_g)+Z~o7%{KG5Ir8nQIcWAe2k21BX zKdLe;rM~hXU#go#xr*^|szE30X!iFfz7tFGii?X%ati~X(7)|**7w@Jx}ERFxUkJ@^&!0~ z5ygE%AJyjQNFD2oe?8jYx<)^zt2b*;$V+&&$2iJv+^mO>>|KtDs{+A;Fc0Adgu4+q z7*`@*fN-N+-;B7#|AWI?rcLD(oo;sq^SsN-Vy{UtS*hqS%iY$KZj-oHr~50LTR*wO z_@roL7{^Q(x3rFBHVebl$teqFPQR{W{A(sz(>t0&n{+pS&XedVrZQ1?+FWT>USdkt z>PR!Sxz*CQsB5GNzfOmwy6tILeahuRwNN#VBrBBj=Wi0`k=KFDIWcA-H^spzbE?Qq)ueJT2zgrX9q;N84o^w$!mf=E#QfPDqRW6MB z0q7Bk*W1k8e86hoh3{11y3qmjoA2a{akexI-m_Mt+*}aZe_NXe-nFji);sZ>9@6Wu z{gArpEy8Sn)oS6dJZPm`)u^WGL)PG?tI&Ktgi~hZA*+4Zy^!}IJcM8>4q07VKLWJ@ z;ZcMa5L{?vw!L}kkd>WHwF7h~0`-fCcOmRX_y@vk2;_St-iP=V(FY_xD6z?T!>Sr~ z99KUh{DN=-;UvN-gwqK2+Wh-#QTH?N9*U8*!tY0 z9kd3SD>8Jni9TqxvX>m^nu)zqd{rSW&8H`H>&
    AL!)uB_f`RkDI>w09sL)C~_x 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 delta 32562 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 (DWORD)IOHeapSize){ - IOHeapSize += 200*SECTOR_SIZE; + if((DWORD)(Cursor+SECTOR_SIZE) > (DWORD)IOHeapSize){ + OutTrace("HeapReAlloc: about to add another chunk... current size=%d\n", IOHeapSize); + IOHeapSize += (200*SECTOR_SIZE); IOBuffer=(char *)HeapReAlloc(IOHeap, 0, IOBuffer, IOHeapSize); if(IOBuffer==0) OutTraceE("HeapReAlloc ERROR: err=%d at %d\n", GetLastError(), __LINE__); } - ret=(*pReadFile)(hFile, IOBuffer+Cursor, SECTOR_SIZE, &BytesRead, lpOverlapped); // read one block + ret=(*pReadFile)(hFile, IOBuffer+Cursor, SECTOR_SIZE, &BytesRead, NULL); // read one block + if(!ret) + OutTrace("ReadFIle ERROR: err=%d at %d\n", GetLastError(), __LINE__); + else + OutTrace("ReadFIle: BytesRead=%d\n", BytesRead); Cursor+=BytesRead; if (ret && BytesRead == 0) ret=FALSE; // eof } while(ret); + //CloseHandle(hFileRead); OutTrace("ReadFIle: BUFFERED FileSize=%d\n", Cursor); FileLength=Cursor; @@ -587,17 +603,22 @@ HANDLE WINAPI extCreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwS OutTrace("CreateFile: FileName=%s DesiredAccess=%x SharedMode=%x Disposition=%x Flags=%x\n", lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, dwFlagsAndAttributes); + //dwFlagsAndAttributes &= ~FILE_FLAG_NO_BUFFERING; + ret=(*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); if(ret && (ret != (HANDLE)INVALID_SET_FILE_POINTER)) OutTrace("CreateFile: ret=%x\n", ret); else OutTraceE("CreateFile ERROR: err=%d\n", GetLastError()); return ret; -} +} BOOL WINAPI extCloseHandle(HANDLE hObject) { - if (hObject==LastFile) LastFile=0; // invalidate cache + if (hObject==LastFile) { + LastFile=0; // invalidate cache + OutTrace("CloseHandle: INVALIDATE CACHE hFile=%x\n", hObject); + } return (*pCloseHandle)(hObject); } @@ -610,6 +631,7 @@ DWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDista // if cached file ... if(LastFile==hFile){ + int LastPos=Where; if(!lpDistanceToMoveHigh){ OutTrace("SetFilePointer: buffered move\n"); switch(dwMoveMethod){ @@ -617,7 +639,18 @@ DWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDista case FILE_CURRENT: Where+=lDistanceToMove; break; case FILE_END: Where=FileLength-lDistanceToMove; break; } - OutTrace("SetFilePointer: ret=%x\n", Where); + //if(Where % LEGACY_SIZE){ + // Where=LastPos; + // SetLastError(ERROR_INVALID_PARAMETER); + // OutTrace("SetFilePointer: ret=INVALID_SET_FILE_POINTER pos=%d\n", Where); + // return INVALID_SET_FILE_POINTER; + //} + + // Where = ((Where + LEGACY_SIZE-1) / LEGACY_SIZE) * LEGACY_SIZE; + + Where = (Where / LEGACY_SIZE) * LEGACY_SIZE; + + OutTrace("SetFilePointer: ret=0x%x(#%d)\n", Where, Where); return Where; } } diff --git a/dll/user32.cpp b/dll/user32.cpp index b5fc384..f3d65ab 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -127,7 +127,7 @@ FARPROC Remap_user32_ProcAddress(LPCSTR proc, HMODULE hModule) if (addr=RemapLibrary(proc, hModule, WinHooks)) return addr; if((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) if (addr=RemapLibrary(proc, hModule, MouseHooks2)) return addr; - if(FALSE) + if(dxw.dwFlags3 & PEEKALLMESSAGES) if (addr=RemapLibrary(proc, hModule, PeekAllHooks)) return addr; return NULL; } @@ -145,7 +145,7 @@ void HookUser32(HMODULE hModule) if(dxw.dwFlags1 & MODIFYMOUSE)HookLibrary(hModule, MouseHooks, libname); if (dxw.dwFlags1 & (PREVENTMAXIMIZE|FIXWINFRAME|LOCKWINPOS|LOCKWINSTYLE))HookLibrary(hModule, WinHooks, libname); if((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) HookLibrary(hModule, MouseHooks2, libname); - if(FALSE) HookLibrary(hModule, PeekAllHooks, libname); + if(dxw.dwFlags3 & PEEKALLMESSAGES) HookLibrary(hModule, PeekAllHooks, libname); return; } @@ -784,17 +784,9 @@ BOOL WINAPI extPeekAnyMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT w { BOOL res; - if(wMsgFilterMin || wMsgFilterMax){ - while (TRUE){ - res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, wRemoveMsg); - if((lpMsg->message >= wMsgFilterMin) && (lpMsg->message <= wMsgFilterMax)) break; - if(!wRemoveMsg)(*pPeekMessage)(lpMsg, hwnd, 0, 0, TRUE); - } - } - else - res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, wRemoveMsg); + res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, (wRemoveMsg & 0x000F)); - OutTraceW("PeekMessage: lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", + OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); @@ -805,8 +797,12 @@ BOOL WINAPI extPeekAnyMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT w BOOL WINAPI extPeekMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { BOOL res; + UINT iRemoveMsg; - res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg); + iRemoveMsg = wRemoveMsg; + if(1) iRemoveMsg &= 0x000F; // Peek all messages + + res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, iRemoveMsg); OutTraceW("PeekMessage: lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, @@ -1427,10 +1423,10 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect) ret=(*pGetClipCursor)(lpRect); if(IsTraceD){ if (lpRect) - OutTrace("ClipCursor: PROXED rect=(%d,%d)-(%d,%d) ret=%d\n", + OutTrace("GetClipCursor: PROXED rect=(%d,%d)-(%d,%d) ret=%d\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, ret); else - OutTrace("ClipCursor: PROXED rect=(NULL) ret=%d\n", ret); + OutTrace("GetClipCursor: PROXED rect=(NULL) ret=%d\n", ret); } return ret; } @@ -1443,7 +1439,7 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect) lpRect->right = dxw.GetScreenWidth(); lpRect->bottom = dxw.GetScreenHeight(); } - OutTraceD("ClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n", + OutTraceD("GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, TRUE); } diff --git a/dll/wndproc.cpp b/dll/wndproc.cpp index ffdff0c..9a68ce8 100644 --- a/dll/wndproc.cpp +++ b/dll/wndproc.cpp @@ -30,7 +30,8 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc) { int StackIdx; // wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses .... - if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return; + // v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them! + //if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return; //OutTraceD("DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\n", hwnd, wndproc); // try update first... for(StackIdx=0; StackIdxm_OutDXTrace); DDX_Check(pDX, IDC_IMPORTTABLE, cTarget->m_ImportTable); DDX_Check(pDX, IDC_OUTREGISTRY, cTarget->m_RegistryOp); + DDX_Check(pDX, IDC_TRACEHOOKS, cTarget->m_TraceHooks); if(gbDebug){ DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed); DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog); diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index 71dcc11..a58b0d3 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -37,6 +37,7 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages); + DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 80eeeed..ea55ce9 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -52,6 +52,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_EmulateRegistry = FALSE; // default true !! m_FullScreenOnly = FALSE; m_FilterMessages = FALSE; + m_PeekAllMessages = FALSE; m_NoBanner = FALSE; m_StartDebug = FALSE; m_FilePath = _T(""); diff --git a/host/TargetDlg.h b/host/TargetDlg.h index a296bd2..058f782 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -39,6 +39,7 @@ public: BOOL m_AssertDialog; BOOL m_ImportTable; BOOL m_RegistryOp; + BOOL m_TraceHooks; BOOL m_HandleDC; BOOL m_UnNotify; BOOL m_Windowize; @@ -46,6 +47,7 @@ public: BOOL m_EmulateRegistry; BOOL m_FullScreenOnly; BOOL m_FilterMessages; + BOOL m_PeekAllMessages; BOOL m_NoBanner; BOOL m_StartDebug; BOOL m_HookEnabled; diff --git a/host/dxwnd.ini b/host/dxwnd.ini deleted file mode 100644 index f677540..0000000 --- a/host/dxwnd.ini +++ /dev/null @@ -1,5 +0,0 @@ -[window] -posx=1330 -posy=241 -sizx=320 -sizy=200 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index a6286a82bb491d7d174825802d895ef679c7101d..c7f92be820a531b2cc0a1401083c78f8b9f2e984 100644 GIT binary patch delta 2559 zcmZ{l3s6+&701uLi-eaHP@cjR%=Yt6tP)jVninhOU8C=Y>3U!*iJK{-}l`MY^Le` zhW(xMKj(Wt=-!=jYER0+RmI5(pnX@`WZ1l_!PZe1+T74)_8ZOqvXz**C0FVk*m)zp ztIA((clZ>~I>qa?u2#HYGMOu&55R7#^1Bsft<~X(ifH{PM@?D|uL#Yv-YJsG zAtHSDv|xc#su0&%1^imoW_z<3;Z;@By0e(zHC34HF2CGjhSNf=wJUWF*J|FUr5t{P zvBTN&Zvm$cmq@=uS4NTTj7Ve4rTF>0d1A$KI4e{x_`N=>$0y_!@cVe#92# z7cG$RRaY#Cy-$>?HKhd@d*Y1@o)vf5n(^gLOSJ?;rYp z7jSMsYfIXP?io8BF`!KWzaLD&k$_&Ufo}&>u_#!md8y5**brQxd3NT#H0??AFdDpH z>t{ZuHBZ~wxMs%A!R{G57vGw(^CAh`!-)$*62N`z6|8|ec#Lss>LI287&DR)TNbm% z&$cX;s_<_u#dxxH6SlNw&3HXha-=eRuTGl8#`gTw++B$anlUbQ!9~!TJon=OR*RM*P%Rb1{NdZ(wD{=en zv^B@!$It>P5M=)!rlxj-8@9003?l}6YmtP%)7i0M0F7xVca|B`h0 z{HQ^i%Z6H+^gZ|iYm7ZPpN~E-TOIi9*eba-jIWQqlJXMl0hb!=j6IOaw?qAOAh|Q( zrx=MX&1?;SSslPnVx_WDg?ZykWV;7#E6sa%jK8*HTxvhe zwre`Qlm4+wE|r&iamb^ebF2uUfgWj-i@U_(X#L8=F;h852XLB=ZT0{?IDLR-&cmb! zV6r_v$M8QnscbZb?7{Sb0`=_I4o>=@O}<}lxJc19xsdeja*q59)xn9OtT_*`<2Fcv zcDY#2cn6)A3g)m^9R5YWMs{0E@S;Py-Odp%X;Y)C3mn$?-d+q4{I%K^(_#qwVgpX;6^Qk-Z5$ByxDdpRYop)&o=g3`J z!};jHDad*7bK1vwJ&b=Ov1AcE@Of zGvlw6-pN>amkgYFN#x}0ol7CkK0Wnt-n@_cIq$5XDCg;Fn&8}BN9oTn{@p?b&Xcv| z>wxS{--F!nY5F71jE$N*%ziLqt4eR)7N&%`Tqq+ CSn6;9 delta 2225 zcmZuxYfzMB6h7~}&g#hKtSAdC2x{g99b6WKg-oJ$O-5w5h2Q|#8%iMbGK zPDqG>9RR6Tx7C(r%d{zy8NO4b6suLKV_~OK+j1OfcBelR2fGx_=}K2J39wtK9o>Qj z>ixn?YbC<>Qj2#xUaV#@fzKaQm$Ssc9>4I?dKNSMfbZ%D1n*U>%#@7D?#ZcXX>x5# zBJ9H@`XPKj;KhyM!3UJc#MCsKdy?HgSw<4$;2<{Y4Y@xmo|N4gnRbWb#ls;*O|!q_ z&PugqD`FxX?h$)7YcZMNCq)()(G#|qV&DkA**`e=sNyLr%N>eA7E>(zjC1=N_%XoS zo5I76E0IiRO0L^!6I)QO(_*r~3BX7)@RNYa6l6H1#4=K{Y;u|$6k~$Zp9O{)8WhKx zlbvoAyHy-BoWYpDaO~bkm4~d6!xHT}CoyVBXLF@va z3k)`1RD#N`Q>QrW&P+MfY=TC>%FQ7YE-AJ{JdAG3443_y`UEWIShxbKr`SMOCtCUz=q9{yajOI>IildpLoOBEnnk+y*Z@kKar=DTsd~H*89776*`$ZOt*#*Zi z${nTFqkSK^+qqg4VA1r4DxZg*8HZI~=}RrNtJ`6lu>O6uo7XZ-nHqruX6CEOZ?Ssj zQ;N{F zhX&|-arNVL*!Q@6We~Qn4eS#KoB;zJde)ZsEbDfU7a89lXTQ>kl|Q;RmJP-F)&#tF zEn4Up-c&51y2&Y_#Sf*8zCB2h=1Km=1m+|v_>vaWq!T{|oOT%5G~GaOBW%J~TXrxOhs5!zXU0Q4@L;EEVk#QdSdh+>5(A-~?Dz{&HhQre89WX|agu zE@RDQBRM30a+$IgiOQK#t(&A>tVF3 zOqzOt!c~+fL_TjLRY73Uj}fl9mf`{2)&D2r+)B5G&)T zLW<$DIE^jhp}p4#agHdKi$XhI6d^^_EE2q|h&m-cDk5X0=*TbTR9YfJAl}L963P=I vubWF15~r0?jSRJva=JfHj9nonwJZ>YM|4z+*R#??oiZ_UA*a_D@zDPO+Fqdg diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index c027695..4e41013 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -277,24 +277,26 @@ BEGIN CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,150,124,10 CONTROL "Fullscreen only",IDC_FULLSCREENONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,150,114,10 CONTROL "Filter offending messages",IDC_FILTERMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,162,114,10 + CONTROL "Peek all messages in queue",IDC_PEEKALLMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,162,114,10 END IDD_TAB_LOG DIALOGEX 0, 0, 300, 240 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "dxwnd.log logs",IDC_STATIC,7,3,129,131 + GROUPBOX "dxwnd.log logs",IDC_STATIC,7,3,129,145 CONTROL "Enable Trace",IDC_LOGENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,25,73,12 CONTROL "DxWnd",IDC_OUTTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,73,12 CONTROL "DirectX trace",IDC_OUTDXTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,58,73,12 CONTROL "Win Events",IDC_OUTWINMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,70,73,12 CONTROL "Cursor/Mouse",IDC_CURSORTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,82,73,12 CONTROL "Import Table",IDC_IMPORTTABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,94,73,12 - GROUPBOX "debug mode only",IDC_STATIC,7,139,130,94 - CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,152,73,12 - CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,164,73,12 + GROUPBOX "debug mode only",IDC_STATIC,7,154,130,79 + CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,165,73,12 + CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,177,73,12 CONTROL "Debug",IDC_OUTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,106,73,12 CONTROL "Registry op.",IDC_OUTREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,118,73,12 + CONTROL "Hook op.",IDC_TRACEHOOKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,130,73,12 END IDD_TAB_DIRECTX DIALOGEX 0, 0, 300, 240 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index eeb1246baaaeadbaf28f754458c56888cbe9184a..970afbbe11aa250d3e086e90f4b4ffea3b308f24 100644 GIT binary patch delta 3930 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 diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 69a50f4..1b14c54 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -115,6 +115,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG; if(dlg->m_FullScreenOnly) t->flags3 |= FULLSCREENONLY; if(dlg->m_FilterMessages) t->flags3 |= FILTERMESSAGES; + if(dlg->m_PeekAllMessages) t->flags3 |= PEEKALLMESSAGES; t->flags &= ~EMULATEFLAGS; switch(dlg->m_DxEmulationMode){ @@ -144,6 +145,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG; if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE; if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY; + if(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS; if(dlg->m_HandleDC) t->flags |= HANDLEDC; if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS; if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES; @@ -245,6 +247,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0; dlg->m_FullScreenOnly = t->flags3 & FULLSCREENONLY ? 1 : 0; dlg->m_FilterMessages = t->flags3 & FILTERMESSAGES ? 1 : 0; + dlg->m_PeekAllMessages = t->flags3 & PEEKALLMESSAGES ? 1 : 0; dlg->m_DxEmulationMode = 0; if(t->flags & EMULATEBUFFER) dlg->m_DxEmulationMode = 1; @@ -268,6 +271,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0; dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0; dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0; + dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0; dlg->m_HandleDC = t->flags & HANDLEDC ? 1 : 0; dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0; dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;