From fc2d6f47ff95fb9cfb0d9b38d60427a4f870d5a4 Mon Sep 17 00:00:00 2001 From: gho tik Date: Tue, 22 Mar 2016 12:45:29 -0400 Subject: [PATCH] v2_03_59_src Former-commit-id: 9721d68addc86a0ea6cba16faeb0c09d802c30b7 --- build/dxwnd.dll | 2 +- build/dxwnd.exe | 4 +- build/exports/Carmageddon 2 (GLIDE).dxw | 17 +- build/exports/Carmageddon 2 (SW).dxw | 17 +- .../exports/Dylan Dog Horror at Luna Park.dxw | 29 ++ build/exports/Imperialism II.dxw | 5 +- ...Indiana Jones and the Infernal Machine.dxw | 29 ++ build/exports/SPWaW 2016.dxw | 29 ++ build/exports/Settlers 3, the.dxw | 9 +- build/exports/Star Wars Episode I Racer.dxw | 6 +- dll/ddraw.cpp | 3 +- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 298496 -> 304640 bytes host/ShimsDialog.cpp | 432 ++++++++++++++++++ host/ShimsDialog.h | 27 ++ host/TabHook.cpp | 48 ++ host/TabHook.h | 49 ++ host/TabProgram.cpp | 6 - host/TabSysLibs.cpp | 3 - host/TargetDlg.cpp | 2 + host/dxTabCtrl.cpp | 5 +- host/dxTabCtrl.h | 2 +- host/dxwndhost.aps | Bin 136924 -> 166212 bytes host/dxwndhost.rc | Bin 111312 -> 112756 bytes host/dxwndhost.vs2008.suo | Bin 92672 -> 92672 bytes host/dxwndhost.vs2008.vcproj | 12 + host/dxwndhostView.cpp | 21 +- host/dxwndhostView.h | 1 + host/host.aps | Bin 47496 -> 47504 bytes host/resource | Bin 39294 -> 39752 bytes 30 files changed, 734 insertions(+), 26 deletions(-) create mode 100644 build/exports/Dylan Dog Horror at Luna Park.dxw create mode 100644 build/exports/Indiana Jones and the Infernal Machine.dxw create mode 100644 build/exports/SPWaW 2016.dxw create mode 100644 host/ShimsDialog.cpp create mode 100644 host/ShimsDialog.h create mode 100644 host/TabHook.cpp create mode 100644 host/TabHook.h diff --git a/build/dxwnd.dll b/build/dxwnd.dll index d0fdae3..95dafc8 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22f399a262f8cb3071bb10d366ee021b542e9c13b6122b70370ecc319b970489 +oid sha256:5a1ab8f9170fce5bf01058d18f19fba15c7014eb872a8e7a2ec36f4e2ea399bc size 628736 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 2be50fe..62116aa 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:393da7c339ffda956ed69f340401cd4dfeef582666d42a812699a641e698d691 -size 558080 +oid sha256:9f7c9d1fe78caeb4054e32420034aba59350b965fb86959352d22a1a46a32ea8 +size 555520 diff --git a/build/exports/Carmageddon 2 (GLIDE).dxw b/build/exports/Carmageddon 2 (GLIDE).dxw index d5dbd86..d497a20 100644 --- a/build/exports/Carmageddon 2 (GLIDE).dxw +++ b/build/exports/Carmageddon 2 (GLIDE).dxw @@ -5,10 +5,10 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=134217730 -flagg0=1208025088 +flag0=-2013265866 +flagg0=1207959552 flagh0=20 -flagi0=12 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,14 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +notes0= +registry0= +flagj0=0 +flagk0=32768 +flagl0=0 +flagm0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Carmageddon 2 (SW).dxw b/build/exports/Carmageddon 2 (SW).dxw index a94d107..286cdf2 100644 --- a/build/exports/Carmageddon 2 (SW).dxw +++ b/build/exports/Carmageddon 2 (SW).dxw @@ -5,10 +5,10 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=671088674 -flagg0=1208025088 +flag0=671088694 +flagg0=1207959552 flagh0=33562644 -flagi0=12 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,14 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +notes0= +registry0= +flagj0=0 +flagk0=32768 +flagl0=0 +flagm0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Dylan Dog Horror at Luna Park.dxw b/build/exports/Dylan Dog Horror at Luna Park.dxw new file mode 100644 index 0000000..ffd6c95 --- /dev/null +++ b/build/exports/Dylan Dog Horror at Luna Park.dxw @@ -0,0 +1,29 @@ +[target] +title0=Dylan Dog Horror at Luna Park +path0=D:\Games\DylanDog\hlp.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1744830464 +flagh0=1048596 +flagi0=138412038 +flagj0=5248 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Imperialism II.dxw b/build/exports/Imperialism II.dxw index d9d16fd..7689444 100644 --- a/build/exports/Imperialism II.dxw +++ b/build/exports/Imperialism II.dxw @@ -28,5 +28,8 @@ launchpath0= notes0= registry0= flagj0=0 -flagk0=0 +flagk0=32768 swapeffect0=0 +flagl0=4 +flagm0=0 +maxddinterface0=7 diff --git a/build/exports/Indiana Jones and the Infernal Machine.dxw b/build/exports/Indiana Jones and the Infernal Machine.dxw new file mode 100644 index 0000000..9a9ad47 --- /dev/null +++ b/build/exports/Indiana Jones and the Infernal Machine.dxw @@ -0,0 +1,29 @@ +[target] +title0=Indiana Jones and the Infernal Machine +path0=D:\Games\Indiana Jones Infernal Machine\Resource\Indy3D.exe +launchpath0= +module0= +opengllib0= +notes0=Beware!\nThe game on nowadays computers works only using a no-cd crack \nand a dedicated installer for 64 bit platforms! +registry0= +ver0=0 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=-2009071610 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/SPWaW 2016.dxw b/build/exports/SPWaW 2016.dxw new file mode 100644 index 0000000..1fd8f86 --- /dev/null +++ b/build/exports/SPWaW 2016.dxw @@ -0,0 +1,29 @@ +[target] +title0=SPWaW 2016 +path0=D:\Games\The Depot\SPWaW 2016\mech.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=1 +flag0=49186 +flagg0=1207992338 +flagh0=532 +flagi0=18907136 +flagj0=1152 +flagk0=0 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=1340 +sizy0=1000 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Settlers 3, the.dxw b/build/exports/Settlers 3, the.dxw index bc1c9de..79a8396 100644 --- a/build/exports/Settlers 3, the.dxw +++ b/build/exports/Settlers 3, the.dxw @@ -9,7 +9,7 @@ flag0=-1476394974 flagg0=1207959618 flagh0=20 flagi0=4194308 -tflag0=64 +tflag0=0 initx0=0 inity0=0 minx0=0 @@ -26,3 +26,10 @@ winver0=0 maxres0=-1 launchpath0= flagj0=128 +notes0= +registry0= +flagk0=0 +flagl0=0 +flagm0=0 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/exports/Star Wars Episode I Racer.dxw b/build/exports/Star Wars Episode I Racer.dxw index 235bbd3..e39d065 100644 --- a/build/exports/Star Wars Episode I Racer.dxw +++ b/build/exports/Star Wars Episode I Racer.dxw @@ -27,5 +27,9 @@ maxres0=0 launchpath0= notes0= flagj0=128 -flagk0=0 +flagk0=65536 swapeffect0=0 +registry0= +flagl0=0 +flagm0=0 +maxddinterface0=7 diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index c2ba941..4567e6e 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -3119,7 +3119,8 @@ static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreate // seems to fix problems in "Warhammer 40K Rites Of War" that uses a ddraw session after reaching 0 refcount. // v2.2.84: avoid the extra referenced in non windowed mode since it causes the window shift reported by gsky916 // for Wind Fantasy SP. - if((dxw.dwDDVersion==1) && dxw.Windowize) lpdd->AddRef(); + // v2.3.59: same extra reference is needed by "Wahammer Chaos Gate" that uses ddraw interface release 2 + if((dxw.dwDDVersion>=2) && dxw.Windowize) lpdd->AddRef(); return DD_OK; } diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 9f17ce0..54db3fb 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.58" +#define VERSION "2.03.59" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index b46f3b026e2543c0fc27f0d726e9abb41fbdf7d9..57f1b563458b9ccf17a1dd33b7cc07b1373bce11 100644 GIT binary patch delta 7450 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 delta 3914 zcmcIneNa@_6@Ta6yX*2H?5xX*xGu{A%LWKtm9_+M*~LZhV_;P@Mi~@BQcawM8fIcs zW7n42#Gxt6vwPA^f@thE$r!ta88(vCtj6i&s|waXlFl?ks0EYh5MrHa%w(kJz6Zpa zPG{QA^f8Zp@7;IL=kNT^dEpN%;pZ*!y}}q;o&U*>ZgroyVz4TTVpk)5C2H6t2KO60 zz&m2gV9smS zcL0RkV9cczGYo!})y(9QO|8tc4(`u>pBdpQEoEvi9jB`gYX_fLddUt(`DC!G;-~=M zV9Kf@klW0v-`9$@1K^Z*4(yv^WmvjbY*igK&KJWqaSw#Ypmzd3PkUZUl(82?FIKnLOBIZp%p?txM1rxM8e2itw7(oUeA0^@5dM?oK z19PkzSjzoMC;cf(qrPa)NH4p)q#z+8)(r=n5&6LjD1cJoH08}$Li(f3`h3GW%0_@#L zPQ4xkyNrMf%Yv{%-DdNsV+Z{7Y%~a)@#rK3ar#p-xxve9un{4hZ^UQ*3}&d)gXOQM zceU5NXSo^Uiy#$t;Q1^WgfrZVcAu~sPLY+{RA{ePOF+9SX;bqKplQ-Yw^qFR|nb5L9?O9?&=LDHMS0Fx29^ozU z6Z|BXU~ujXCoRq3kXS7p+6u`d7{1J^dA0IrVrC2uF}2U2W0Yz0oSs0CAbnDs=dS1&->W`P(GV#`HM1V2_pRgKll;vC5?N zGi&rZP^tH^@iaWKo=Boc7E|&))(#Kh@qTvid{G|6Yq{L@jrQBa%o-bDIq;Y)#VWjQ zCO>;a#Cql>X2WvL*F&!WA^1}ZZX0IR*!dMf#Pi$6uyKO{+xlQEeyizomf)&bUgL#a(qz=AEQLx6s7st*qvszo@ z!=n~n4ZYH_!darJwSh?wArX(pQ9064FM3Nzge+edkLXG~rv9*>82iJ2J`$ zG%{OM$O4N;DR30g3Y@+{jH^}nb2peng4u<|H<)Ya3JcrSE4~Um9pa`$a*EY*gCsMf zjNs1b4OT3TDlo{}O_fHj#LoMvG{QRgoRY5XBPwZ$$rtbmg^^SbAoUT6mdkV3vg6!aYXt zCH7=~( zHdrL7`f(KLyaE5TjNG5&e;0oKH5jRaf>`6?^*TSt9o#N6y%mq<@{pb{Dm#m8Y}lJi z25ap|1EdzLgxvf+Jx*>HwS!Zm%!if5R9CXIQ0-{U8OkFUFF5(u=w8vyhX{dhtrYiR zD4*gWp+E^E8oCJ0;FtD3tQA9%gmWSKFEKBEolo_tnJ!6K?LOeZ=|VC`Lljx)(8>0& zi>iV^j^Pq6pi@0`tu6s>J_CuFA`T3viwVS<3mP@{7E3&gvNh6T2fE_CMMn#vN@E8b zc9&4T2++=0DKAhLnVdMbl-nt6R74?u9{Zo>t!NJs3AF#6c@y!Ce1xlUpFi^WT^BPk?e_yG1AueVw73cHvn$d~3 z?h*CW1p@7St(Lijxt(8GEpemaIyDyKsknmDu4nS8e1ag&6gx#B4#dd^N@#`Frl4=W zy_M?pMRSH{4h=`qP zB*T^(V)6HeX{zeLNH1H8BS8=g8g(f+TEg?C&Dz9=8{Xg<$g04-v9ZzDf1et8& z=&Yl9C0JD?{O5R*qiYQffOKz5_%HBeN^}hoDot26jgbEP@g)$*rz{?No!^6}Wed9U z2da#|b=2}`PHlnz&txJyeE5GHP27n-!Tb=rO1Wh|vQs1WBiE>2wBDypu|4@b2YU4J zBD{mfi|6#(rKy)_>#sWNx^XO>gq)hBafcStv2l|4jM%wCo9|$O>?>=rHIIPY`yR`H zhcR=4@6tvP25(5s>^iCbi;mrh>w>tO^IH4n( z8i5V{H<& zt|v*+@)aw~6(vhy#^-f{dG{NFF|D%7uQSCPTP0}A-83NmMjwijK2df@{GLjoNoKPi zB^LUxMYuxp3Pp`;`?h>ozCn$F95+TE7lJZ9>7rS~y yDLUK4i$)-|GZy*K=p<#^l*CtUVr?N!RKdh<`Esn-Pn diff --git a/host/ShimsDialog.cpp b/host/ShimsDialog.cpp new file mode 100644 index 0000000..bd65761 --- /dev/null +++ b/host/ShimsDialog.cpp @@ -0,0 +1,432 @@ +// ShimsDialog.cpp : implementation file +// + +#include "stdafx.h" +#include "dxwndhost.h" +#include "ShimsDialog.h" + +// http://msdn2.microsoft.com/en-us/library/bb432457 +// PDB WINAPI SdbOpenDatabase( +// LPCTSTR pwszPath, +// PATH_TYPE eType +//); +// What is PDB!? Assuming it is a pointer to somewhere => "void*" +typedef void* PDB; + +// http://msdn2.microsoft.com/en-us/library/bb432389.aspx +typedef enum _PATH_TYPE +{ + DOS_PATH, + NT_PATH +}PATH_TYPE; + +// http://msdn2.microsoft.com/en-us/library/bb432488 +typedef DWORD TAGID; +#define TAGID_NULL (0) +#define TAGID_ROOT (0) + +// TAG !? +typedef DWORD TAG; + +// http://msdn2.microsoft.com/en-us/library/bb432489 +typedef DWORD TAGREF; +#define TAGREF_NULL (0) +#define TAGREF_ROOT (0) + +// http://msdn2.microsoft.com/en-us/library/bb432490 +// TAG-Types: +#define TAG_TYPE_NULL 0x1000 +#define TAG_TYPE_BYTE 0x2000 +#define TAG_TYPE_WORD 0x3000 +#define TAG_TYPE_DWORD 0x4000 +#define TAG_TYPE_QWORD 0x5000 +#define TAG_TYPE_STRINGREF 0x6000 +#define TAG_TYPE_LIST 0x7000 +#define TAG_TYPE_STRING 0x8000 +#define TAG_TYPE_BINARY 0x9000 + +// It seems that this type is "masked" +#define TAG_TYPE_MASK 0xF000 + +// http://msdn2.microsoft.com/en-us/library/bb432487 +#define TAG_APP_NAME_RC_ID (0x24 | TAG_TYPE_DWORD) +#define TAG_VENDOR_NAME_RC_ID (0x25 | TAG_TYPE_DWORD) +#define TAG_SUMMARY_MSG_RC_ID (0x26 | TAG_TYPE_DWORD) +#define TAG_DESCRIPTION_RC_ID (0x28 | TAG_TYPE_DWORD) +#define TAG_PARAMETER1_RC_ID (0x29 | TAG_TYPE_DWORD) + +#define TAG_EXE_ID (0x4 | TAG_TYPE_BINARY) +#define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY) +#define TAG_FIX_ID (0x10 | TAG_TYPE_BINARY) +#define TAG_APP_ID (0x11 | TAG_TYPE_BINARY) +#define CONTEXT_PLATFORM_ID (0x8 | TAG_TYPE_BINARY) + + +typedef struct TAG_RC_Entry +{ + DWORD tag; + LPCWSTR szName; +} TAG_RC_Entry; + +// The following tags returns an reference to an resource... (Vista and later) +static TAG_RC_Entry s_TagRcEntries[] = +{ + {TAG_APP_NAME_RC_ID, L"APP_NAME_RC_ID"}, + {TAG_VENDOR_NAME_RC_ID, L"VENDOR_NAME_RC_ID"}, + {TAG_SUMMARY_MSG_RC_ID, L"SUMMARY_MSG_RC_ID"}, + {TAG_DESCRIPTION_RC_ID, L"DESCRIPTION_RC_ID"}, // at least for this one, MS forgot to add the mapping from TAG to name (SdbTagToString) + {TAG_PARAMETER1_RC_ID, L"PARAMETER1_RC_ID"}, +}; + +// The following Tags could be displayed as GUIDs (if the len is 0x10) +static DWORD s_TagGuids[] = +{ + TAG_EXE_ID, + TAG_DATABASE_ID, + TAG_FIX_ID, + TAG_APP_ID, + CONTEXT_PLATFORM_ID, +}; + +// APIs: + +// http://msdn.microsoft.com/en-us/library/bb432457.aspx +//PDB WINAPI SdbOpenDatabase( +// __in LPCTSTR pwszPath, +// __in PATH_TYPE eType +//); +typedef PDB (WINAPI *PSdbOpenDatabase)( + LPCWSTR pwszPath, // Docu wrong? LPCTSTR shouldn't it be LPCWSTR!? + PATH_TYPE eType +); +PSdbOpenDatabase pSdbOpenDatabase = NULL; + +// http://msdn.microsoft.com/en-us/library/cc895520 +//void WINAPI SdbCloseDatabase( +// __inout PDB pdb +//); +typedef VOID (WINAPI *PSdbCloseDatabase)( + PDB handle // assuming the passed handle... +); +PSdbCloseDatabase pSdbCloseDatabase = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432446 +//TAGID WINAPI SdbGetFirstChild( +// PDB pdb, +// TAGID tiParent +//); +typedef TAGID (WINAPI *PSdbGetFirstChild)( + PDB pdb, + TAGID tiParent +); +PSdbGetFirstChild pSdbGetFirstChild = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432449 +//TAGID WINAPI SdbGetNextChild( +// PDB pdb, +// TAGID tiParent, +// TAGID tiPrev +//); +typedef TAGID (WINAPI *PSdbGetNextChild)( + PDB pdb, + TAGID tiParent, + TAGID tiPrev +); +PSdbGetNextChild pSdbGetNextChild = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432451 +//TAG WINAPI SdbGetTagFromTagID( +// PDB pdb, +// TAGID tiWhich +//); +typedef TAG (WINAPI *PSdbGetTagFromTagID)( + PDB pdb, + TAGID tiWhich +); +PSdbGetTagFromTagID pSdbGetTagFromTagID = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432470 +//LPCTSTR WINAPI SdbTagToString( +// TAG tag +//); +typedef LPCWSTR (WINAPI *PSdbTagToString)( // LPCTSTR => LPCWSTR !? + TAG tag +); +PSdbTagToString pSdbTagToString = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432464 +//BOOL WINAPI SdbReadStringTag( +// PDB pdb, +// TAGID tiWhich, +// LPTSTR pwszBuffer, +// DWORD cchBufferSize +//); +typedef BOOL (WINAPI *PSdbReadStringTag)( + PDB pdb, + TAGID tiWhich, + LPTSTR pwszBuffer, + DWORD cchBufferSize +); +PSdbReadStringTag pSdbReadStringTag = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432450.aspx +//LPWSTR WINAPI SdbGetStringTagPtr( +// PDB pdb, +// TAGID tiWhich +//); +typedef LPWSTR (WINAPI *PSdbGetStringTagPtr)( + PDB pdb, + TAGID tiWhich +); +PSdbGetStringTagPtr pSdbGetStringTagPtr = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432462.aspx +//DWORD WINAPI SdbReadDWORDTag( +// PDB pdb, +// TAGID tiWhich, +// DWORD dwDefault +//); +typedef DWORD (WINAPI *PSdbReadDWORDTag)( + PDB pdb, + TAGID tiWhich, + DWORD dwDefault +); +PSdbReadDWORDTag pSdbReadDWORDTag = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432463.aspx +//ULONGLONG WINAPI SdbReadQWORDTag( +// PDB pdb, +// TAGID tiWhich, +// ULONGLONG qwDefault +//); +typedef ULONGLONG (WINAPI *PSdbReadQWORDTag)( + PDB pdb, + TAGID tiWhich, + ULONGLONG qwDefault +); +PSdbReadQWORDTag pSdbReadQWORDTag = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432455 +//PDB WINAPI SdbOpenApphelpDetailsDatabase( +// LPCWSTR pwsDetailsDatabasePath +//); +typedef PDB (WINAPI *PSdbOpenApphelpDetailsDatabase)( + LPCWSTR pwsDetailsDatabasePath +); +PSdbOpenApphelpDetailsDatabase pSdbOpenApphelpDetailsDatabase = NULL; + +// http://msdn2.microsoft.com/en-us/library/bb432456 +//HMODULE WINAPI SdbOpenApphelpResourceFile( +// LPCWSTR pwszACResourceFile +//); +typedef HMODULE (WINAPI *PSdbOpenApphelpResourceFile)( + LPCWSTR pwszACResourceFile +); +PSdbOpenApphelpResourceFile pSdbOpenApphelpResourceFile = NULL; + +// http://msdn.microsoft.com/en-us/library/bb432443 +//PVOID WINAPI SdbGetBinaryTagData( +// __in PDB pdb, +// __in TAGID tiWhich +//); +typedef PVOID (WINAPI *PSdbGetBinaryTagData)( + PDB pdb, + TAGID tiWhich +); +PSdbGetBinaryTagData pSdbGetBinaryTagData = NULL; + +// ??? +//DWORD WINAPI SdbGetTagDataSize( +// __in PDB pdb, +// __in TAGID tiWhich +//); +typedef DWORD (WINAPI *PSdbGetTagDataSize)( + PDB pdb, + TAGID tiWhich +); +PSdbGetTagDataSize pSdbGetTagDataSize = NULL; + +// http://msdn.microsoft.com/en-us/library/bb432459 +#define SDB_MAX_EXES 16 +#define SDB_MAX_LAYERS 8 +#define SDB_MAX_SDBS 16 +typedef struct tagSDBQUERYRESULT { + TAGREF atrExes[SDB_MAX_EXES]; + DWORD adwExeFlags[SDB_MAX_EXES]; + TAGREF atrLayers[SDB_MAX_LAYERS]; + DWORD dwLayerFlags; + TAGREF trApphelp; + DWORD dwExeCount; + DWORD dwLayerCount; + GUID guidID; + DWORD dwFlags; + DWORD dwCustomSDBMap; + GUID rgGuidDB[SDB_MAX_SDBS]; +} SDBQUERYRESULT, *PSDBQUERYRESULT; + +typedef void* HSDB; + +// http://msdn.microsoft.com/en-us/library/bb432448 +typedef BOOL (WINAPI *PSdbGetMatchingExe)( + HSDB hSDB, + LPCWSTR szPath, + LPCWSTR szModuleName, + LPCWSTR pszEnvironment, + DWORD dwFlags, + PSDBQUERYRESULT pQueryResult +); +PSdbGetMatchingExe pSdbGetMatchingExe = NULL; + +#define SDBGMEF_IGNORE_ENVIRONMENT 1 + +#define SHIMREG_DISABLE_SHIM 0x1 +#define SHIMREG_DISABLE_APPHELP 0x2 +#define SHIMREG_APPHELP_NOUI 0x4 +#define SHIMREG_APPHELP_CANCEL 0x10000000 +#define SHIMREG_DISABLE_SXS 0x10 +#define SHIMREG_DISABLE_LAYER 0x20 +#define SHIMREG_DISABLE_DRIVER 0x40 + +typedef void (WINAPI* PSdbReleaseMatchingExe)( + HSDB hSDB, + TAGREF trExe +); +PSdbReleaseMatchingExe pSdbReleaseMatchingExe = NULL; + + + +// CShimsDialog dialog + +IMPLEMENT_DYNAMIC(CShimsDialog, CDialog) + +CShimsDialog::CShimsDialog(CWnd* pParent /*=NULL*/, char *path) + : CDialog(CShimsDialog::IDD, pParent) +{ + //ExePath = (LPWSTR)malloc((strlen(path)+1)*sizeof(WCHAR)); + //MultiByteToWideChar(CP_ACP, 0, path, -1, ExePath, strlen(path)); + ExePath = path; + +} + +CShimsDialog::~CShimsDialog() +{ + free(ExePath); + ExePath=NULL; +} + +void CShimsDialog::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CShimsDialog, CDialog) +END_MESSAGE_MAP() + +#define IDStatusTIMER 1 + +// CShimsDialog message handlers + +BOOL CShimsDialog::OnInitDialog() +{ + CDialog::OnInitDialog(); + char *MatchExe(char *); + this->SetDlgItemText(IDC_STATUSINFO, MatchExe(ExePath)); + return TRUE; // return TRUE unless you set the focus to a control +} + +void CShimsDialog::OnOK() +{ + CDialog::OnOK(); +} + +void Flags2String(DWORD dwFlags, char *szFlags, size_t flagsLen) +{ + szFlags[0] = 0; + if (dwFlags & SHIMREG_DISABLE_SHIM) strcat_s(szFlags, flagsLen, "Disable-Shim,"); + if (dwFlags & SHIMREG_DISABLE_APPHELP) strcat_s(szFlags, flagsLen, "Disable-Apphelp,"); + if (dwFlags & SHIMREG_APPHELP_NOUI) strcat_s(szFlags, flagsLen, "Apphelp-NoUI,"); + if (dwFlags & SHIMREG_APPHELP_CANCEL) strcat_s(szFlags, flagsLen, "Apphelp-Cancel,"); + if (dwFlags & SHIMREG_DISABLE_SXS) strcat_s(szFlags, flagsLen, "Disable-SxS,"); + if (dwFlags & SHIMREG_DISABLE_LAYER) strcat_s(szFlags, flagsLen, "Disable-Layer,"); + if (dwFlags & SHIMREG_DISABLE_DRIVER) strcat_s(szFlags, flagsLen, "Disable-Driver,"); + + if (szFlags[strlen(szFlags)-1]==',') szFlags[strlen(szFlags)-1]=0; +} + +char * MatchExe(char *FileName) +{ + SDBQUERYRESULT result; + static char sBuf[10000]; + LPWSTR szFileName = (LPWSTR)malloc((strlen(FileName)+1)*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, FileName, -1, szFileName, strlen(FileName)); + + HINSTANCE hAppHelp = LoadLibrary(_T("apphelp.dll")); + + pSdbOpenDatabase = (PSdbOpenDatabase) GetProcAddress(hAppHelp, "SdbOpenDatabase"); + pSdbCloseDatabase = (PSdbCloseDatabase) GetProcAddress(hAppHelp, "SdbCloseDatabase"); + pSdbGetFirstChild = (PSdbGetFirstChild) GetProcAddress(hAppHelp, "SdbGetFirstChild"); + pSdbGetNextChild = (PSdbGetNextChild) GetProcAddress(hAppHelp, "SdbGetNextChild"); + pSdbGetTagFromTagID = (PSdbGetTagFromTagID) GetProcAddress(hAppHelp, "SdbGetTagFromTagID"); + pSdbTagToString = (PSdbTagToString) GetProcAddress(hAppHelp, "SdbTagToString"); + pSdbGetStringTagPtr = (PSdbGetStringTagPtr) GetProcAddress(hAppHelp, "SdbGetStringTagPtr"); + //pSdbReadStringTag = (PSdbReadStringTag) GetProcAddress(hAppHelp, "SdbReadStringTag"); + pSdbReadDWORDTag = (PSdbReadDWORDTag) GetProcAddress(hAppHelp, "SdbReadDWORDTag"); + pSdbReadQWORDTag = (PSdbReadQWORDTag) GetProcAddress(hAppHelp, "SdbReadQWORDTag"); + //pSdbOpenApphelpDetailsDatabase = (PSdbOpenApphelpDetailsDatabase) GetProcAddress(hAppHelp, "SdbOpenApphelpDetailsDatabase"); + pSdbOpenApphelpResourceFile = (PSdbOpenApphelpResourceFile) GetProcAddress(hAppHelp, "SdbOpenApphelpResourceFile"); + + pSdbGetBinaryTagData = (PSdbGetBinaryTagData) GetProcAddress(hAppHelp, "SdbGetBinaryTagData"); + pSdbGetTagDataSize = (PSdbGetTagDataSize) GetProcAddress(hAppHelp, "SdbGetTagDataSize"); + pSdbGetMatchingExe = (PSdbGetMatchingExe) GetProcAddress(hAppHelp, "SdbGetMatchingExe"); + pSdbReleaseMatchingExe = (PSdbReleaseMatchingExe) GetProcAddress(hAppHelp, "SdbReleaseMatchingExe"); + + BOOL bRet = pSdbGetMatchingExe(NULL, (LPCWSTR)szFileName, NULL, NULL, 0, &result); + if (bRet){ + sprintf(sBuf, "Shim found for file: %s\n", FileName); + const size_t flagsLen = 1024; + char szFlagsStr[flagsLen]; + Flags2String(result.dwFlags, szFlagsStr, flagsLen); + sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.dwFlags, szFlagsStr); + + if (result.trApphelp != TAGREF_NULL) sprintf(sBuf, "%sAppHelp-Message: 0x%x\n", sBuf, result.trApphelp); + + for(DWORD i=0; iGetParent()->GetParent())); + DDX_Text(pDX, IDC_MODULE, cTarget->m_Module); + DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); + DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug); + DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch); + DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); + DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); + + // Kernel32 + DDX_Radio(pDX, IDC_SONDEFAULT, cTarget->m_SonProcessMode); +} + +BEGIN_MESSAGE_MAP(CTabHook, CDialog) + //{{AFX_MSG_MAP(CTabHook) + // NOTE: the ClassWizard will add message map macros here + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CTabHook message handlers diff --git a/host/TabHook.h b/host/TabHook.h new file mode 100644 index 0000000..10bdf76 --- /dev/null +++ b/host/TabHook.h @@ -0,0 +1,49 @@ +#if !defined(AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_) +#define AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +// TabHook.h : header file +// +#include "resource.h" +#include "TargetDlg.h" + +///////////////////////////////////////////////////////////////////////////// +// CTabHook dialog + +//class CTabHook : public CTargetDlg +class CTabHook : public CDialog +{ +// Construction +public: + CTabHook(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + //{{AFX_DATA(CTabDirectX) + enum { IDD = IDD_TAB_HOOK }; + // NOTE: the ClassWizard will add data members here + //}}AFX_DATA + + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CTabDirectX) + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation +protected: + + // Generated message map functions + //{{AFX_MSG(CTabDirectX) + // NOTE: the ClassWizard will add member functions here + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index daf3cd1..686ae4f 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -41,18 +41,12 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_FILE, cTarget->m_FilePath); DDX_Text(pDX, IDC_LAUNCH, cTarget->m_LaunchPath); DDX_Text(pDX, IDC_TITLE, cTarget->m_Title); - DDX_Text(pDX, IDC_MODULE, cTarget->m_Module); DDX_Check(pDX, IDC_NEEDADMINCAPS, cTarget->m_NeedAdminCaps); DDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify); DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); - DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch); - DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); DDX_Check(pDX, IDC_CONFIRMONCLOSE, cTarget->m_ConfirmOnClose); DDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); - DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); - DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); - DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug); DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio); DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); diff --git a/host/TabSysLibs.cpp b/host/TabSysLibs.cpp index 7e1d469..5825109 100644 --- a/host/TabSysLibs.cpp +++ b/host/TabSysLibs.cpp @@ -52,9 +52,6 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_STRETCHMOVIES, cTarget->m_StretchMovies); DDX_Check(pDX, IDC_FIXMOVIESCOLOR, cTarget->m_FixMoviesColor); DDX_Check(pDX, IDC_BYPASSMCI, cTarget->m_BypassMCI); - - // Kernel32 - DDX_Radio(pDX, IDC_SONDEFAULT, cTarget->m_SonProcessMode); } BEGIN_MESSAGE_MAP(CTabSysLibs, CDialog) diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index bc28eb3..af883d7 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -241,6 +241,8 @@ BOOL CTargetDlg::OnInitDialog() char sCaption[48+1]; LoadString(AfxGetResourceHandle(), DXW_TAB_MAIN, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); + LoadString(AfxGetResourceHandle(), DXW_TAB_HOOK, sCaption, sizeof(sCaption)); + m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_VIDEO, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_INPUT, sCaption, sizeof(sCaption)); diff --git a/host/dxTabCtrl.cpp b/host/dxTabCtrl.cpp index 755f1a1..eab7457 100644 --- a/host/dxTabCtrl.cpp +++ b/host/dxTabCtrl.cpp @@ -22,7 +22,7 @@ #include "dxTabCtrl.h" #include "TabProgram.h" -#include "TabLogs.h" +#include "TabHook.h" #include "TabDirectX.h" #include "TabDirect3D.h" #include "TabInput.h" @@ -31,6 +31,7 @@ #include "TabOpenGL.h" #include "TabCompat.h" #include "TabColor.h" +#include "TabLogs.h" #include "TabRegistry.h" #include "TabNotes.h" #include "TabSysLibs.h" @@ -51,6 +52,7 @@ CDXTabCtrl::CDXTabCtrl() { int i=0; m_tabPages[i++]=new CTabProgram; + m_tabPages[i++]=new CTabHook; m_tabPages[i++]=new CTabWindow; m_tabPages[i++]=new CTabInput; m_tabPages[i++]=new CTabDirectX; @@ -79,6 +81,7 @@ void CDXTabCtrl::Init() m_tabCurrent=0; m_tabPages[i++]->Create(IDD_TAB_PROGRAM, this); + m_tabPages[i++]->Create(IDD_TAB_HOOK, this); m_tabPages[i++]->Create(IDD_TAB_OUTPUT, this); m_tabPages[i++]->Create(IDD_TAB_INPUT, this); m_tabPages[i++]->Create(IDD_TAB_DIRECTX, this); diff --git a/host/dxTabCtrl.h b/host/dxTabCtrl.h index 053db8e..6a9e4cb 100644 --- a/host/dxTabCtrl.h +++ b/host/dxTabCtrl.h @@ -16,7 +16,7 @@ class CDXTabCtrl : public CTabCtrl // Construction public: CDXTabCtrl(); - CDialog *m_tabPages[12]; // this must match the total number of tab elements! + CDialog *m_tabPages[13]; // this must match the total number of tab elements! int m_tabCurrent; int m_nNumberOfPages; enum { IDD = IDC_TABPANEL }; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index b405cf7ddbdd9d3079ebc5c338779148873ce5ea..7ec552da0230139d87fdeedc9eedd232d269d858 100644 GIT binary patch delta 28620 zcmb7t34B}CvG+N0AY^wI+p@DcB?tkX*b?@&1>Wm>j}}_OYhO1C`TjF=?$wp-{>o?S`res2bLMO_ zbLPysdGEgcp1p45hI-w+amLK~&#v^T6X!08uIOEQ;*#@%`G&@Pb6fuSla?R14^+E`virbb52%jmQv>YYTwiyTh7vtRt!Y*xo~?v)}7Av z2UKGqsG60EM+MrIN-bbm3&A4!j(8%b0u2ofs#O4~bSz1LfC>qqI~DB_nxJYEP$Jxu zjC2uIqncYRX2BhRH>r67&*s9po@_kXks|VDb)!sf{HbX`rm z5QKYjsqSzt9wB51=Oq zX(nW&T4;Ipq|=#LHXH4WWiqJ@wWF~~Wz75M>&dgSLX(T4S3qbjLfff7`)#%5;f>drMHAYW7}$iFTT;q&uC;Kt@a_LN}??&72GM6n%zCT&Sn% zrRFre`IiYXCV4pFR@A1>G`C);C+oA!6BlA7oGnCIJ6Ym9bz6h#9P>x;=v^*o%xo-q z%z#*y`k=K*ohyh$ygQzgMbg@=&a=!G#M2hmqRzK4%y0{9RV&PK7eU+$%*u;&jsHTS zpy89{g&IN)>LPRBMY^`?;v%*)8YfgxU1Hw7NY@Rl6jVoeL9D1zLQQHw;E_~!dy405 zs9CKNSTdCkCt_$vPdW;XLhM@9YQc4fGYi@iacW?wRb48;L_90=J`_@y6+u+z6e4U> zmkSi5kq#$g2>{y~)D>pK#kwkTrQnjO_HZ)Es;e!it`Z=0VO1C)OLWbY^+Mpxf@otD+C~MSGSvpN6%^5pLXpD+$);m5OiQQ}b)7(|zGxzW zHH{^!3Pqqhhp|M|_2%5Mb^lQ%PpgroQLG zvJp%t>WpB6x=oOZ~-K-gaKz9g|nwyPeVlgmFP(?5zcbaDgbam}rmLlGV z?zb}_5NuW7H+vw5zT1pkrR(Z`AXJOR7Dk|Bq3Z&T4eB0q^eR2sf3M(k8Q4P_78;Yr zpt{eTwMy5-?-y)18OA)1Lv|17Z7oadeFSQN>?rZ zp+%(*m0VY$?XeQj-o}hUI`|@xJxC2%YaG04NIdJr_5H|(XBj#(XG1@yY z+T%ab6V0;KdY{RU3MDGS3W=n8WEKaSn$=@wJ;<9M7XsTi;Y4q^pPJv)s-7spG&tSX z6jD!`U$53Rlb>>=NXIfB-moE0n{k)wny#Hf01F)L<<14;=0^2n0Z04NnN%N71Q?TN zTv{wute0%KGe&~In*78py;Rp$|J0?h3LwxNQqP*3QB&Q|1Q(7*iDy524Jr!@@pJRi zrMk}l3&AH-aNZJ`ScLi)7UGwiFVi)xzY-*7aV!_52QIK&yJuth!83n);IE2>s2AUpN!bklJM)M7i4CmIO8gW+}U< zGYoWVgL>I~0GVR1*qY&mK}~Z{z`(pJP|~j!)~H?+m{rjcnpPw|%+2fO$jdSN-w=XK z4D&u4vyNM!wMD&Y&b(Y#Rlgji94(*xgjFHx{PF0Mqimg^P9-XEy+|@`1oMpI@;3>*@7?_|LelKUqW)yYTm={B&*t!}wExKe6N;|> z_Dnn~Dk}(M@fQJOLqW4Gh)uy?1rm$Ka{+<`)Zfgit8|tB?}EstlF?X4xQDb=Fwm&} zVeY$1*Bth_izQu3sAly~7Zy)`otIxQ(4xLDpI)V>R(&Z*=rSu!Af)!18CUBXpVDUT z)w-@rYxV%GUPw!8VJLh8&vu0~u_#%OAhsP90<^sb^N+oZV1}8SuGW*A_YnfpOXNym zcJSUJ2)nYcpkf&;l|-sj_Ikl!vl?zbxmx@6erBI*^z^zBLe`TcpLB656D8juh`q^3 zbM!UZKQK!0?0RH-!|50{VWf0|Fgl|JN8o%k4r7>sEev9VGRA`tT_1!M8tZ{ZQfb(~ zAoeTcJkS(0L?X#3-J;|(Er}v2;CR9DiaAaW*{9B@FREG{6p03->-@$b1 zTq#Dai=xSqToxV+t&Y}^nr8yv!OA+4Nb*n=6!vHgwxZ6X7!-wlgX2q}pgNjCke}Zh z)qH-B^`&7Qg{Db;jbWLdB-6C2Fu$iAKuEON+Vr|%UMFnQ7gKdlnz*8SK zU>yv^QtO3cp*msKIvGZ5CBFck2}9cuAvt2bo}uF=wO&t+ew}GZ6XjWZaLk%H>NtSNVH3N$nAMHad zBp>U;CK5Hn?({M^8(tJ+^-I8j>SG|umuHtM0UeX!0zuVp`Sd2EXaNHo)#73SyKQ1b zlRAbG=l4h=8}&?mBK@f`f8VG_>yzYp z>UDVj7C(>XU<%5?u$*kVuS0a=l%l|JmY{k_ENoW3ZB|`}7{;mQCQ#L###BO(k0erv z<`G#d!Xmq`!#X>I@m7oHNux8qO)V`!P!Ns~*pw_|L^cN3)NTn09#Cg89OfjJ$3~io zgX*jzut#8x>g*ycIycoz>oSBW*f~WoLKBEgGQ3$WXLvf=lTKh)#!Ej0V{xw8R?rhG z&cjShyssw@Cnh0vzInT#51G0`t7u;@Rt#DEd~Z0DB+K7|U~WKNV5VQM{Y@8^kZ>4~ z2^!T!C79kYCM=a~QWu-ku7@tW#9WO(b5{-`<8?x$t!khI>8uLEh14qZo9m$&SDP;& z$Gl5RDA^$MPB6HtBkOm3d$jm|tyP zqCeM|KWu`;Ys|>apj>MX-3-cgrfajFHt*UJ-n8}+utukrEWA?+zna2~zk$H<)J(0wCWlA`vJ>#Fwzm2yA?6w7>eMA{Jo+#u%6ro9}DznU~(ub!L0DZ@(QI-q8)d;g1F6lw&7OIm~b0)3YWHaW=AJ z!msr|eM4gWALzsNP#BZ^P=7ciqU}HQ--kpT`JehPLnD5xPaYC+-*5HTheYWA(r*rh z*zq6#rN29LORoG#_YK*S9UuKpe=>BL-+ZE<9~$$}r}~7UG4=nedxx%P^`G=pLzXdJ zf6;A2HfQZ$^qL`y?3n&{9UmHV_UHPFAq6n{i+|CbJ^u=E_ZK=hlwfA~m%5>&nGeKD zPRRbhPvW-tOyigOko||4mZe8_x0`dn)E)nx?mY9_m-^6uPj|kl*{cuw_jD^v@7}M% zZ?*aESK@c6dFLz9UAC#tci_Jl@A6Ikz61U}*%h12S0TG{)9YV_>?$)+e-*l`&BCul zca2&9mFU)(7rzqSS~JS$`wDaFx*gp<--eM#lQ%#ng|+bd-_KHe_tLLYYO`kjsk(4< zhjUQ?v4z4xj=*oh|UokM=*njnt*WFig+Hc4f0M>@jC*2RDe2--yt%+)3EV-qr8*I{7y*xuT|Ar0J@w2A_FRD zQKr)8n>0YtxOg&>=%KR{rM$0=rLRGyS}1LzMKv}fQcQna+FIo=+;o0Npi}-babpXD zobuje|AHsVwIV7>e?vh`4|x#6R?KWBKpaT^f>0ffqvBckTU_$9-6ij%HHn|~71*?8 zW9e`vj18@7P@srMDbA^M1zz^S@4oomk7tEDDF!H;Lm`Z*Rqaqt9ysHOJDiN*Ff=H1 z`vQVBoWZsdrSL*tIK(6#gu`hC08N79jU^iIATj-DyWK3<{@7CZu=1QtA#a8G$*wOX zFI_Q2x7*~|qdQ2M07&f$cl71?7#=$fQY(Z49|tTUc|g%jWzM`oPaZ&{9Bg|g)r({R zpwT*N4AhycvuJ9oVSv+r^miJ5j}W4cKAI|g5Q&`ucN1v|IT?Uj<1*YG`EY~|ORy#| zwp7JHiOM7`%EUflOv)5-NQzFNi0#)3;Ao-9V#4C$64NbI78IhS46V0NSyWb%84RRl z98?1V?0#7iUMjTItO)xv6$;XFvsKS@V6^1yNX~L#wCpg0secY|V6@CIn+bNH1EbYv zg+53P*d+-Sh4sjU2ZPYn`eXzcI-H@NunJiN#_T5;Xgf#$lTBdM2p2^*AV3R=L>URN z)o)`-!I8#e#AI{kIl5|qpGUc6#R`yJV8j?M?NNmRq>eCVidzJ7a=0G(Ba9jAVyxjH zTf&%eE=H^e>akVL`F?; zQTBWi=7IhX-tw)AwXAc76N zdLnts(Sj|rf>Vb^aGF3d(>`Rdk)EV>mcUy9x3ZSNLx5XR89v}JY6HRwD+O>qEmZ(v zN34Vs3~3{&;z3oznl>W(;Uc1lKyqFMz;>{z-0mA7XMvmtCLis>#Ws_*W<<4%a1AtB zZN}BOI8RQWXILeW3S-XHeo%Yz`k=R{0W`t$-5t=95$LL9yhHMMO0`}G_UTv}IDA70 z2ZfkZF(J@0a$(9XA?#QonO}7=Lm^0*zbI~wl!`^YUJp>ZW z_hc_JZj9M>o}Nf%QHGrcyqLzwVA3+uv7S^$#!N8ppQo$6mEiOYfmJ6V2|0~SH_nVZ zUn9kmDj_`=$q$v>=s^!oa1^9jf^5VY{4BkP`p8JifRgp2Dkhi>APY+ouC6TQkujtq zBY8K6sU+=@2}YR@&ewG`SG5viPyQoAX`O(Dn*+(fF=qM-N83wdy~&Wg5+evZ50MPX z#YvY&@`Dm0g*D@7PDm~QCb451MZjWW0fnKbFq;QhOpq)EGNn~O(mv7{rHPVU z!f!r9!Y4U=7*sRj0zE}6oJcZc+9cBoeu&gb#>%jI(wg zCZ%7-o9+wsRCyj{P6u3Skyc_wmZVyW0A?!^Ev3i^^W=rPR@N7p-{N%TGsy-V_i>r= z=2NgfgP+}XQI>(pNZSo1S(uEFHJv=C){Y> zcr!G)-~@C3McPkZuCu6!%uUs_H18pmQ)ZK}8kDoibkZdyd7E~54VkyeWo*xv<0 zV@8|bU92Y`z|XRbhRX01w3%^#!%E3+G;%;V4DJVkRRtXt;o=k&DwZJD9cV!14M|Km9v z$!N}zb<0k9p7~M2taRJB((V_p5h;OS!dh*JbXv>baUW^B8tdj+0)LP4Z8hiHCYesw zLP^do!)0Ov?#;WkDxxg!R_M*z0bSQ;DTYeEWinaR)-*UhmkW$G^O3_VOGPwyd7dtli7~R5TIgUG@;JMC(P~2_@Y<>g zRhq!dJf$2b@eVjyydH#PcOh^>Rav)!b}MjfN|JlIh>T8og0F|0MHQ2LOK=k~ev)WN zF$J<46HR!v_RDk|mZ$wPcC^`mvZBpI;vw>Xr50|F#d>pqEuY`4*40v@ z@PW-KPX=bn@uu=pUERaaGF0$ZOR|DJsM5?}J4T>~zgL51RqXX#wp5O9>nn@{YisRLnVCpr>9s+I>u7O5o9*jDi& znzBfqd8Cu23CA8xNz$o8o-PB)B-nSk-RL1Y^*r~na^Demmw?9u4a@o3~q)sLn)4h zSU@q$T5*>3R6EM$S=L;}Z|=WJS5xR-BUnV`K}H@N8iRD}Qn)we+LqpP6%v*BS;U2P z!9I+-7nyJj7g@y*&QaDq;jBs-%}Lq)p7Mhdvl%B-yfitR5wgrFW`Qw<8Fdr1rD}6C za=yhni5QMTr@$560;NoCCKXjaI9pqg<`2jrmk}Ci_Ps_=6Ky1>cyR7E7aC{gUxTAn zeztxL-5)DY;%2diQ5 z2K);IFf*xsj3p%nqOA2<9M{B?2Y#S%m2ny>8JrnUFv&G~iY$Gpq%

i6)xWYn+II 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 DD@Ri* delta 8429 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 diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index f5517000fc47ebabb6c0ed9bc70ca320487f886a..d5205e974c8377a619df4475a8dbc5171bb29632 100644 GIT binary patch delta 663 zcmYLHT}YE*6h3F0+Z-ixx-ebtn~gGAbAL@278M#+^AG9AwQM8jTBHWE8ws%}FS-cn z)ZV*M5-PQ7?7J95#H6dR!ft{tf^|_hQn~2Do1(MPio*-%yytz+bI$Xg)z9jm>*};g zK~3IyIj2}^Abp*d^qN}DAe@I7jL}t-n?m(k%G-36gU}5}pa%x2y17lh-6-v>`TGpw zAi+fj#9>l=KZH@)arlBxB)iZm-y6_Z(0WL#@qr6$&_nO7R<+ubI4Z+KooQc6d!N2V${!G)dR zpzsHyXo;glFMe0i@cvD5G7>8(ATRr&GKHZc=G zQ(2#EA&5r&zZe1|ctb3W;uPiVy6kie-yaYgi&$3%(13a?Ni!F|9LL{pXZDZNwz7B#+;yTs3L^ef~f z1Nbc0+;@T338-E!?t!#;affHK@0+1*PY&K; z3v3Rj>@GMjLUB{nP76eoTT>%OBVi6KiQ87^yBN2IsHlbpb7%>ml#7w5i z#6*wrYMNTCrqij7LbeIhb{ZiukD4}WCo}DIGCrm=(Ih6C)Mg^nLcjCxzY}7Vw3%rS z^X)zVxsU(cdmi`v_}?@A@0ndKhI9Szi}$|q1aB}Fb4AP)_8LauOXDILUWZbA!FkLW z7#tkrt`RlSdzLr0MDL26^Jqub&99|JR`6n%mwm1aRLb?I<9SxNGhV5CRhz0;4XRcJ zX|<~53?qqqT}EJ2c(pl0DI%qk(OYZ}`QxFY*h>SS4hp0%9P)JFW+2oj@-!6~h}zZx)sO_@9Q&D$ny4ANV3K_O7_8rF9Lf+v;oAwr*^j zw6?YN-nRM%?(53s*o?^$wVMj+yoGf|#dRA4{>QI`MSg~2*<#fNaVPr3s^ka^b_Zw_M0ih)?KTT-Hjo311I7c=pKG^yb}O>U zHb2E~3(*z@mO(21;IzprEB+sWI=s2HS#0AQ{b9 zUzu;tgK)WR;+`c`Yq6ux!${)+Av*!^KgOpU7gN@5=gz#iupBk4wVKps+hP?+9~)GQ znxy2+_v9Y9DrbJTi3cPXixTi_zspJ!F?i0hWzlGF0)(ajp>YM^>w&4ZY$4hZ74wdU z(c$at$98?nMd=*X6rC^;B3V!<5s<~EC{E8vvU0?BPb4x*gkyo?fxpjs={G*&m4Qm6 zA5jnorp9P0q-@n=B?@Y|VHsZmf?^c@3?5(X4!%L=*Ua5|^GX+@m#Lr5cQjHRLFhDr?c_SKu5f-K&q{PD3fN(#BGEX3r_@t`$2h!$fkgo4BlwVGQdv&FVt+y zGQqF0`3KR8df0`!U#(M3YN3985g}#s184I&>P1(FJ=eZQMBjO5D4&Rer9yrE&HmAQEE#4+&& zXDW7e8_a%kZn&z$(sHh$-0e(9=RNS7Q}fIQ^wnGLU}iwNA#nB79gcDty&I1j*aPeZ zo&zN9glHe0e`3q_qdf>5u%8D4JKj4I9{*D;9*ifYT;Og|3st2ah{7dQ?p;Yv-PeR5 z^UNd)nyd8()qaFwx{F|sN`$HIX<|Pal^ryO0le_Yr)}0@mF&=Zb z2NzdK`ce+n-I9sNhXJAUfbBbo*&uy1M0Odxc=2bpOvYXTk~!n^aUJ51GF_x{eSIv? zpfFn|dCQPa&`4V*i8I2M#o99I9}PYaZIUhXfOp&D#ts>mWy^9%byzP>#lTRY6reM> zZ(MMYe_+){PzpcPiO@qL^Bf!)Gol<-0uY?*}VMw{P+Hc|RzpgagY zgjQb9ogZX&$gzoTX@K<0P2mCL0>}VFCJ>!Og9-Mtyv3>o(8__x7@>Ti9+(7(Yyl9W z$zVeJmOhxcOeNX9b-M@~z%~Tri3I(>D=xl`c95ol=9VAngSmz-737+{kN8p7s z*4@|AG7BTP`okh!P)J@=F77+IeEm}H>NLosPsC6w_l{epmt@isZ4@FV{Tr9))8FFT2Q_FP|~i9JD2XkPiqMR6K1PAY(H1i*Bko;Jf6Y7A^~vvE#W(fy1Ajj*dHm z-WPzM1Cl`n+*uTtbQppIKo`&ryaWV*f$sW3`k6ry{MzYQy{ZbC^7#Ua(#M*}-QycY ze$qRusK6>9Oi5_-xNmu>YlB*?Hll3Sz8LE52x=u)i@4=jAQuo##ls{y2;BmROkDU@ zK&ToJnG_%)-*2{M>1fvgLhXQz6WS7N)FWs`R;oKaZ-`)0Rb%QJ7XD=anfnTq5^--C>ACE_-SPE|8;(g4a$IdpCP1ll|T?;%+^E z#i=`Q7v-kO4@izgw&Moo077>GBJ%)JXbG(YLb6s%qO79`I!Z0~dGmEcGsV#~(SEw_ zoetlAZ4s69JTrqzNLXCtQsy{rRs3+xbJ|k|7av-APrdd_=SG#cn6w7P(=>eJRPt8e zQoU;ywP;TxRfexcUkWh%r!Z;>#I(*RqimdWf@mAZ`(ALG;_t&&!l{H?*BjsC_mO{u zwTxRfyh8tJ9!%lMqy&Aqi4qufOV6y;L9a`F}v-wWk{jrXH#x{A*)ycP3@=`ZKwb zgEGI}G5eM;<;!PW|FH}DymkM-dPtw0PMbxwlJDY(6Rtg~8#=FRXbUajzV!>N#7fEfXan6b%tu_Xl9#l={>EjLYK1m? z&l>udjg+D@o2WYce*1ISv=W-FYxcD#csH*R5PvEnY~P(Y(^>=ChTx8(>$v@ zMk!sO{c9+a{JK1bHtOaoibWRLx@``>{ivIAt<;B@wt^$tN(XYswQ%{N+w~K3DUE%H znjJHcg0?k;p-$qX#jRw>EGuWlSs@*zQ|D8?g!DqZx6fP3(>$@JR8T|nRsOeaGW36) za!lN$&rQcgk33J)d1moy6J;do0LoshpI?jZ3}eR7mo!xczuEDLFq>aGn{r*h_zz6> EZ~n2`Y5)KL delta 6552 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 D79P`O diff --git a/host/dxwndhost.vs2008.vcproj b/host/dxwndhost.vs2008.vcproj index 70126fb..d63db86 100644 --- a/host/dxwndhost.vs2008.vcproj +++ b/host/dxwndhost.vs2008.vcproj @@ -373,6 +373,10 @@ RelativePath=".\PaletteDialog.h" > + + @@ -423,6 +427,10 @@ RelativePath=".\TabDirectX.cpp" > + + @@ -548,6 +556,10 @@ RelativePath=".\TabDirectX.h" > + + diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index aacd57b..ef7d000 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -16,6 +16,7 @@ #include "DesktopDialog.h" #include "PaletteDialog.h" #include "TimeSliderDialog.h" +#include "ShimsDialog.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -133,6 +134,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) ON_COMMAND(ID_RUN, OnRun) ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore) ON_COMMAND(ID_VIEW_STATUS, OnViewStatus) + ON_COMMAND(ID_VIEW_SHIMS, OnViewShims) ON_COMMAND(ID_VIEW_DESKTOP, OnViewDesktop) ON_COMMAND(ID_VIEW_PALETTE, OnViewPalette) ON_COMMAND(ID_VIEW_TIMESLIDER, OnViewTimeSlider) @@ -2115,6 +2117,22 @@ void CDxwndhostView::OnViewStatus() pDlg->ShowWindow(SW_SHOW); } +void CDxwndhostView::OnViewShims() +{ + POSITION pos; + int i; + char *ExePath; + CListCtrl& listctrl = GetListCtrl(); + + if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; + i = listctrl.GetNextSelectedItem(pos); + ExePath = TargetMaps[i].path; + + CShimsDialog *pDlg = new CShimsDialog(NULL, ExePath); + BOOL ret = pDlg->Create(CShimsDialog::IDD, this); + pDlg->ShowWindow(SW_SHOW); +} + void CDxwndhostView::OnViewDesktop() { CDesktopDialog *pDlg = new CDesktopDialog(); @@ -2377,7 +2395,8 @@ DWORD WINAPI StartDebug(void *p) } if(TargetHandle) CloseHandle((HANDLE)TargetHandle); #endif - bContinueDebugging=false; + // commented out: apparently, there must be some previous thread that starts before the hooker + // bContinueDebugging=false; break; case LOAD_DLL_DEBUG_EVENT: CloseHandle(((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->hFile); diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h index f9bde0d..bef96e9 100644 --- a/host/dxwndhostView.h +++ b/host/dxwndhostView.h @@ -91,6 +91,7 @@ protected: afx_msg void OnHookStop(); afx_msg void OnTrayRestore(); afx_msg void OnViewStatus(); + afx_msg void OnViewShims(); afx_msg void OnViewDesktop(); afx_msg void OnViewPalette(); afx_msg void OnViewTimeSlider(); diff --git a/host/host.aps b/host/host.aps index df6ce6c6e588d47949fa9b71f87c0a46b1269987..99d099a12ca7198fa27623691e2dfa84d9f03b4a 100644 GIT binary patch delta 624 zcmZY5v1`;|9LDkdN<{~U8yp-8>B|XrC^l$?Djf_|=-}YiC2+p=gp(d#)gTre3^?52 z(DL{P7;xwy=Usc&-e$m|gM))Z2bX|CM?nV%p?-7XcrD#LZ<_(27-8Qze+t!8uh zSuviH$3z)!D#x!Xka@5z+pD&4NOL$Nk580gU-=&0%>V1A{$Dpo6ttj{>^0fD&|b)4 zTQPo;$5a`FwQJR^@^l#T!AV+&kYiBqys)tMXB?YFLDS9eF@ EABo!HsQ>@~ delta 661 zcmXBQF=!J}7zgn89-ic=)KEeRXSmnczwGl-eS}4UEbSmf&h|mnJl!{G}792V_ z^gyKLzc`3=aL7SPlQvBgkkY}y6Oj&%QXCDa6zW)t|Kyh6@cqB<<9%=KM6I5vwIS)O zr-z+`st~2Sg^8s{^QFRzo5kE{@z(8Pd11OR^Q^qsBfBsy>gDCCbnvI@$c^>o8%ACV z@f+TjR$~fTWf_-+5DEBOT0TZVHxV*iF)(jfz3xviYg#7ZQcl*i%Ee&EETh56SMXWp zBz=dF;c*|1`l7X*tZNyAORvDIYjt`NPwTcCiz6Gi&UY6)8NkDVs6CI6jZ5gzw=lQ0 zoP)cqRc#RO2cz!8B=(b0_Xqgw_=SMpL&&~(3TKz1H&4Ob(Xs-UzJ#}<)q#zwZ5fH^ zT9)r4pnNmK!!-8OQJ8_*=pN+KO?VBherE736NP#BEYBdI9}zMg)r=$4N zv{fz-JI_OT%N>||TE2!$OYrDt%+fjdw1t2c5YiGldt5w@{&CAFDIrpDTUu>Q;?1OG nRL%);0kbVFzr&{~1U*AKgAPr=YdKDaurjsX%ice~n+SIm7VDhdOfyoCZ2>{JA RnEYWX2c!Ast