mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_18_src
Former-commit-id: 7c52867ad6c452042b2ec3734cc315859698b95c
This commit is contained in:
parent
890f146ec6
commit
27a7d10a25
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:f437c5d0f51575ce6fd0d3ffcc160d7c5f84f86db47b3af6847427a28466cde4
|
oid sha256:2e7c1adfbd594089e1c8eb7040b06037ae1f239498a09399e82ef4e52023c080
|
||||||
size 577024
|
size 576512
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:4637fee61c70d8ffa927a88878191e4174bac16129dd30242892a5ad07dcbc6b
|
oid sha256:a512e18dc9a004e3cb5f8f08eca94a0b06c8e5d935689eac885ba75f5636cde1
|
||||||
size 538624
|
size 538624
|
||||||
|
29
build/exports/Axis & Allies Iron Blitz Edition.dxw
Normal file
29
build/exports/Axis & Allies Iron Blitz Edition.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Axis & Allies Iron Blitz Edition
|
||||||
|
path0=D:\Games\Axis & Allies Iron Blitz Edition\Axis & Allies\AxisAllies.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=-2013265822
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412037
|
||||||
|
flagj0=128
|
||||||
|
tflag0=6402
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Crusaders of Might and Magic (GOG).dxw
Normal file
29
build/exports/Crusaders of Might and Magic (GOG).dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Crusaders of Might and Magic (GOG)
|
||||||
|
path0=D:\Games\Crusaders of Might and Magic (GOG)\crusaders.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=gfx_d3d gfx_sw
|
||||||
|
opengllib0=
|
||||||
|
notes0=the ddraw.dll hooker in the game folder must be deleted or renamed \nto allow DxWnd to play the game.
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=-1467989966
|
||||||
|
flagg0=1744830472
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=-2147477229
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Crusaders of Might and Magic Demo.dxw
Normal file
29
build/exports/Crusaders of Might and Magic Demo.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Crusaders of Might and Magic Demo
|
||||||
|
path0=D:\Games\Crusaders of Might and Magic Demo\crusaders demo.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=gfx_d3d gfx_sw
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=-1467989966
|
||||||
|
flagg0=1207959560
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=6418
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -5,7 +5,7 @@ module0=
|
|||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=679493666
|
flag0=679493664
|
||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=65556
|
flagh0=65556
|
||||||
flagi0=69206020
|
flagi0=69206020
|
||||||
@ -25,5 +25,3 @@ initts0=0
|
|||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
launchpath0=
|
launchpath0=
|
||||||
notes0=
|
|
||||||
flagj0=128
|
|
||||||
|
@ -6,11 +6,11 @@ module0=
|
|||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=671105312
|
flag0=671105058
|
||||||
flagg0=1207959568
|
flagg0=1207959568
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4194308
|
flagi0=4194308
|
||||||
tflag0=64
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
minx0=0
|
minx0=0
|
||||||
@ -25,3 +25,5 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
@ -5,10 +5,10 @@ module0=
|
|||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134217760
|
flag0=134217762
|
||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=6146
|
tflag0=6146
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
@ -8,7 +8,7 @@ coord0=0
|
|||||||
flag0=411058208
|
flag0=411058208
|
||||||
flagg0=1207959808
|
flagg0=1207959808
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=2097156
|
||||||
tflag0=0
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=8388736
|
||||||
|
29
build/exports/Galapagos.dxw
Normal file
29
build/exports/Galapagos.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Galapagos
|
||||||
|
path0=D:\Games\Galapagos\GALA.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=7
|
||||||
|
coord0=0
|
||||||
|
flag0=746602528
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=16
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=142610600
|
||||||
|
tflag0=6402
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -6,10 +6,10 @@ opengllib0=
|
|||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134217766
|
flag0=134217766
|
||||||
flagg0=134217728
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=64
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
minx0=0
|
minx0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
@ -6,10 +6,10 @@ opengllib0=
|
|||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134217766
|
flag0=134217766
|
||||||
flagg0=134217728
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=64
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
minx0=0
|
minx0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
29
build/exports/The Mummy.dxw
Normal file
29
build/exports/The Mummy.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=The Mummy
|
||||||
|
path0=D:\Games\The Mummy\MummyPC.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Ultimate Soccer Manager 98.dxw
Normal file
29
build/exports/Ultimate Soccer Manager 98.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Ultimate Soccer Manager 98
|
||||||
|
path0=D:\Games\USM98\USM98.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217760
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=266368
|
||||||
|
tflag0=-2147477245
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -1,5 +1,5 @@
|
|||||||
[window]
|
[window]
|
||||||
posx=1439
|
posx=1496
|
||||||
posy=619
|
posy=246
|
||||||
sizx=320
|
sizx=320
|
||||||
sizy=200
|
sizy=200
|
||||||
|
@ -776,4 +776,12 @@ v2.03.16
|
|||||||
fix: MapWindowPoints hook - added coordinate scaling (fixes "NBA Live 99" components size and position)
|
fix: MapWindowPoints hook - added coordinate scaling (fixes "NBA Live 99" components size and position)
|
||||||
fix: using "Suppress D3D8/9 reset" sets the backbuffer area as large as the whole desktop to avoid clipping
|
fix: using "Suppress D3D8/9 reset" sets the backbuffer area as large as the whole desktop to avoid clipping
|
||||||
add: added "Unlock Z-order" flag to avoid window to stay locked on top of z-order (useful for "NBA Live 99")
|
add: added "Unlock Z-order" flag to avoid window to stay locked on top of z-order (useful for "NBA Live 99")
|
||||||
add: added "EA Sprots hack" flag to suppress some interfering hooks set by EA games internally (useful for "NBA Live 99")
|
add: added "EA Sprots hack" flag to suppress some interfering hooks set by EA games internally (useful for "NBA Live 99")
|
||||||
|
|
||||||
|
v2.03.18:
|
||||||
|
fix: eliminated direct output to primary surface, causing more troubles than goods ("Divine Divinity" flickering...)
|
||||||
|
fix: handled CoCreateInstance calling CoCreateInstanceEx in hot patch mode.
|
||||||
|
fix: eliminated InvalidateRect calls in ddrow Unlock hooker: this is not the right way to fix "Deadlock II", sorry.
|
||||||
|
fix: DirectDrawEnumerateEx log
|
||||||
|
fix: cursor is hidden in fullscreen mode only
|
||||||
|
fix: CoCreateInstance & CoCreateInstanceEx wrappers. Now "Crusaders of Might & Magic" is playable in window
|
||||||
|
@ -64,15 +64,16 @@ static HRESULT sBltNoPrimary(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdest
|
|||||||
// Wrong guess!!! The cause was not compression, but simply a pixelformat mismatch. Better
|
// Wrong guess!!! The cause was not compression, but simply a pixelformat mismatch. Better
|
||||||
// configure things properly and avoid this branch.
|
// configure things properly and avoid this branch.
|
||||||
switch(res){
|
switch(res){
|
||||||
case DDERR_UNSUPPORTED:
|
// commented out: it was the cause of the "Divine Divinity" flickering.
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE){
|
// commented in?: it seems useful in "Axis and Allies"....
|
||||||
RECT targetrect;
|
//case DDERR_UNSUPPORTED:
|
||||||
if (IsDebug) BlitTrace("UNSUPP", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);
|
// if (dxw.dwFlags1 & EMULATESURFACE){
|
||||||
targetrect=*lpdestrect;
|
// RECT targetrect;
|
||||||
dxw.MapWindowRect(&targetrect);
|
// if (IsDebug) BlitTrace("UNSUPP", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);
|
// targetrect = dxw.MapWindowRect(lpdestrect);
|
||||||
}
|
// res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);
|
||||||
break;
|
// }
|
||||||
|
// break;
|
||||||
case DDERR_SURFACEBUSY:
|
case DDERR_SURFACEBUSY:
|
||||||
(*pUnlockMethod(lpdds))(lpdds, NULL);
|
(*pUnlockMethod(lpdds))(lpdds, NULL);
|
||||||
if (lpddssrc) (*pUnlockMethod(lpddssrc))(lpddssrc, NULL);
|
if (lpddssrc) (*pUnlockMethod(lpddssrc))(lpddssrc, NULL);
|
||||||
@ -261,8 +262,7 @@ static HRESULT sBltToPrimary(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdest
|
|||||||
RECT targetrect;
|
RECT targetrect;
|
||||||
dxw.ShowOverlay(lpddssrc);
|
dxw.ShowOverlay(lpddssrc);
|
||||||
if (IsDebug) BlitTrace("UNSUPP", &emurect, &destrect, __LINE__);
|
if (IsDebug) BlitTrace("UNSUPP", &emurect, &destrect, __LINE__);
|
||||||
targetrect=destrect;
|
targetrect=dxw.MapWindowRect(&destrect); // v2.03.18
|
||||||
dxw.MapWindowRect(&targetrect); // v2.03.15
|
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
|
res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
|
||||||
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
|
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
|
||||||
}
|
}
|
||||||
|
@ -1760,9 +1760,10 @@ HRESULT WINAPI extInitialize(LPDIRECTDRAW lpdd, GUID FAR *lpguid)
|
|||||||
|
|
||||||
res=(*pInitialize)(lpdd, lpPrivGuid);
|
res=(*pInitialize)(lpdd, lpPrivGuid);
|
||||||
|
|
||||||
|
if(res == DDERR_ALREADYINITIALIZED) res=DD_OK; // v2.03.18: this error could be caused by the CoCreateInstance implementation
|
||||||
if(dxw.dwFlags3 & COLORFIX) (((DDRAWI_DIRECTDRAW_INT *)lpdd))->lpLcl->dwAppHackFlags |= 0x800;
|
if(dxw.dwFlags3 & COLORFIX) (((DDRAWI_DIRECTDRAW_INT *)lpdd))->lpLcl->dwAppHackFlags |= 0x800;
|
||||||
|
|
||||||
if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3716,18 +3717,12 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC
|
|||||||
}
|
}
|
||||||
|
|
||||||
res=(*pUnlock)(lpdds, lprect);
|
res=(*pUnlock)(lpdds, lprect);
|
||||||
|
if (IsPrim && res==DD_OK) {
|
||||||
|
if(dxversion == 1) lprect=NULL;
|
||||||
|
res=sBlt("Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
||||||
|
}
|
||||||
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
|
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
|
||||||
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
||||||
if (IsPrim && res==DD_OK) {
|
|
||||||
if(dxversion == 1){
|
|
||||||
res=sBlt("Unlock", lpdds, NULL, lpdds, NULL, NULL, 0, FALSE);
|
|
||||||
(*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); // to fix "Deadlock II" mouse trails....
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
res=sBlt("Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
|
||||||
(*pInvalidateRect)(dxw.GethWnd(), lprect, FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
||||||
|
|
||||||
@ -4712,7 +4707,7 @@ HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette)
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI DDEnumerateCallbackFilter(GUID *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext)
|
BOOL FAR PASCAL DDEnumerateCallbackFilter(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext)
|
||||||
{
|
{
|
||||||
BOOL res;
|
BOOL res;
|
||||||
typedef struct {LPDDENUMCALLBACK lpCallback; LPVOID lpContext;} Context_Type;
|
typedef struct {LPDDENUMCALLBACK lpCallback; LPVOID lpContext;} Context_Type;
|
||||||
@ -4725,7 +4720,7 @@ BOOL WINAPI DDEnumerateCallbackFilter(GUID *lpGuid, LPSTR lpDriverDescription, L
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI DDEnumerateCallbackExFilter(GUID *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm)
|
BOOL FAR PASCAL DDEnumerateCallbackExFilter(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm)
|
||||||
{
|
{
|
||||||
BOOL res;
|
BOOL res;
|
||||||
typedef struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} Context_Type;
|
typedef struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} Context_Type;
|
||||||
@ -4759,15 +4754,16 @@ HRESULT WINAPI extDirectDrawEnumerateEx(LPDDENUMCALLBACKEX lpCallback, LPVOID lp
|
|||||||
{
|
{
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
OutTraceDDRAW("DirectDrawEnumerateEx: lpCallback=%x lpContext=%x Flags=%x(%s)\n",
|
OutTraceDDRAW("DirectDrawEnumerateEx: lpCallback=%x lpContext=%x Flags=%x(%s)\n",
|
||||||
lpCallback, lpContext, dxw.dwFlags1, ExplainDDEnumerateFlags(dwFlags));
|
lpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags));
|
||||||
if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG)){
|
if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG)){
|
||||||
struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} myContext;
|
struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} myContext;
|
||||||
myContext.lpCallback=lpCallback;
|
myContext.lpCallback=lpCallback;
|
||||||
myContext.lpContext=lpContext;
|
myContext.lpContext=lpContext;
|
||||||
ret=(*pDirectDrawEnumerateEx)(DDEnumerateCallbackExFilter, (LPVOID)&myContext, dwFlags);
|
ret=(*pDirectDrawEnumerateEx)(DDEnumerateCallbackExFilter, (LPVOID)&myContext, dwFlags);
|
||||||
}
|
}
|
||||||
else
|
else{
|
||||||
ret=(*pDirectDrawEnumerateEx)(lpCallback, lpContext, dwFlags);
|
ret=(*pDirectDrawEnumerateEx)(lpCallback, lpContext, dwFlags);
|
||||||
|
}
|
||||||
if(ret) OutTraceE("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
if(ret) OutTraceE("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
||||||
if(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=0;
|
if(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=0;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -936,6 +936,7 @@ char *ExplainSetWindowIndex(DWORD c)
|
|||||||
case GWL_STYLE: eb="GWL_STYLE"; break;
|
case GWL_STYLE: eb="GWL_STYLE"; break;
|
||||||
case GWL_USERDATA: eb="GWL_USERDATA"; break;
|
case GWL_USERDATA: eb="GWL_USERDATA"; break;
|
||||||
case GWL_WNDPROC: eb="GWL_WNDPROC"; break;
|
case GWL_WNDPROC: eb="GWL_WNDPROC"; break;
|
||||||
|
case GWL_HWNDPARENT: eb="GWL_HWNDPARENT"; break;
|
||||||
case DWL_DLGPROC: eb="DWL_DLGPROC"; break;
|
case DWL_DLGPROC: eb="DWL_DLGPROC"; break;
|
||||||
case DWL_MSGRESULT: eb="DWL_MSGRESULT"; break;
|
case DWL_MSGRESULT: eb="DWL_MSGRESULT"; break;
|
||||||
case DWL_USER: eb="DWL_USER"; break;
|
case DWL_USER: eb="DWL_USER"; break;
|
||||||
|
@ -598,7 +598,6 @@ void HookWindowProc(HWND hwnd)
|
|||||||
|
|
||||||
void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
||||||
{
|
{
|
||||||
|
|
||||||
HRESULT res=0;
|
HRESULT res=0;
|
||||||
LONG style;
|
LONG style;
|
||||||
|
|
||||||
@ -629,7 +628,7 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
|||||||
|
|
||||||
// fixing cursor view and clipping region
|
// fixing cursor view and clipping region
|
||||||
|
|
||||||
if (dxw.dwFlags1 & HIDEHWCURSOR) while ((*pShowCursor)(0) >= 0);
|
if ((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while ((*pShowCursor)(0) >= 0);
|
||||||
if (dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);
|
if (dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);
|
||||||
if (dxw.dwFlags1 & CLIPCURSOR) {
|
if (dxw.dwFlags1 & CLIPCURSOR) {
|
||||||
OutTraceDW("AdjustWindowFrame: setting clip region\n");
|
OutTraceDW("AdjustWindowFrame: setting clip region\n");
|
||||||
@ -937,7 +936,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
dxw.dwFlags1 |= LOCKWINPOS;
|
dxw.dwFlags1 |= LOCKWINPOS;
|
||||||
dx_UpdatePositionLock(hwnd);
|
dx_UpdatePositionLock(hwnd);
|
||||||
}
|
}
|
||||||
if(dxw.dwFlags1 & HIDEHWCURSOR) while((*pShowCursor)(0) >= 0);
|
if((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0);
|
||||||
if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);
|
if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);
|
||||||
if(dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
if(dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
||||||
if(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh();
|
if(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh();
|
||||||
@ -974,7 +973,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
if(dxw.Windowize){
|
if(dxw.Windowize){
|
||||||
prev.x = LOWORD(lparam);
|
prev.x = LOWORD(lparam);
|
||||||
prev.y = HIWORD(lparam);
|
prev.y = HIWORD(lparam);
|
||||||
if (dxw.dwFlags1 & HIDEHWCURSOR) {
|
if ((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()){
|
||||||
(*pGetClientRect)(hwnd, &rect);
|
(*pGetClientRect)(hwnd, &rect);
|
||||||
if(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom)
|
if(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom)
|
||||||
while((*pShowCursor)(0) >= 0);
|
while((*pShowCursor)(0) >= 0);
|
||||||
@ -1681,7 +1680,6 @@ void HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
if(dxw.dwFlags5 & GDIMODE) dxw.dwFlags1 |= EMULATESURFACE;
|
if(dxw.dwFlags5 & GDIMODE) dxw.dwFlags1 |= EMULATESURFACE;
|
||||||
if(dxw.dwFlags5 & STRESSRESOURCES) dxw.dwFlags5 |= LIMITRESOURCES;
|
if(dxw.dwFlags5 & STRESSRESOURCES) dxw.dwFlags5 |= LIMITRESOURCES;
|
||||||
|
|
||||||
|
|
||||||
if(hwnd){ // v2.02.32: skip this when in code injection mode.
|
if(hwnd){ // v2.02.32: skip this when in code injection mode.
|
||||||
// v2.1.75: is it correct to set hWnd here?
|
// v2.1.75: is it correct to set hWnd here?
|
||||||
//dxw.SethWnd(hwnd);
|
//dxw.SethWnd(hwnd);
|
||||||
|
@ -997,7 +997,7 @@ void dxwCore::ScreenRefresh(void)
|
|||||||
if (lpDDSPrim) extBlt(lpDDSPrim, NULL, lpDDSPrim, NULL, 0, NULL);
|
if (lpDDSPrim) extBlt(lpDDSPrim, NULL, lpDDSPrim, NULL, 0, NULL);
|
||||||
|
|
||||||
// v2.02.44 - used for what? Commenting out seems to fix the palette update glitches
|
// v2.02.44 - used for what? Commenting out seems to fix the palette update glitches
|
||||||
// and make the "Palette updates don't blit"option useless....
|
// and make the "Palette updates don't blit" option useless....
|
||||||
//(*pInvalidateRect)(hWnd, NULL, FALSE);
|
//(*pInvalidateRect)(hWnd, NULL, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "TlHelp32.h"
|
#include "TlHelp32.h"
|
||||||
|
|
||||||
#define VERSION "2.03.16"
|
#define VERSION "2.03.18"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
//#define LOCKTHREADS
|
//#define LOCKTHREADS
|
||||||
|
Binary file not shown.
@ -17,6 +17,16 @@ typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTE
|
|||||||
BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
|
BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
|
||||||
CreateProcessA_Type pCreateProcessA = NULL;
|
CreateProcessA_Type pCreateProcessA = NULL;
|
||||||
|
|
||||||
|
#ifdef NOFREELIBRARY
|
||||||
|
typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE);
|
||||||
|
FreeLibrary_Type pFreeLibrary = NULL;
|
||||||
|
BOOL WINAPI extFreeLibrary(HMODULE hModule)
|
||||||
|
{
|
||||||
|
OutTrace("FreeLibrary: hModule=%x SUPPRESS\n", hModule);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply
|
// v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply
|
||||||
// enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call
|
// enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call
|
||||||
// can be hooked by the IAT lookup. This fixes a problem after movie playing in Wind Fantasy SP.
|
// can be hooked by the IAT lookup. This fixes a problem after movie playing in Wind Fantasy SP.
|
||||||
@ -33,6 +43,9 @@ static HookEntry_Type Hooks[]={
|
|||||||
{HOOK_IAT_CANDIDATE, "GetLogicalDrives", (FARPROC)NULL, (FARPROC *)&pGetLogicalDrives, (FARPROC)extGetLogicalDrives},
|
{HOOK_IAT_CANDIDATE, "GetLogicalDrives", (FARPROC)NULL, (FARPROC *)&pGetLogicalDrives, (FARPROC)extGetLogicalDrives},
|
||||||
{HOOK_IAT_CANDIDATE, "GetTempFileNameA", (FARPROC)GetTempFileNameA, (FARPROC *)&pGetTempFileName, (FARPROC)extGetTempFileName},
|
{HOOK_IAT_CANDIDATE, "GetTempFileNameA", (FARPROC)GetTempFileNameA, (FARPROC *)&pGetTempFileName, (FARPROC)extGetTempFileName},
|
||||||
{HOOK_IAT_CANDIDATE, "CreateProcessA", (FARPROC)NULL, (FARPROC *)&pCreateProcessA, (FARPROC)extCreateProcessA},
|
{HOOK_IAT_CANDIDATE, "CreateProcessA", (FARPROC)NULL, (FARPROC *)&pCreateProcessA, (FARPROC)extCreateProcessA},
|
||||||
|
#ifdef NOFREELIBRARY
|
||||||
|
{HOOK_HOT_CANDIDATE, "FreeLibrary", (FARPROC)FreeLibrary, (FARPROC *)&pFreeLibrary, (FARPROC)extFreeLibrary},
|
||||||
|
#endif
|
||||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -533,7 +546,6 @@ FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// to do: the else condition: the program COULD load addresses by ordinal value ... done ??
|
// to do: the else condition: the program COULD load addresses by ordinal value ... done ??
|
||||||
// to do: CoCreateInstanceEx
|
|
||||||
if((DWORD)proc & 0xFFFF0000){
|
if((DWORD)proc & 0xFFFF0000){
|
||||||
FARPROC remap;
|
FARPROC remap;
|
||||||
switch(idx){
|
switch(idx){
|
||||||
|
157
dll/ole32.cpp
157
dll/ole32.cpp
@ -7,10 +7,13 @@
|
|||||||
|
|
||||||
extern void HookModule(HMODULE, int);
|
extern void HookModule(HMODULE, int);
|
||||||
|
|
||||||
|
static BOOL bRecursedHook = FALSE;
|
||||||
|
|
||||||
static HookEntry_Type Hooks[]={
|
static HookEntry_Type Hooks[]={
|
||||||
{HOOK_HOT_CANDIDATE, "CoCreateInstance", NULL, (FARPROC *)&pCoCreateInstance, (FARPROC)extCoCreateInstance},
|
{HOOK_HOT_CANDIDATE, "CoCreateInstance", NULL, (FARPROC *)&pCoCreateInstance, (FARPROC)extCoCreateInstance},
|
||||||
{HOOK_HOT_CANDIDATE, "CoCreateInstanceEx", NULL, (FARPROC *)&pCoCreateInstanceEx, (FARPROC)extCoCreateInstanceEx},
|
{HOOK_HOT_CANDIDATE, "CoCreateInstanceEx", NULL, (FARPROC *)&pCoCreateInstanceEx, (FARPROC)extCoCreateInstanceEx},
|
||||||
{HOOK_HOT_CANDIDATE, "CoInitialize", NULL, (FARPROC *)&pCoInitialize, (FARPROC)extCoInitialize},
|
//{HOOK_HOT_CANDIDATE, "CoInitialize", NULL, (FARPROC *)&pCoInitialize, (FARPROC)extCoInitialize},
|
||||||
|
//{HOOK_HOT_CANDIDATE, "CoUninitialize", NULL, (FARPROC *)&pCoUninitialize, (FARPROC)extCoUninitialize},
|
||||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -29,7 +32,7 @@ FARPROC Remap_ole32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// so far, there are 4 additional libraries that could be loaded by meand of a CoCreateInstance call....
|
// so far, there are 4 additional libraries that could be loaded by means of a CoCreateInstance call....
|
||||||
|
|
||||||
#define ADDITIONAL_MODULE_COUNT 4
|
#define ADDITIONAL_MODULE_COUNT 4
|
||||||
struct {
|
struct {
|
||||||
@ -61,58 +64,94 @@ static void HookAdditionalModules()
|
|||||||
|
|
||||||
// -------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------
|
||||||
// Ole32 CoCreateInstance handling: you can create DirectDraw objects through it!
|
// Ole32 CoCreateInstance handling: you can create DirectDraw objects through it!
|
||||||
// utilized so far in a single game: Axiz & Allies
|
// utilized so far in a single game: "Axis & Allies"
|
||||||
|
// another one: "Crusaders of Might and Magic" ....
|
||||||
// -------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
extern void HookDDSession(LPDIRECTDRAW *, int);
|
||||||
|
#if 0
|
||||||
|
typedef HRESULT (WINAPI *Initialize_Type)(LPDIRECTDRAW, GUID FAR *);
|
||||||
|
extern Initialize_Type pInitialize;
|
||||||
|
HRESULT WINAPI extInitialize1(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace("1\n"); HookDDSession(&lpdd, 1); return DD_OK; }
|
||||||
|
HRESULT WINAPI extInitialize2(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace("2\n"); HookDDSession(&lpdd, 2); return DD_OK; }
|
||||||
|
HRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace("4\n"); HookDDSession(&lpdd, 4); return DD_OK; }
|
||||||
|
HRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace("7\n"); HookDDSession(&lpdd, 7); return DD_OK; }
|
||||||
|
|
||||||
|
void HookDDSessionInitialize(LPDIRECTDRAW *lplpdd, int dxversion, Initialize_Type extInitialize)
|
||||||
|
{
|
||||||
|
OutTraceDW("Hooking directdraw Init dd=%x dxversion=%d pInit=%x\n",
|
||||||
|
*lplpdd, dxversion, extInitialize);
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, "Initialize(D)");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv)
|
HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
OutTraceDW("CoCreateInstance: rclsid=%x UnkOuter=%x ClsContext=%x refiid=%x(%s)\n",
|
OutTraceDW("CoCreateInstance: rclsid=%x UnkOuter=%x ClsContext=%x refiid=%x(%s)\n",
|
||||||
rclsid, pUnkOuter, dwClsContext, riid.Data1, ExplainGUID((GUID *)&riid));
|
rclsid.Data1, pUnkOuter, dwClsContext, riid.Data1, ExplainGUID((GUID *)&riid));
|
||||||
|
|
||||||
|
bRecursedHook = TRUE;
|
||||||
res=(*pCoCreateInstance)(rclsid, pUnkOuter, dwClsContext, riid, ppv);
|
res=(*pCoCreateInstance)(rclsid, pUnkOuter, dwClsContext, riid, ppv);
|
||||||
if(res)
|
bRecursedHook = FALSE;
|
||||||
|
if(res) {
|
||||||
OutTraceE("CoCreateInstance: ERROR res=%x\n", res);
|
OutTraceE("CoCreateInstance: ERROR res=%x\n", res);
|
||||||
else
|
return res;
|
||||||
OutTraceDW("CoCreateInstance: ppv=%x->%x\n", *ppv, *(DWORD *)*ppv);
|
}
|
||||||
|
|
||||||
|
OutTraceDW("CoCreateInstance: ppv=%x->%x\n", *ppv, *(DWORD *)*ppv);
|
||||||
|
|
||||||
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DirectDraw){
|
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DirectDraw){ // v2.03.18: fixed
|
||||||
LPDIRECTDRAW lpOldDDraw;
|
|
||||||
OutTraceDW("CoCreateInstance: CLSID_DirectDraw object\n");
|
OutTraceDW("CoCreateInstance: CLSID_DirectDraw object\n");
|
||||||
|
HookDDSession((LPDIRECTDRAW *)ppv, 1);
|
||||||
switch (*(DWORD *)&riid){
|
switch (*(DWORD *)&riid){
|
||||||
|
#if 0
|
||||||
case 0x6C14DB80:
|
case 0x6C14DB80:
|
||||||
OutTraceDW("DirectDrawCreate: IID_DirectDraw RIID\n");
|
HookDDSessionInitialize((LPDIRECTDRAW *)ppv, 1, extInitialize1); break;
|
||||||
res=extDirectDrawCreate(NULL, (LPDIRECTDRAW *)&ppv, 0);
|
case 0xB3A6F3E0:
|
||||||
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
HookDDSessionInitialize((LPDIRECTDRAW *)ppv, 2, extInitialize2); break;
|
||||||
|
case 0x9C59509A:
|
||||||
|
HookDDSessionInitialize((LPDIRECTDRAW *)ppv, 4, extInitialize4); break;
|
||||||
|
case 0x15E65EC0:
|
||||||
|
HookDDSessionInitialize((LPDIRECTDRAW *)ppv, 7, extInitialize7); break;
|
||||||
|
#else
|
||||||
|
LPDIRECTDRAW lpOldDDraw;
|
||||||
|
case 0x6C14DB80:
|
||||||
|
OutTraceDW("CoCreateInstance: IID_DirectDraw RIID\n");
|
||||||
|
HookDDSession((LPDIRECTDRAW *)ppv, 1);
|
||||||
break;
|
break;
|
||||||
case 0xB3A6F3E0:
|
case 0xB3A6F3E0:
|
||||||
OutTraceDW("DirectDrawCreate: IID_DirectDraw2 RIID\n");
|
OutTraceDW("CoCreateInstance: IID_DirectDraw2 RIID\n");
|
||||||
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
||||||
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
res=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)&ppv);
|
res=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)ppv);
|
||||||
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
lpOldDDraw->Release();
|
lpOldDDraw->Release();
|
||||||
break;
|
break;
|
||||||
case 0x9c59509a:
|
case 0x9C59509A:
|
||||||
OutTraceDW("DirectDrawCreate: IID_DirectDraw4 RIID\n");
|
OutTraceDW("CoCreateInstance: IID_DirectDraw4 RIID\n");
|
||||||
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
||||||
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)&ppv);
|
res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv);
|
||||||
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
lpOldDDraw->Release();
|
lpOldDDraw->Release();
|
||||||
case 0x15e65ec0:
|
break;
|
||||||
|
case 0x15E65EC0:
|
||||||
OutTraceDW("CoCreateInstance: IID_DirectDraw7 RIID\n");
|
OutTraceDW("CoCreateInstance: IID_DirectDraw7 RIID\n");
|
||||||
res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)&ppv, IID_IDirectDraw7, 0);
|
res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0);
|
||||||
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
break;
|
break;
|
||||||
case 0xe436ebb3:
|
case 0xE436EBB3:
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DxDiagProvider) res=HookDxDiag(riid, ppv);
|
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DxDiagProvider) res=HookDxDiag(riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
HookAdditionalModules();
|
HookAdditionalModules();
|
||||||
|
OutTraceDW("CoCreateInstance: res=%x ppv=%x->%x\n", res, *ppv, *(DWORD *)*ppv);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,13 +161,14 @@ HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID rclsid, IUnknown *punkOute
|
|||||||
DWORD i;
|
DWORD i;
|
||||||
|
|
||||||
OutTraceDW("CoCreateInstanceEx: rclsid=%x UnkOuter=%x ClsContext=%x Count=%d\n",
|
OutTraceDW("CoCreateInstanceEx: rclsid=%x UnkOuter=%x ClsContext=%x Count=%d\n",
|
||||||
rclsid, punkOuter, dwClsCtx, dwCount);
|
rclsid.Data1, punkOuter, dwClsCtx, dwCount);
|
||||||
|
|
||||||
res=(*pCoCreateInstanceEx)(rclsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);
|
res=(*pCoCreateInstanceEx)(rclsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTraceE("CoCreateInstanceEx: ERROR res=%x\n", res);
|
OutTraceE("CoCreateInstanceEx: ERROR res=%x\n", res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
if(bRecursedHook) return res;
|
||||||
|
|
||||||
for(i=0; i<dwCount; i++){
|
for(i=0; i<dwCount; i++){
|
||||||
LPVOID FAR* ppv;
|
LPVOID FAR* ppv;
|
||||||
@ -150,43 +190,46 @@ HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID rclsid, IUnknown *punkOute
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DirectDraw){
|
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DirectDraw){
|
||||||
LPDIRECTDRAW lpOldDDraw;
|
extern void HookDDSession(LPDIRECTDRAW *, int);
|
||||||
OutTraceDW("CoCreateInstanceEx: CLSID_DirectDraw object\n");
|
OutTraceDW("CoCreateInstance: CLSID_DirectDraw object\n");
|
||||||
switch (*(DWORD *)&riid){
|
switch (*(DWORD *)&riid){
|
||||||
case 0x6C14DB80:
|
LPDIRECTDRAW lpOldDDraw;
|
||||||
OutTraceDW("DirectDrawCreateEx: IID_DirectDraw RIID\n");
|
case 0x6C14DB80:
|
||||||
res=extDirectDrawCreate(NULL, (LPDIRECTDRAW *)&ppv, 0);
|
OutTraceDW("CoCreateInstance: IID_DirectDraw RIID\n");
|
||||||
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
HookDDSession((LPDIRECTDRAW *)ppv, 1);
|
||||||
break;
|
break;
|
||||||
case 0xB3A6F3E0:
|
case 0xB3A6F3E0:
|
||||||
OutTraceDW("DirectDrawCreateEx: IID_DirectDraw2 RIID\n");
|
OutTraceDW("CoCreateInstance: IID_DirectDraw2 RIID\n");
|
||||||
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
||||||
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
res=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)&ppv);
|
res=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)ppv);
|
||||||
if(res)OutTraceDW("QueryInterfaceEx: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
lpOldDDraw->Release();
|
lpOldDDraw->Release();
|
||||||
break;
|
break;
|
||||||
case 0x9c59509a:
|
case 0x9C59509A:
|
||||||
OutTraceDW("DirectDrawCreateEx: IID_DirectDraw4 RIID\n");
|
OutTraceDW("CoCreateInstance: IID_DirectDraw4 RIID\n");
|
||||||
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
res=extDirectDrawCreate(NULL, &lpOldDDraw, 0);
|
||||||
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)&ppv);
|
res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv);
|
||||||
if(res)OutTraceDW("QueryInterfaceEx: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
lpOldDDraw->Release();
|
lpOldDDraw->Release();
|
||||||
case 0x15e65ec0:
|
break;
|
||||||
OutTraceDW("CoCreateInstanceEx: IID_DirectDraw7 RIID\n");
|
case 0x15E65EC0:
|
||||||
res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)&ppv, IID_IDirectDraw7, 0);
|
OutTraceDW("CoCreateInstance: IID_DirectDraw7 RIID\n");
|
||||||
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0);
|
||||||
break;
|
if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
case 0xe436ebb3:
|
break;
|
||||||
break;
|
case 0xE436EBB3:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DxDiagProvider) res=HookDxDiag(riid, ppv);
|
if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DxDiagProvider) res=HookDxDiag(riid, ppv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HookAdditionalModules();
|
HookAdditionalModules();
|
||||||
|
OutTraceDW("CoCreateInstanceEx: res=%x\n", res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,3 +240,9 @@ HRESULT WINAPI extCoInitialize(LPVOID pvReserved)
|
|||||||
res=(*pCoInitialize)(pvReserved);
|
res=(*pCoInitialize)(pvReserved);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WINAPI extCoUninitialize(void)
|
||||||
|
{
|
||||||
|
OutTraceDW("CoUninitialize\n");
|
||||||
|
(*pCoUninitialize)();
|
||||||
|
}
|
@ -136,6 +136,7 @@ typedef BOOL (WINAPI *GetExitCodeProcess_Type)(HANDLE, LPDWORD);
|
|||||||
typedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
typedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
||||||
typedef HRESULT (STDAPICALLTYPE *CoCreateInstanceEx_Type)(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);
|
typedef HRESULT (STDAPICALLTYPE *CoCreateInstanceEx_Type)(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);
|
||||||
typedef HRESULT (STDAPICALLTYPE *CoInitialize_Type)(LPVOID);
|
typedef HRESULT (STDAPICALLTYPE *CoInitialize_Type)(LPVOID);
|
||||||
|
typedef void (STDAPICALLTYPE *CoUninitialize_Type)(void);
|
||||||
|
|
||||||
// user32.dll:
|
// user32.dll:
|
||||||
typedef HDC (WINAPI *BeginPaint_Type)(HWND, LPPAINTSTRUCT);
|
typedef HDC (WINAPI *BeginPaint_Type)(HWND, LPPAINTSTRUCT);
|
||||||
@ -350,6 +351,7 @@ DXWEXTERN GetExitCodeProcess_Type pGetExitCodeProcess DXWINITIALIZED;
|
|||||||
DXWEXTERN CoCreateInstance_Type pCoCreateInstance DXWINITIALIZED;
|
DXWEXTERN CoCreateInstance_Type pCoCreateInstance DXWINITIALIZED;
|
||||||
DXWEXTERN CoCreateInstanceEx_Type pCoCreateInstanceEx DXWINITIALIZED;
|
DXWEXTERN CoCreateInstanceEx_Type pCoCreateInstanceEx DXWINITIALIZED;
|
||||||
DXWEXTERN CoInitialize_Type pCoInitialize DXWINITIALIZED;
|
DXWEXTERN CoInitialize_Type pCoInitialize DXWINITIALIZED;
|
||||||
|
DXWEXTERN CoUninitialize_Type pCoUninitialize DXWINITIALIZED;
|
||||||
|
|
||||||
// user32.dll:
|
// user32.dll:
|
||||||
DXWEXTERN BeginPaint_Type pBeginPaint DXWINITIALIZED;
|
DXWEXTERN BeginPaint_Type pBeginPaint DXWINITIALIZED;
|
||||||
@ -565,6 +567,7 @@ extern BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *);
|
|||||||
extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
||||||
extern HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);
|
extern HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);
|
||||||
extern HRESULT STDAPICALLTYPE extCoInitialize(LPVOID);
|
extern HRESULT STDAPICALLTYPE extCoInitialize(LPVOID);
|
||||||
|
extern void STDAPICALLTYPE extCoUninitialize(void);
|
||||||
|
|
||||||
// user32.dll:
|
// user32.dll:
|
||||||
extern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT);
|
extern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT);
|
||||||
|
@ -36,6 +36,12 @@ HHOOK WINAPI extSetWindowsHookEx(int, HOOKPROC, HINSTANCE, DWORD);
|
|||||||
typedef BOOL (WINAPI *PostMessageA_Type)(HWND, UINT, WPARAM, LPARAM);
|
typedef BOOL (WINAPI *PostMessageA_Type)(HWND, UINT, WPARAM, LPARAM);
|
||||||
PostMessageA_Type pPostMessageA = NULL;
|
PostMessageA_Type pPostMessageA = NULL;
|
||||||
BOOL WINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM);
|
BOOL WINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
typedef HRESULT (WINAPI *MessageBoxTimeoutA_Type)(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
|
||||||
|
MessageBoxTimeoutA_Type pMessageBoxTimeoutA = NULL;
|
||||||
|
HRESULT WINAPI extMessageBoxTimeoutA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
|
||||||
|
typedef HRESULT (WINAPI *MessageBoxTimeoutW_Type)(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
|
||||||
|
MessageBoxTimeoutW_Type pMessageBoxTimeoutW = NULL;
|
||||||
|
HRESULT WINAPI extMessageBoxTimeoutW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
|
||||||
|
|
||||||
#ifdef TRACEPALETTE
|
#ifdef TRACEPALETTE
|
||||||
typedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);
|
typedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);
|
||||||
@ -99,6 +105,9 @@ static HookEntry_Type Hooks[]={
|
|||||||
{HOOK_HOT_CANDIDATE, "WindowFromPoint", (FARPROC)WindowFromPoint, (FARPROC *)&pWindowFromPoint, (FARPROC)extWindowFromPoint},
|
{HOOK_HOT_CANDIDATE, "WindowFromPoint", (FARPROC)WindowFromPoint, (FARPROC *)&pWindowFromPoint, (FARPROC)extWindowFromPoint},
|
||||||
{HOOK_HOT_CANDIDATE, "SetWindowsHookExA", (FARPROC)SetWindowsHookExA, (FARPROC *)&pSetWindowsHookEx, (FARPROC)extSetWindowsHookEx},
|
{HOOK_HOT_CANDIDATE, "SetWindowsHookExA", (FARPROC)SetWindowsHookExA, (FARPROC *)&pSetWindowsHookEx, (FARPROC)extSetWindowsHookEx},
|
||||||
|
|
||||||
|
//{HOOK_HOT_CANDIDATE, "MessageBoxTimeoutA", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutA, (FARPROC)extMessageBoxTimeoutA},
|
||||||
|
//{HOOK_HOT_CANDIDATE, "MessageBoxTimeoutW", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutW, (FARPROC)extMessageBoxTimeoutW},
|
||||||
|
|
||||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1113,6 +1122,7 @@ int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT
|
|||||||
|
|
||||||
ret=(*pMapWindowPoints)(hWndFrom, hWndTo, lpPoints, cPoints);
|
ret=(*pMapWindowPoints)(hWndFrom, hWndTo, lpPoints, cPoints);
|
||||||
// v2.03.16: now must scale every point (fixes "NBA Live 99")
|
// v2.03.16: now must scale every point (fixes "NBA Live 99")
|
||||||
|
// v2.03.18: in some cases it should not! "New Your Race"...
|
||||||
for(pi=0; pi<cPoints; pi++){
|
for(pi=0; pi<cPoints; pi++){
|
||||||
dxw.UnmapClient(&lpPoints[pi]);
|
dxw.UnmapClient(&lpPoints[pi]);
|
||||||
}
|
}
|
||||||
@ -3037,3 +3047,21 @@ HHOOK WINAPI extSetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWOR
|
|||||||
ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId);
|
ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT WINAPI extMessageBoxTimeoutA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
if(1) dwMilliseconds=1000;
|
||||||
|
res=(*pMessageBoxTimeoutA)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extMessageBoxTimeoutW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
if(1) dwMilliseconds=1000;
|
||||||
|
res=(*pMessageBoxTimeoutW)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user