mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_04_14_src
Former-commit-id: 7fc0c92fb4c1f9dc744aefc42d4acaf08de38d85
This commit is contained in:
parent
9a31806434
commit
0e42098a3d
@ -275,6 +275,8 @@
|
|||||||
#define CLIPMENU 0x00800000 // Include window menu in mouse clipper area
|
#define CLIPMENU 0x00800000 // Include window menu in mouse clipper area
|
||||||
#define BACKGROUNDPRIORITY 0x01000000 // Lower process priority when in background state
|
#define BACKGROUNDPRIORITY 0x01000000 // Lower process priority when in background state
|
||||||
#define OFFSCREENZBUFFER 0x02000000 // Allow building plain surfaces and ZBuffer on offscreen videomemory surfaces
|
#define OFFSCREENZBUFFER 0x02000000 // Allow building plain surfaces and ZBuffer on offscreen videomemory surfaces
|
||||||
|
#define VIRTUALHEAP 0x04000000 // Remap heap calls to C library memory allocation routines
|
||||||
|
#define ZBUFFERHARDCLEAN 0x08000000 // Clean ZBUFFER the hard way (memset 0xFF on whole surface buffer ....)
|
||||||
|
|
||||||
// logging Tflags DWORD:
|
// logging Tflags DWORD:
|
||||||
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:7a79583def56483a293f270aec77c751598364449eb1d729d4fa4512f8c2b010
|
oid sha256:73c4aac223a633aa820b3761678170f484fb15a016ecd2c41e77d5c820e3dd46
|
||||||
size 787456
|
size 791552
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:5789a039f251a7d64e49573c0f7cc63fea3369f091782fb92fe6efb7c899d94a
|
oid sha256:933a86972f0a96e62d8c5f4b656315cf09d656d2a131d1685acdd231b7ac2139
|
||||||
size 675840
|
size 677376
|
||||||
|
183
build/dxwnd.ini
Normal file
183
build/dxwnd.ini
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
[window]
|
||||||
|
exportpath=D:\Games\Age of Empires Trial\
|
||||||
|
exepath=D:\Games\Sid Meiers Alpha Centauri Demo\
|
||||||
|
posx=-666
|
||||||
|
posy=95
|
||||||
|
sizx=320
|
||||||
|
sizy=200
|
||||||
|
[target]
|
||||||
|
title0=Planet of the Apes
|
||||||
|
path0=D:\Games\Planet of the Apes\pota.exe
|
||||||
|
startfolder0=
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
ver0=0
|
||||||
|
monitorid0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=203423795
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=524308
|
||||||
|
flagi0=138412068
|
||||||
|
flagj0=67129472
|
||||||
|
flagk0=-1879044096
|
||||||
|
flagl0=1048576
|
||||||
|
flagm0=0
|
||||||
|
tflag0=0
|
||||||
|
dflag0=0
|
||||||
|
posx0=-1050
|
||||||
|
posy0=100
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=2
|
||||||
|
scanline0=1
|
||||||
|
initresw0=0
|
||||||
|
initresh0=0
|
||||||
|
title1=Sid Meiers Alpha Centauri Demo
|
||||||
|
path1=D:\Games\Sid Meiers Alpha Centauri Demo\terran.exe
|
||||||
|
startfolder1=
|
||||||
|
launchpath1=
|
||||||
|
module1=
|
||||||
|
opengllib1=
|
||||||
|
notes1=
|
||||||
|
registry1=
|
||||||
|
ver1=0
|
||||||
|
monitorid1=-1
|
||||||
|
coord1=0
|
||||||
|
flag1=673185826
|
||||||
|
flagg1=1207959616
|
||||||
|
flagh1=32788
|
||||||
|
flagi1=138420228
|
||||||
|
flagj1=4224
|
||||||
|
flagk1=65536
|
||||||
|
flagl1=0
|
||||||
|
flagm1=0
|
||||||
|
tflag1=-2147477245
|
||||||
|
dflag1=0
|
||||||
|
posx1=50
|
||||||
|
posy1=50
|
||||||
|
sizx1=800
|
||||||
|
sizy1=600
|
||||||
|
maxfps1=0
|
||||||
|
initts1=0
|
||||||
|
winver1=0
|
||||||
|
maxres1=0
|
||||||
|
swapeffect1=0
|
||||||
|
maxddinterface1=7
|
||||||
|
slowratio1=2
|
||||||
|
scanline1=0
|
||||||
|
initresw1=800
|
||||||
|
initresh1=600
|
||||||
|
title2=Diablo
|
||||||
|
path2=D:\Games\Diablo\Diablo.exe
|
||||||
|
startfolder2=
|
||||||
|
launchpath2=
|
||||||
|
module2=
|
||||||
|
opengllib2=
|
||||||
|
notes2=
|
||||||
|
registry2=
|
||||||
|
ver2=1
|
||||||
|
monitorid2=0
|
||||||
|
coord2=0
|
||||||
|
flag2=138428450
|
||||||
|
flagg2=1241514000
|
||||||
|
flagh2=8212
|
||||||
|
flagi2=4194304
|
||||||
|
flagj2=128
|
||||||
|
flagk2=262144
|
||||||
|
flagl2=0
|
||||||
|
flagm2=1024
|
||||||
|
tflag2=0
|
||||||
|
dflag2=0
|
||||||
|
posx2=50
|
||||||
|
posy2=50
|
||||||
|
sizx2=800
|
||||||
|
sizy2=600
|
||||||
|
maxfps2=0
|
||||||
|
initts2=0
|
||||||
|
winver2=0
|
||||||
|
maxres2=0
|
||||||
|
swapeffect2=0
|
||||||
|
maxddinterface2=7
|
||||||
|
slowratio2=1
|
||||||
|
scanline2=1
|
||||||
|
initresw2=0
|
||||||
|
initresh2=0
|
||||||
|
title3=TOCA Touring Car Championship demo
|
||||||
|
path3=D:\Games\tocademo\tourcars.exe
|
||||||
|
startfolder3=
|
||||||
|
launchpath3=D:\Games\tocademo\setup.exe
|
||||||
|
module3=
|
||||||
|
opengllib3=
|
||||||
|
notes3=
|
||||||
|
registry3=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters\Touring Car]\n"GameDirectory"="F:\\Games\\tourcar\\"\n"CD_Drive"="."\n"Install_Drive"="F:"\n"CardHintIndex"=dword:00000000\n"ShowRunInfo"=dword:00000000\n"S3RunInfo"=dword:00000000\n\n
|
||||||
|
ver3=0
|
||||||
|
monitorid3=-1
|
||||||
|
coord3=0
|
||||||
|
flag3=673185834
|
||||||
|
flagg3=1073741824
|
||||||
|
flagh3=528
|
||||||
|
flagi3=136314880
|
||||||
|
flagj3=4224
|
||||||
|
flagk3=65536
|
||||||
|
flagl3=0
|
||||||
|
flagm3=33554432
|
||||||
|
tflag3=-2147477245
|
||||||
|
dflag3=0
|
||||||
|
posx3=50
|
||||||
|
posy3=50
|
||||||
|
sizx3=800
|
||||||
|
sizy3=600
|
||||||
|
maxfps3=0
|
||||||
|
initts3=0
|
||||||
|
winver3=0
|
||||||
|
maxres3=0
|
||||||
|
swapeffect3=0
|
||||||
|
maxddinterface3=7
|
||||||
|
slowratio3=2
|
||||||
|
scanline3=0
|
||||||
|
initresw3=800
|
||||||
|
initresh3=600
|
||||||
|
title4=empires.exe
|
||||||
|
path4=D:\Games\Age of Empires Trial\empires.exe
|
||||||
|
startfolder4=
|
||||||
|
launchpath4=
|
||||||
|
module4=
|
||||||
|
opengllib4=
|
||||||
|
notes4=
|
||||||
|
registry4=
|
||||||
|
ver4=0
|
||||||
|
monitorid4=-1
|
||||||
|
coord4=0
|
||||||
|
flag4=673710114
|
||||||
|
flagg4=1207959552
|
||||||
|
flagh4=8212
|
||||||
|
flagi4=138412036
|
||||||
|
flagj4=4224
|
||||||
|
flagk4=65536
|
||||||
|
flagl4=0
|
||||||
|
flagm4=2097152
|
||||||
|
tflag4=0
|
||||||
|
dflag4=0
|
||||||
|
posx4=50
|
||||||
|
posy4=50
|
||||||
|
sizx4=800
|
||||||
|
sizy4=600
|
||||||
|
maxfps4=0
|
||||||
|
initts4=0
|
||||||
|
winver4=0
|
||||||
|
maxres4=0
|
||||||
|
swapeffect4=0
|
||||||
|
maxddinterface4=7
|
||||||
|
slowratio4=2
|
||||||
|
scanline4=0
|
||||||
|
initresw4=800
|
||||||
|
initresh4=600
|
@ -1533,4 +1533,17 @@ fix: moved USER32/InvalidateRect hooker to always activate it and further reduce
|
|||||||
fix: fixed virtual registry tags that introduced extra characters in key string expansion
|
fix: fixed virtual registry tags that introduced extra characters in key string expansion
|
||||||
add: hooked SelectClipRgn - preliminary to attempt fixing "Sid Meier's Alpha Centauri"
|
add: hooked SelectClipRgn - preliminary to attempt fixing "Sid Meier's Alpha Centauri"
|
||||||
fix: fixed unsupported call to SetWindowsHook(WH_CBT, NULL). Fixes "Starsiege" deaf mouse control.
|
fix: fixed unsupported call to SetWindowsHook(WH_CBT, NULL). Fixes "Starsiege" deaf mouse control.
|
||||||
fix: completed and rebuilt proxy dlls to be aligned with current DxWnd structure
|
fix: completed and rebuilt proxy dlls to be aligned with current DxWnd structure
|
||||||
|
|
||||||
|
v2.04.14
|
||||||
|
fix: virtual registry parser, token names now case insensitive (es. "path" = "Path")
|
||||||
|
fix: virtual registry crash when replacing tokens and lplpData is NULL
|
||||||
|
fix: virtual registry return code, must not return ERROR_MORE_DATA when lpData is NULL (fixes "Rollcage II")
|
||||||
|
fix: eliminated error message in virtual palette processing when color depth is 8 bits
|
||||||
|
fix: improved logging in EnumDisplayModes wrapper
|
||||||
|
fix: EnumDisplayModes wrapper for nonemulated nonwindowed mode
|
||||||
|
fix: deleted improper input clipper destruction after primary surface destruction. Fixes "Settlers III" clipper problems
|
||||||
|
add: virtual heap (makes some "Wing Commander" games work)
|
||||||
|
fix: freak help->about...
|
||||||
|
add: GUI "Tools->Recover system colors" utility
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ static int ReplaceVar(char *pData, LPBYTE *lplpData, LPDWORD lpcbData)
|
|||||||
char sTokenValue[MAX_PATH];
|
char sTokenValue[MAX_PATH];
|
||||||
// search for a matching token
|
// search for a matching token
|
||||||
for(iTokenIndex=0; sTokenLabels[iTokenIndex]; iTokenIndex++){
|
for(iTokenIndex=0; sTokenLabels[iTokenIndex]; iTokenIndex++){
|
||||||
if(!strncmp(pData, sTokenLabels[iTokenIndex], strlen(sTokenLabels[iTokenIndex]))) break;
|
if(!_strnicmp(pData, sTokenLabels[iTokenIndex], strlen(sTokenLabels[iTokenIndex]))) break;
|
||||||
}
|
}
|
||||||
// set token label length
|
// set token label length
|
||||||
iLabelLength = strlen(sTokenLabels[iTokenIndex]);
|
iLabelLength = strlen(sTokenLabels[iTokenIndex]);
|
||||||
@ -102,7 +102,7 @@ static int ReplaceVar(char *pData, LPBYTE *lplpData, LPDWORD lpcbData)
|
|||||||
// set output vars if not NULL
|
// set output vars if not NULL
|
||||||
iTokenLength = strlen(sTokenValue);
|
iTokenLength = strlen(sTokenValue);
|
||||||
OutTraceR("REPLACED token=%d val=\"%s\" len=%d\n", iTokenIndex, sTokenValue, iTokenLength);
|
OutTraceR("REPLACED token=%d val=\"%s\" len=%d\n", iTokenIndex, sTokenValue, iTokenLength);
|
||||||
if(lplpData) {
|
if(*lplpData) {
|
||||||
strcpy((char *)*lplpData, sTokenValue);
|
strcpy((char *)*lplpData, sTokenValue);
|
||||||
*lplpData += iTokenLength;
|
*lplpData += iTokenLength;
|
||||||
}
|
}
|
||||||
@ -316,9 +316,12 @@ static DWORD GetKeyValue(
|
|||||||
}
|
}
|
||||||
if(lpcbData) (*lpcbData)++; // extra space for string terminator ?
|
if(lpcbData) (*lpcbData)++; // extra space for string terminator ?
|
||||||
if(lpData && lpcbData) if(*lpcbData < cbData) *lpb = 0; // string terminator
|
if(lpData && lpcbData) if(*lpcbData < cbData) *lpb = 0; // string terminator
|
||||||
OutTraceR("%s: type=REG_SZ cbData=%x Data=\"%s\"\n",
|
OutTraceR("%s: type=REG_SZ cbData=%d Data=\"%s\"\n",
|
||||||
ApiName, lpcbData ? *lpcbData : 0, lpData ? (char *)lpData : "(NULL)");
|
ApiName, lpcbData ? *lpcbData : 0, lpData ? (char *)lpData : "(NULL)");
|
||||||
res=(*lpcbData > cbData) ? ERROR_MORE_DATA : ERROR_SUCCESS;
|
// v2.04.14 fix: ERROR_MORE_DATA should be returned only in case lpData is not NULL
|
||||||
|
res=ERROR_SUCCESS;
|
||||||
|
if(lpData && lpcbData)
|
||||||
|
if (*lpcbData > cbData) res = ERROR_MORE_DATA;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value
|
if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value
|
||||||
@ -378,10 +381,10 @@ static void LogKeyValue(char *ApiName, LONG res, LPDWORD lpType, LPBYTE lpData,
|
|||||||
{
|
{
|
||||||
char sInfo[1024];
|
char sInfo[1024];
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTrace("%s: ERROR res=%x\n", ApiName, res);
|
OutTrace("%s: ERROR res=%d\n", ApiName, res);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sprintf(sInfo, "%s: res=0 size=%d type=%x(%s)",
|
sprintf(sInfo, "%s: res=ERROR_SUCCESS size=%d type=%x(%s)",
|
||||||
ApiName, lpcbData?*lpcbData:0, lpType?*lpType:0, lpType?ExplainRegType(*lpType):"none");
|
ApiName, lpcbData?*lpcbData:0, lpType?*lpType:0, lpType?ExplainRegType(*lpType):"none");
|
||||||
if(lpType && lpData && lpcbData) {
|
if(lpType && lpData && lpcbData) {
|
||||||
DWORD cbData = *lpcbData;
|
DWORD cbData = *lpcbData;
|
||||||
|
@ -112,6 +112,11 @@ static HRESULT sBltNoPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case DDERR_SURFACELOST:
|
||||||
|
lpdds->Restore();
|
||||||
|
res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);
|
||||||
|
OutTraceDW("Blt SURFACELOST RETRY: ret=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -267,6 +272,11 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR
|
|||||||
if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__);
|
if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__);
|
||||||
(*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp);
|
(*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp);
|
||||||
}
|
}
|
||||||
|
if(res==DDERR_SURFACELOST){
|
||||||
|
lpdds->Restore();
|
||||||
|
res=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx);
|
||||||
|
OutTraceDW("Blt SURFACELOST RETRY: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
}
|
||||||
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1052,7 +1052,11 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
|
|||||||
// v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice
|
// v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice
|
||||||
OutTraceDW("CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));
|
OutTraceDW("CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));
|
||||||
lpDDZBuffer = *lplpdds;
|
lpDDZBuffer = *lplpdds;
|
||||||
|
// save surface size expressed in bytes
|
||||||
|
extern int ZBufferSize;
|
||||||
|
ZBufferSize = lpddsd->dwWidth * lpddsd->dwHeight * (lpddsd->ddpfPixelFormat.dwZBufferBitDepth >> 3);
|
||||||
dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps);
|
dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps);
|
||||||
|
OutTraceDW("CreateSurface: ZBufferSize=%d\n", ZBufferSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
124
dll/ddraw.cpp
124
dll/ddraw.cpp
@ -425,6 +425,7 @@ extern PALETTEENTRY DefaultSystemPalette[256];
|
|||||||
LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL;
|
LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL;
|
||||||
LPDIRECTDRAWSURFACE lpDDSEmu_Back=NULL;
|
LPDIRECTDRAWSURFACE lpDDSEmu_Back=NULL;
|
||||||
LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; // BEWARE! Likely, this global is useless ....
|
LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; // BEWARE! Likely, this global is useless ....
|
||||||
|
int ZBufferSize;
|
||||||
// v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all
|
// v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all
|
||||||
// the service objects (emulated backbuffer, emulater primary, ....) are attached.
|
// the service objects (emulated backbuffer, emulater primary, ....) are attached.
|
||||||
LPDIRECTDRAW lpPrimaryDD=NULL;
|
LPDIRECTDRAW lpPrimaryDD=NULL;
|
||||||
@ -686,6 +687,10 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
|
|||||||
:
|
:
|
||||||
(((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xF8) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3);
|
(((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xF8) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3);
|
||||||
break;
|
break;
|
||||||
|
case 8: // it may happen in unemulated modes
|
||||||
|
PaletteEntries[i + dwstart] =
|
||||||
|
(((DWORD)PalColor.peRed) << 16) + (((DWORD)PalColor.peGreen) << 8) + ((DWORD)PalColor.peBlue);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
OutTraceDW("ASSERT: unsupported Color BPP=%d\n", dxw.ActualPixelFormat.dwRGBBitCount);
|
OutTraceDW("ASSERT: unsupported Color BPP=%d\n", dxw.ActualPixelFormat.dwRGBBitCount);
|
||||||
break;
|
break;
|
||||||
@ -3402,8 +3407,12 @@ HRESULT WINAPI extGetPalette(int dxversion, GetPalette_Type pGetPalette, LPDIREC
|
|||||||
res=DD_OK;
|
res=DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res) OutTraceE("GetPalette: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
if (res) {
|
||||||
else OutTraceDDRAW("GetPalette: OK\n");
|
OutTraceE("GetPalette: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OutTraceDDRAW("GetPalette: OK lplpddp=%x\n", *lplpddp);
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3650,7 +3659,6 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR
|
|||||||
HRESULT res, res2;
|
HRESULT res, res2;
|
||||||
static RECT client;
|
static RECT client;
|
||||||
POINT upleft={0,0};
|
POINT upleft={0,0};
|
||||||
LPDIRECTDRAWSURFACE lpDDSPrim;
|
|
||||||
Blt_Type pBlt;
|
Blt_Type pBlt;
|
||||||
GetGDISurface_Type pGetGDISurface;
|
GetGDISurface_Type pGetGDISurface;
|
||||||
|
|
||||||
@ -3675,7 +3683,7 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR
|
|||||||
|
|
||||||
// V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created
|
// V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created
|
||||||
if(lpPrimaryDD){
|
if(lpPrimaryDD){
|
||||||
lpDDSPrim=0;
|
LPDIRECTDRAWSURFACE lpDDSPrim = 0;
|
||||||
res2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
res2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||||
if(res2)
|
if(res2)
|
||||||
OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__);
|
OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__);
|
||||||
@ -3794,7 +3802,20 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA
|
|||||||
OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect);
|
OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
pBlt = pGetBltMethod(dxversion);
|
if ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && (dxwcdb.GetCaps(lpdds) & DDSCAPS_ZBUFFER)){
|
||||||
|
DWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);
|
||||||
|
DDSURFACEDESC2 ddsd;
|
||||||
|
memset(&ddsd, 0, dwSize);
|
||||||
|
ddsd.dwSize = dwSize;
|
||||||
|
res=(*pUnlock)(lpdds, NULL);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__);
|
||||||
|
res=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Lock err=%x at %d\n", res, __LINE__);
|
||||||
|
memset(ddsd.lpSurface, 0xFF, ZBufferSize);
|
||||||
|
res=(*pUnlock)(lpdds, lprect);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
switch(dxversion){
|
switch(dxversion){
|
||||||
case 4:
|
case 4:
|
||||||
@ -3858,6 +3879,7 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA
|
|||||||
res=(*pUnlock)(lpdds, lprect);
|
res=(*pUnlock)(lpdds, lprect);
|
||||||
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
|
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
|
||||||
if (IsPrim && res==DD_OK) {
|
if (IsPrim && res==DD_OK) {
|
||||||
|
pBlt = pGetBltMethod(dxversion);
|
||||||
if(dxversion < 4) lprect=NULL; // v2.03.60
|
if(dxversion < 4) lprect=NULL; // v2.03.60
|
||||||
res=sBlt(dxversion, pBlt, "Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
res=sBlt(dxversion, pBlt, "Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
||||||
}
|
}
|
||||||
@ -3885,17 +3907,46 @@ HRESULT WINAPI extUnlock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)
|
|||||||
static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)
|
static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
//RECT screen, rect;
|
|
||||||
BOOL IsPrim;
|
BOOL IsPrim;
|
||||||
BOOL IsBack;
|
BOOL IsBack;
|
||||||
LPDIRECTDRAWSURFACE lpDDSPrim;
|
|
||||||
GetGDISurface_Type pGetGDISurface;
|
|
||||||
Blt_Type pBlt;
|
Blt_Type pBlt;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
|
|
||||||
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
||||||
IsBack=dxwss.IsABackBufferSurface(lpdds);
|
IsBack=dxwss.IsABackBufferSurface(lpdds);
|
||||||
|
|
||||||
|
if(IsTraceDDRAW){
|
||||||
|
char sRect[81];
|
||||||
|
switch(dxversion){
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
sprintf_s(sRect, 80, "lpvoid=%x", lprect);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
case 7:
|
||||||
|
if (lprect) sprintf_s(sRect, 80, "rect=(%d,%d)-(%d,%d)", lprect->left, lprect->top, lprect->right, lprect->bottom);
|
||||||
|
else strcpy(sRect, "rect=(NULL)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && (dxwcdb.GetCaps(lpdds) & DDSCAPS_ZBUFFER)){
|
||||||
|
DWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);
|
||||||
|
DDSURFACEDESC2 ddsd;
|
||||||
|
memset(&ddsd, 0, dwSize);
|
||||||
|
ddsd.dwSize = dwSize;
|
||||||
|
res=(*pUnlock)(lpdds, NULL);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__);
|
||||||
|
res=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Lock err=%x at %d\n", res, __LINE__);
|
||||||
|
memset(ddsd.lpSurface, 0xFF, ZBufferSize);
|
||||||
|
res=(*pUnlock)(lpdds, lprect);
|
||||||
|
if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
switch(dxversion){
|
switch(dxversion){
|
||||||
case 4:
|
case 4:
|
||||||
// v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1}
|
// v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1}
|
||||||
@ -3914,28 +3965,13 @@ static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECT
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsTraceDDRAW){
|
|
||||||
char sRect[81];
|
|
||||||
switch(dxversion){
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
sprintf_s(sRect, 80, "lpvoid=%x", lprect);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
case 7:
|
|
||||||
if (lprect) sprintf_s(sRect, 80, "rect=(%d,%d)-(%d,%d)", lprect->left, lprect->top, lprect->right, lprect->bottom);
|
|
||||||
else strcpy(sRect, "rect=(NULL)");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
// v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ...
|
// v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ...
|
||||||
pBlt = pGetBltMethod(dxversion);
|
pBlt = pGetBltMethod(dxversion);
|
||||||
pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion);
|
|
||||||
|
|
||||||
if(dxw.dwFlags1 & LOCKEDSURFACE){
|
if(dxw.dwFlags1 & LOCKEDSURFACE){
|
||||||
|
LPDIRECTDRAWSURFACE lpDDSPrim = 0;
|
||||||
|
GetGDISurface_Type pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion);
|
||||||
|
|
||||||
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||||
if(lpdds==lpDDSPrim && lpDDSBuffer){
|
if(lpdds==lpDDSPrim && lpDDSBuffer){
|
||||||
RECT client;
|
RECT client;
|
||||||
@ -3954,11 +3990,11 @@ static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECT
|
|||||||
|
|
||||||
res=(*pUnlock)(lpdds, lprect);
|
res=(*pUnlock)(lpdds, lprect);
|
||||||
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 (IsPrim && res==DD_OK) {
|
if (IsPrim && res==DD_OK) {
|
||||||
if(dxversion < 4) lprect=NULL; // v2.03.60
|
if(dxversion < 4) lprect=NULL; // v2.03.60
|
||||||
res=sBlt(dxversion, pBlt, "Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
res=sBlt(dxversion, pBlt, "Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);
|
||||||
}
|
}
|
||||||
|
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
||||||
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
|
||||||
if((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) {
|
if((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) {
|
||||||
// Texture Handling on Unlock
|
// Texture Handling on Unlock
|
||||||
@ -4141,13 +4177,19 @@ HRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID l
|
|||||||
{
|
{
|
||||||
OutTrace("EnumModesCallback:\n");
|
OutTrace("EnumModesCallback:\n");
|
||||||
OutTrace("\tdwSize=%d\n", lpDDSurfaceDesc->dwSize);
|
OutTrace("\tdwSize=%d\n", lpDDSurfaceDesc->dwSize);
|
||||||
|
OutTrace("\tddpfPixelFormat depth=%d rgba=(%X-%X-%X-%X)\n",
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount,
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask,
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask,
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask,
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBAlphaBitMask);
|
||||||
OutTrace("\tdwFlags=%x(%s)\n", lpDDSurfaceDesc->dwFlags, ExplainFlags(lpDDSurfaceDesc->dwFlags));
|
OutTrace("\tdwFlags=%x(%s)\n", lpDDSurfaceDesc->dwFlags, ExplainFlags(lpDDSurfaceDesc->dwFlags));
|
||||||
OutTrace("\tdwWidth x dwHeight=(%d,%d)\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight);
|
OutTrace("\tdwWidth x dwHeight=(%d,%d)\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight);
|
||||||
OutTrace("\tlPitch=%d\n", lpDDSurfaceDesc->lPitch);
|
OutTrace("\tlPitch=%d\n", lpDDSurfaceDesc->lPitch);
|
||||||
OutTrace("\tdwBackBufferCount=%d\n", lpDDSurfaceDesc->dwBackBufferCount);
|
//OutTrace("\tdwBackBufferCount=%d\n", lpDDSurfaceDesc->dwBackBufferCount);
|
||||||
OutTrace("\tdwRefreshRate=%d\n", lpDDSurfaceDesc->dwRefreshRate);
|
OutTrace("\tdwRefreshRate=%d\n", lpDDSurfaceDesc->dwRefreshRate);
|
||||||
OutTrace("\tlpSurface=%x\n", lpDDSurfaceDesc->lpSurface);
|
//OutTrace("\tlpSurface=%x\n", lpDDSurfaceDesc->lpSurface);
|
||||||
OutTrace("\tCaps=%x(%s)\n", lpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps));
|
//OutTrace("\tCaps=%x(%s)\n", lpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps));
|
||||||
//if ((NewContext_Type *)lpContext->dxversion >= 4) {
|
//if ((NewContext_Type *)lpContext->dxversion >= 4) {
|
||||||
// OutTrace("\tddpfPixelFormat %s\n", DumpPixelFormat((LPDDSURFACEDESC2)lpDDSurfaceDesc));
|
// OutTrace("\tddpfPixelFormat %s\n", DumpPixelFormat((LPDDSURFACEDESC2)lpDDSurfaceDesc));
|
||||||
//}
|
//}
|
||||||
@ -4241,10 +4283,23 @@ HRESULT WINAPI myEnumModesFilterNative(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID l
|
|||||||
|
|
||||||
if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
|
if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
|
||||||
res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext);
|
res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext);
|
||||||
OutTraceDW("EnumDisplayModes(D): native size=(%d,%d) res=%x\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight, res);
|
OutTraceDW("EnumDisplayModes(D): native size=(%d,%d) bpp=%d res=%x\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount, res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *sDisplayModesFlags(DWORD dwFlags)
|
||||||
|
{
|
||||||
|
static char sBuf[81];
|
||||||
|
size_t l;
|
||||||
|
strcpy(sBuf, "DDEDM_");
|
||||||
|
if(dwFlags & DDEDM_REFRESHRATES) strcat(sBuf, "REFRESHRATES+");
|
||||||
|
if(dwFlags & DDEDM_STANDARDVGAMODES) strcat(sBuf, "STANDARDVGAMODES+");
|
||||||
|
l=strlen(sBuf);
|
||||||
|
if (l>strlen("DDEDM_")) sBuf[l-1]=0; // delete last '+' if any
|
||||||
|
else sBuf[0]=0;
|
||||||
|
return(sBuf);
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDisplayModes, LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)
|
HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDisplayModes, LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -4254,7 +4309,8 @@ HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDi
|
|||||||
OutTraceDDRAW("EnumDisplayModes(D%d): lpdd=%x flags=%x lpddsd=%x callback=%x\n", dxversion, lpdd, dwflags, lpddsd, cb);
|
OutTraceDDRAW("EnumDisplayModes(D%d): lpdd=%x flags=%x lpddsd=%x callback=%x\n", dxversion, lpdd, dwflags, lpddsd, cb);
|
||||||
if(lpddsd) OutTraceDDRAW("EnumDisplayModes(D): %s\n", LogSurfaceAttributes(lpddsd, "EnumDisplayModes", __LINE__));
|
if(lpddsd) OutTraceDDRAW("EnumDisplayModes(D): %s\n", LogSurfaceAttributes(lpddsd, "EnumDisplayModes", __LINE__));
|
||||||
|
|
||||||
if(dxw.dwFlags4 & NATIVERES){
|
if ((dxw.dwFlags4 & NATIVERES) ||
|
||||||
|
(!(dxw.dwFlags1 & EMULATESURFACE) && !dxw.Windowize)){ // v2.04.14 - make nonemulated nonwindowed mode work ...
|
||||||
NewContext.dwWidth = 0;
|
NewContext.dwWidth = 0;
|
||||||
NewContext.dwHeight = 0;
|
NewContext.dwHeight = 0;
|
||||||
NewContext.lpContext = lpContext;
|
NewContext.lpContext = lpContext;
|
||||||
@ -4424,7 +4480,9 @@ HRESULT WINAPI extReleaseS(ReleaseS_Type pReleaseS, LPDIRECTDRAWSURFACE lpdds)
|
|||||||
if(IsPrim || IsBack) dxwss.UnrefSurface(lpdds);
|
if(IsPrim || IsBack) dxwss.UnrefSurface(lpdds);
|
||||||
|
|
||||||
// when releasing primary surface, erase clipping region
|
// when releasing primary surface, erase clipping region
|
||||||
if(IsPrim && (dxw.dwFlags1 & CLIPCURSOR)) dxw.EraseClipCursor();
|
// v2.04.14: commented out, better not to! The game could close and reopen a new primary surface.
|
||||||
|
// fixes "Settlers III" clipping problems
|
||||||
|
// if(IsPrim && (dxw.dwFlags1 & CLIPCURSOR)) dxw.EraseClipCursor();
|
||||||
|
|
||||||
// clear service surface pointers
|
// clear service surface pointers
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE) {
|
if (dxw.dwFlags1 & EMULATESURFACE) {
|
||||||
|
@ -1825,6 +1825,7 @@ char *ExplainDDError(DWORD c)
|
|||||||
case DDERR_WASSTILLDRAWING: eb="DDERR_WASSTILLDRAWING"; break;
|
case DDERR_WASSTILLDRAWING: eb="DDERR_WASSTILLDRAWING"; break;
|
||||||
case DDERR_WRONGMODE: eb="DDERR_WRONGMODE"; break;
|
case DDERR_WRONGMODE: eb="DDERR_WRONGMODE"; break;
|
||||||
case DDERR_XALIGN: eb="DDERR_XALIGN"; break;
|
case DDERR_XALIGN: eb="DDERR_XALIGN"; break;
|
||||||
|
case DDERR_NOTONMIPMAPSUBLEVEL: eb="DDERR_NOTONMIPMAPSUBLEVEL"; break;
|
||||||
// D3D errors
|
// D3D errors
|
||||||
case D3DERR_WRONGTEXTUREFORMAT: eb="D3DERR_WRONGTEXTUREFORMAT"; break;
|
case D3DERR_WRONGTEXTUREFORMAT: eb="D3DERR_WRONGTEXTUREFORMAT"; break;
|
||||||
case D3DERR_UNSUPPORTEDCOLOROPERATION: eb="D3DERR_UNSUPPORTEDCOLOROPERATION"; break;
|
case D3DERR_UNSUPPORTEDCOLOROPERATION: eb="D3DERR_UNSUPPORTEDCOLOROPERATION"; break;
|
||||||
|
@ -468,6 +468,10 @@ void dxwCore::SetClipCursor()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check for errors to avoid setting random clip regions
|
// check for errors to avoid setting random clip regions
|
||||||
|
//if((*pIsWindowVisible)(hWnd)){
|
||||||
|
// OutTraceE("SetClipCursor: not visible\n");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
if(!(*pGetClientRect)(hWnd, &Rect)){
|
if(!(*pGetClientRect)(hWnd, &Rect)){
|
||||||
OutTraceE("SetClipCursor: GetClientRect ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
OutTraceE("SetClipCursor: GetClientRect ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
return;
|
return;
|
||||||
|
@ -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.04.13"
|
#define VERSION "2.04.14"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
|
|
||||||
@ -358,8 +358,8 @@ static char *FlagNames[9][32] ={{
|
|||||||
"PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK",
|
"PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK",
|
||||||
"DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16",
|
"DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16",
|
||||||
"MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION",
|
"MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION",
|
||||||
"DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "",
|
"DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "CLIPMENU",
|
||||||
"", "", "", "",
|
"BACKGROUNDPRIORITY", "OFFSCREENZBUFFER", "VIRTUALHEAP", "ZBUFFERHARDCLEAN",
|
||||||
"", "", "", "",
|
"", "", "", "",
|
||||||
},{
|
},{
|
||||||
// TFlags
|
// TFlags
|
||||||
|
Binary file not shown.
268
dll/kernel32.cpp
268
dll/kernel32.cpp
@ -20,6 +20,14 @@ LPVOID WINAPI extVirtualAlloc(LPVOID, SIZE_T, DWORD, DWORD);
|
|||||||
UINT WINAPI extWinExec(LPCSTR, UINT);
|
UINT WINAPI extWinExec(LPCSTR, UINT);
|
||||||
BOOL WINAPI extSetPriorityClass(HANDLE, DWORD);
|
BOOL WINAPI extSetPriorityClass(HANDLE, DWORD);
|
||||||
BOOL WINAPI extGlobalUnlock(HGLOBAL);
|
BOOL WINAPI extGlobalUnlock(HGLOBAL);
|
||||||
|
LPVOID WINAPI extHeapAlloc(HANDLE, DWORD, SIZE_T);
|
||||||
|
LPVOID WINAPI extHeapReAlloc(HANDLE, DWORD, LPVOID, SIZE_T);
|
||||||
|
HANDLE WINAPI extHeapCreate(DWORD, SIZE_T, SIZE_T);
|
||||||
|
BOOL WINAPI extHeapFree(HANDLE, DWORD, LPVOID);
|
||||||
|
BOOL WINAPI extHeapValidate(HANDLE, DWORD, LPVOID);
|
||||||
|
SIZE_T WINAPI extHeapCompact(HANDLE, DWORD);
|
||||||
|
HANDLE WINAPI extGetProcessHeap(void);
|
||||||
|
BOOL WINAPI extHeapDestroy(HANDLE);
|
||||||
|
|
||||||
typedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD);
|
typedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD);
|
||||||
typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES,
|
typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES,
|
||||||
@ -27,12 +35,26 @@ typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTE
|
|||||||
typedef BOOL (WINAPI *SetPriorityClass_Type)(HANDLE, DWORD);
|
typedef BOOL (WINAPI *SetPriorityClass_Type)(HANDLE, DWORD);
|
||||||
typedef UINT (WINAPI *WinExec_Type)(LPCSTR, UINT);
|
typedef UINT (WINAPI *WinExec_Type)(LPCSTR, UINT);
|
||||||
typedef BOOL (WINAPI *GlobalUnlock_Type)(HGLOBAL);
|
typedef BOOL (WINAPI *GlobalUnlock_Type)(HGLOBAL);
|
||||||
|
typedef LPVOID (WINAPI *HeapAlloc_Type)(HANDLE, DWORD, SIZE_T);
|
||||||
|
typedef LPVOID (WINAPI *HeapReAlloc_Type)(HANDLE, DWORD, LPVOID, SIZE_T);
|
||||||
|
typedef HANDLE (WINAPI *HeapCreate_Type)(DWORD, SIZE_T, SIZE_T);
|
||||||
|
typedef BOOL (WINAPI *HeapFree_Type)(HANDLE, DWORD, LPVOID);
|
||||||
|
typedef SIZE_T (WINAPI *HeapCompact_Type)(HANDLE, DWORD);
|
||||||
|
typedef HANDLE (WINAPI *GetProcessHeap_Type)(void);
|
||||||
|
typedef BOOL (WINAPI *HeapDestroy_Type)(HANDLE);
|
||||||
|
|
||||||
CreateProcessA_Type pCreateProcessA = NULL;
|
CreateProcessA_Type pCreateProcessA = NULL;
|
||||||
VirtualAlloc_Type pVirtualAlloc = NULL;
|
VirtualAlloc_Type pVirtualAlloc = NULL;
|
||||||
WinExec_Type pWinExec = NULL;
|
WinExec_Type pWinExec = NULL;
|
||||||
SetPriorityClass_Type pSetPriorityClass = NULL;
|
SetPriorityClass_Type pSetPriorityClass = NULL;
|
||||||
GlobalUnlock_Type pGlobalUnlock = NULL;
|
GlobalUnlock_Type pGlobalUnlock = NULL;
|
||||||
|
HeapAlloc_Type pHeapAlloc;
|
||||||
|
HeapReAlloc_Type pHeapReAlloc;
|
||||||
|
HeapCreate_Type pHeapCreate;
|
||||||
|
HeapFree_Type pHeapFree, pHeapValidate;
|
||||||
|
HeapCompact_Type pHeapCompact;
|
||||||
|
GetProcessHeap_Type pGetProcessHeap;
|
||||||
|
HeapDestroy_Type pHeapDestroy;
|
||||||
|
|
||||||
typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE);
|
typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE);
|
||||||
FreeLibrary_Type pFreeLibrary = NULL;
|
FreeLibrary_Type pFreeLibrary = NULL;
|
||||||
@ -79,6 +101,18 @@ static HookEntryEx_Type Hooks[]={
|
|||||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HookEntryEx_Type HeapHooks[]={
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapCreate", (FARPROC)HeapCreate, (FARPROC *)&pHeapCreate, (FARPROC)extHeapCreate},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapAlloc", (FARPROC)HeapAlloc, (FARPROC *)&pHeapAlloc, (FARPROC)extHeapAlloc},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapReAlloc", (FARPROC)HeapReAlloc, (FARPROC *)&pHeapReAlloc, (FARPROC)extHeapReAlloc},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapFree", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapValidate", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapCompact", (FARPROC)HeapCompact, (FARPROC *)&pHeapCompact, (FARPROC)extHeapCompact},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "HeapDestroy", (FARPROC)HeapDestroy, (FARPROC *)&pHeapDestroy, (FARPROC)extHeapDestroy},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, "GetProcessHeap", (FARPROC)GetProcessHeap, (FARPROC *)&pGetProcessHeap, (FARPROC)extGetProcessHeap},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||||
|
};
|
||||||
|
|
||||||
static HookEntryEx_Type FixAllocHooks[]={
|
static HookEntryEx_Type FixAllocHooks[]={
|
||||||
{HOOK_IAT_CANDIDATE, 0, "VirtualAlloc", (FARPROC)VirtualAlloc, (FARPROC *)&pVirtualAlloc, (FARPROC)extVirtualAlloc},
|
{HOOK_IAT_CANDIDATE, 0, "VirtualAlloc", (FARPROC)VirtualAlloc, (FARPROC *)&pVirtualAlloc, (FARPROC)extVirtualAlloc},
|
||||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||||
@ -127,6 +161,7 @@ void HookKernel32(HMODULE module)
|
|||||||
if(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname);
|
if(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname);
|
||||||
if(dxw.dwFlags2 & FAKEVERSION) HookLibraryEx(module, VersionHooks, libname);
|
if(dxw.dwFlags2 & FAKEVERSION) HookLibraryEx(module, VersionHooks, libname);
|
||||||
if(dxw.dwFlags6 & LEGACYALLOC) HookLibraryEx(module, FixAllocHooks, libname);
|
if(dxw.dwFlags6 & LEGACYALLOC) HookLibraryEx(module, FixAllocHooks, libname);
|
||||||
|
if(dxw.dwFlags8 & VIRTUALHEAP) HookLibraryEx(module, HeapHooks, libname);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookKernel32Init()
|
void HookKernel32Init()
|
||||||
@ -137,6 +172,7 @@ void HookKernel32Init()
|
|||||||
HookLibInitEx(TimeHooks);
|
HookLibInitEx(TimeHooks);
|
||||||
HookLibInitEx(VersionHooks);
|
HookLibInitEx(VersionHooks);
|
||||||
HookLibInitEx(FixAllocHooks);
|
HookLibInitEx(FixAllocHooks);
|
||||||
|
HookLibInitEx(HeapHooks);
|
||||||
}
|
}
|
||||||
|
|
||||||
FARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
FARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
||||||
@ -167,6 +203,10 @@ FARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|||||||
|
|
||||||
if(dxw.dwFlags6 & LEGACYALLOC)
|
if(dxw.dwFlags6 & LEGACYALLOC)
|
||||||
if (addr=RemapLibraryEx(proc, hModule, FixAllocHooks)) return addr;
|
if (addr=RemapLibraryEx(proc, hModule, FixAllocHooks)) return addr;
|
||||||
|
|
||||||
|
if(dxw.dwFlags8 & VIRTUALHEAP)
|
||||||
|
if (addr=RemapLibraryEx(proc, hModule, HeapHooks)) return addr;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1495,4 +1535,230 @@ BOOL WINAPI extGlobalUnlock(HGLOBAL hMem)
|
|||||||
hLastMem = hMem;
|
hLastMem = hMem;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// Virtual Heap
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
static LPVOID VHeapMin = (LPVOID)0xFFFFFFFF;
|
||||||
|
static LPVOID VHeapMax = (LPVOID)0x00000000;
|
||||||
|
static int iProg = 1;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
LPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes)
|
||||||
|
{
|
||||||
|
LPVOID ret;
|
||||||
|
OutTraceB("HeapAlloc: heap=%x flags=%x bytes=%d\n", hHeap, dwFlags, dwBytes);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){
|
||||||
|
ret = malloc(dwBytes);
|
||||||
|
if(ret){
|
||||||
|
if(ret > VHeapMax) VHeapMax = ret;
|
||||||
|
if(ret < VHeapMin) VHeapMin = ret;
|
||||||
|
}
|
||||||
|
OutTraceB("HeapAlloc: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapAlloc)(hHeap, dwFlags, dwBytes);
|
||||||
|
OutTraceB("HeapAlloc: ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
LPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes)
|
||||||
|
{
|
||||||
|
LPVOID ret;
|
||||||
|
OutTraceB("HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\n", hHeap, dwFlags, lpMem, dwBytes);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){
|
||||||
|
ret = realloc(lpMem, dwBytes);
|
||||||
|
if(ret){
|
||||||
|
if(ret > VHeapMax) VHeapMax = ret;
|
||||||
|
if(ret < VHeapMin) VHeapMin = ret;
|
||||||
|
}
|
||||||
|
OutTraceB("HeapReAlloc: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapReAlloc)(hHeap, dwFlags, lpMem, dwBytes);
|
||||||
|
OutTraceB("HeapReAlloc: ret=%X\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapFree: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem);
|
||||||
|
if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){
|
||||||
|
free(lpMem);
|
||||||
|
ret = TRUE;
|
||||||
|
OutTraceB("HeapFree: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapFree)(hHeap, dwFlags, lpMem);
|
||||||
|
OutTraceB("HeapFree: ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapValidate: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem);
|
||||||
|
if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){
|
||||||
|
ret = TRUE;
|
||||||
|
OutTraceB("HeapValidate: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapValidate)(hHeap, dwFlags, lpMem);
|
||||||
|
OutTraceB("HeapValidate: ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
SIZE_T ret;
|
||||||
|
OutTraceB("HeapCompact: heap=%x flags=%x\n", hHeap, dwFlags);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){
|
||||||
|
ret = 100000; // just a number ....
|
||||||
|
OutTraceB("HeapCompact: (virtual) ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapCompact)(hHeap, dwFlags);
|
||||||
|
OutTraceB("HeapCompact: ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)
|
||||||
|
{
|
||||||
|
HANDLE ret;
|
||||||
|
OutTraceB("HeapCreate: flags=%x size(init-max)=(%d-%d)\n", flOptions, dwInitialSize, dwMaximumSize);
|
||||||
|
//flOptions &= ~HEAP_NO_SERIALIZE;
|
||||||
|
//ret = (*pHeapCreate)(flOptions, dwInitialSize, dwMaximumSize);
|
||||||
|
ret = (HANDLE)(0xDEADBEEF + iProg++);
|
||||||
|
OutTraceB("HeapCreate: (virtual) ret=%X\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE WINAPI extGetProcessHeap(void)
|
||||||
|
{
|
||||||
|
OutTraceB("GetProcessHeap: (virtual) ret=0xDEADBEEF\n");
|
||||||
|
return (HANDLE)0xDEADBEEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapDestroy(HANDLE hHeap)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapDestroy: heap=%x\n", hHeap);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg))
|
||||||
|
ret = TRUE;
|
||||||
|
else
|
||||||
|
ret = (*pHeapDestroy)(hHeap);
|
||||||
|
OutTraceB("HeapDestroy: ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
LPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes)
|
||||||
|
{
|
||||||
|
LPVOID ret;
|
||||||
|
OutTraceB("HeapAlloc: heap=%x flags=%x bytes=%d\n", hHeap, dwFlags, dwBytes);
|
||||||
|
ret = malloc(dwBytes);
|
||||||
|
if(ret){
|
||||||
|
if(ret > VHeapMax) VHeapMax = ret;
|
||||||
|
if(ret < VHeapMin) VHeapMin = ret;
|
||||||
|
}
|
||||||
|
OutTraceB("HeapAlloc: (virtual) ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
LPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes)
|
||||||
|
{
|
||||||
|
LPVOID ret;
|
||||||
|
OutTraceB("HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\n", hHeap, dwFlags, lpMem, dwBytes);
|
||||||
|
ret = realloc(lpMem, dwBytes);
|
||||||
|
if(ret){
|
||||||
|
if(ret > VHeapMax) VHeapMax = ret;
|
||||||
|
if(ret < VHeapMin) VHeapMin = ret;
|
||||||
|
}
|
||||||
|
OutTraceB("HeapReAlloc: (virtual) ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapFree: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem);
|
||||||
|
if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){
|
||||||
|
free(lpMem);
|
||||||
|
ret = TRUE;
|
||||||
|
OutTraceB("HeapFree: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapFree)(hHeap, dwFlags, lpMem);
|
||||||
|
OutTraceB("HeapFree: ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapValidate: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem);
|
||||||
|
if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){
|
||||||
|
ret = TRUE;
|
||||||
|
OutTraceB("HeapValidate: (virtual) ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapValidate)(hHeap, dwFlags, lpMem);
|
||||||
|
OutTraceB("HeapValidate: ret=%x\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
SIZE_T ret;
|
||||||
|
OutTraceB("HeapCompact: heap=%x flags=%x\n", hHeap, dwFlags);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){
|
||||||
|
ret = 100000; // just a number ....
|
||||||
|
OutTraceB("HeapCompact: (virtual) ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = (*pHeapCompact)(hHeap, dwFlags);
|
||||||
|
OutTraceB("HeapCompact: ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)
|
||||||
|
{
|
||||||
|
HANDLE ret;
|
||||||
|
OutTraceB("HeapCreate: flags=%x size(init-max)=(%d-%d)\n", flOptions, dwInitialSize, dwMaximumSize);
|
||||||
|
ret = (HANDLE)(0xDEADBEEF + iProg++);
|
||||||
|
OutTraceB("HeapCreate: (virtual) ret=%X\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE WINAPI extGetProcessHeap(void)
|
||||||
|
{
|
||||||
|
OutTraceB("GetProcessHeap: (virtual) ret=0xDEADBEEF\n");
|
||||||
|
return (HANDLE)0xDEADBEEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extHeapDestroy(HANDLE hHeap)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceB("HeapDestroy: heap=%x\n", hHeap);
|
||||||
|
if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg))
|
||||||
|
ret = TRUE;
|
||||||
|
else
|
||||||
|
ret = (*pHeapDestroy)(hHeap);
|
||||||
|
OutTraceB("HeapDestroy: ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -227,4 +227,3 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ static HookEntryEx_Type Hooks[]={
|
|||||||
{HOOK_HOT_CANDIDATE, 0, "GetWindowLongA", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLongA, (FARPROC)extGetWindowLongA},
|
{HOOK_HOT_CANDIDATE, 0, "GetWindowLongA", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLongA, (FARPROC)extGetWindowLongA},
|
||||||
{HOOK_HOT_CANDIDATE, 0, "SetWindowLongW", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW},
|
{HOOK_HOT_CANDIDATE, 0, "SetWindowLongW", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW},
|
||||||
{HOOK_HOT_CANDIDATE, 0, "GetWindowLongW", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW},
|
{HOOK_HOT_CANDIDATE, 0, "GetWindowLongW", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW},
|
||||||
{HOOK_IAT_CANDIDATE, 0, "IsWindowVisible", (FARPROC)NULL, (FARPROC *)&pIsWindowVisible, (FARPROC)extIsWindowVisible},
|
{HOOK_IAT_CANDIDATE, 0, "IsWindowVisible", (FARPROC)IsWindowVisible, (FARPROC *)&pIsWindowVisible, (FARPROC)extIsWindowVisible}, // ref. in dxw.SetClipper, CreateWindowCommon
|
||||||
{HOOK_IAT_CANDIDATE, 0, "GetTopWindow", (FARPROC)GetTopWindow, (FARPROC *)&pGetTopWindow, (FARPROC)extGetTopWindow},
|
{HOOK_IAT_CANDIDATE, 0, "GetTopWindow", (FARPROC)GetTopWindow, (FARPROC *)&pGetTopWindow, (FARPROC)extGetTopWindow},
|
||||||
// hot by MinHook since v2.03.07
|
// hot by MinHook since v2.03.07
|
||||||
{HOOK_HOT_CANDIDATE, 0, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA},
|
{HOOK_HOT_CANDIDATE, 0, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA},
|
||||||
@ -676,6 +676,13 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dxw.Windowize && dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){
|
||||||
|
if(dxw.dwFlags1 & CLIPCURSOR){
|
||||||
|
OutTraceDW("ShowWindow: clipper on main win %s\n", (nCmdShow==SW_HIDE)?"OFF":"ON");
|
||||||
|
(nCmdShow==SW_HIDE) ? dxw.EraseClipCursor() : dxw.SetClipCursor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nOrigCmd = nCmdShow;
|
nOrigCmd = nCmdShow;
|
||||||
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
|
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
|
||||||
if(nCmdShow==SW_MAXIMIZE){
|
if(nCmdShow==SW_MAXIMIZE){
|
||||||
@ -1756,6 +1763,8 @@ static HWND WINAPI CreateWindowCommon(
|
|||||||
(*pShowWindow)(hwnd, SW_SHOWNORMAL);
|
(*pShowWindow)(hwnd, SW_SHOWNORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if (isNewDesktop) dxw.SethWnd(hwnd);
|
||||||
|
|
||||||
if ((dxw.dwFlags1 & FIXWINFRAME) && !(dwStyle & WS_CHILD) && dxw.IsDesktop(hwnd))
|
if ((dxw.dwFlags1 & FIXWINFRAME) && !(dwStyle & WS_CHILD) && dxw.IsDesktop(hwnd))
|
||||||
dxw.FixWindowFrame(hwnd);
|
dxw.FixWindowFrame(hwnd);
|
||||||
|
|
||||||
@ -1929,31 +1938,29 @@ LRESULT WINAPI extCallWindowProcW(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WP
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT WINAPI extDefWindowProcA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
static LRESULT WINAPI DefWindowProcCommon(char *Label, DefWindowProc_Type pDefWindowProc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
// v2.02.30: fix (Imperialism II): apply to main window only !!!
|
// v2.02.30: fix (Imperialism II): apply to main window only !!!
|
||||||
// v2.03.50: fix - do clip cursor only after the window has got focus
|
// v2.03.50: fix - do clip cursor only after the window has got focus
|
||||||
|
// v2.04.14: fix - erase clip cursor when window loses focus !!!
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
res = (HRESULT)-1;
|
res = (HRESULT)-1;
|
||||||
if(IsTraceW) ExplainMsg("DefWindowProcA", hwnd, Msg, wParam, lParam);
|
if(IsTraceW) ExplainMsg(Label, hwnd, Msg, wParam, lParam);
|
||||||
if(hwnd == dxw.GethWnd()) res=FixWindowProc("DefWindowProcA", hwnd, Msg, wParam, &lParam);
|
if(hwnd == dxw.GethWnd()) res=FixWindowProc(Label, hwnd, Msg, wParam, &lParam);
|
||||||
if (res==(HRESULT)-1) res = (*pDefWindowProcA)(hwnd, Msg, wParam, lParam);
|
if (res==(HRESULT)-1) res = (*pDefWindowProc)(hwnd, Msg, wParam, lParam);
|
||||||
if((Msg == WM_SETFOCUS) && (dxw.dwFlags1 & CLIPCURSOR)) dxw.SetClipCursor();
|
if(dxw.dwFlags1 & CLIPCURSOR){
|
||||||
|
switch(Msg){
|
||||||
|
case WM_SETFOCUS: dxw.SetClipCursor(); break;
|
||||||
|
case WM_KILLFOCUS: dxw.EraseClipCursor(); break; // v2.04.14: forgotten case ....
|
||||||
|
}
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT WINAPI extDefWindowProcW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI extDefWindowProcW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{ return DefWindowProcCommon("DefWindowProcW", pDefWindowProcW, hwnd, Msg, wParam, lParam); }
|
||||||
// v2.02.30: fix (Imperialism II): apply to main window only !!!
|
LRESULT WINAPI extDefWindowProcA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
// v2.03.50: fix - do clip cursor only after the window has got focus
|
{ return DefWindowProcCommon("DefWindowProcA", pDefWindowProcA, hwnd, Msg, wParam, lParam); }
|
||||||
HRESULT res;
|
|
||||||
res = (HRESULT)-1;
|
|
||||||
if(IsTraceW) ExplainMsg("DefWindowProcW", hwnd, Msg, wParam, lParam);
|
|
||||||
if(hwnd == dxw.GethWnd()) res=FixWindowProc("DefWindowProcW", hwnd, Msg, wParam, &lParam);
|
|
||||||
if (res==(HRESULT)-1) res = (*pDefWindowProcW)(hwnd, Msg, wParam, lParam);
|
|
||||||
if((Msg == WM_SETFOCUS) && (dxw.dwFlags1 & CLIPCURSOR)) dxw.SetClipCursor();
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRUSH hbr)
|
static int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRUSH hbr)
|
||||||
{
|
{
|
||||||
@ -2031,14 +2038,9 @@ static int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRU
|
|||||||
}
|
}
|
||||||
|
|
||||||
int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
||||||
{
|
{ return HandleRect("FillRect", (void *)pFillRect, hdc, lprc, hbr); }
|
||||||
return HandleRect("FillRect", (void *)pFillRect, hdc, lprc, hbr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
int WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
||||||
{
|
{ return HandleRect("FrameRect", (void *)pFrameRect, hdc, lprc, hbr); }
|
||||||
return HandleRect("FrameRect", (void *)pFrameRect, hdc, lprc, hbr);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI extInvertRect(HDC hdc, const RECT *lprc)
|
BOOL WINAPI extInvertRect(HDC hdc, const RECT *lprc)
|
||||||
{
|
{
|
||||||
|
@ -32,8 +32,8 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_SINGLEPROCAFFINITY, cTarget->m_SingleProcAffinity);
|
DDX_Check(pDX, IDC_SINGLEPROCAFFINITY, cTarget->m_SingleProcAffinity);
|
||||||
DDX_Check(pDX, IDC_USELASTCORE, cTarget->m_UseLastCore);
|
DDX_Check(pDX, IDC_USELASTCORE, cTarget->m_UseLastCore);
|
||||||
DDX_Check(pDX, IDC_HANDLEEXCEPTIONS, cTarget->m_HandleExceptions);
|
DDX_Check(pDX, IDC_HANDLEEXCEPTIONS, cTarget->m_HandleExceptions);
|
||||||
|
DDX_Check(pDX, IDC_VIRTUALHEAP, cTarget->m_VirtualHeap);
|
||||||
DDX_Check(pDX, IDC_LIMITRESOURCES, cTarget->m_LimitResources);
|
DDX_Check(pDX, IDC_LIMITRESOURCES, cTarget->m_LimitResources);
|
||||||
DDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME);
|
|
||||||
DDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType);
|
DDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType);
|
||||||
DDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass);
|
DDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass);
|
||||||
DDX_Check(pDX, IDC_BUFFEREDIOFIX, cTarget->m_BufferedIOFix);
|
DDX_Check(pDX, IDC_BUFFEREDIOFIX, cTarget->m_BufferedIOFix);
|
||||||
|
@ -31,6 +31,7 @@ void CTabDirect3D::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean);
|
DDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean);
|
||||||
DDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean);
|
DDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean);
|
||||||
DDX_Check(pDX, IDC_DYNAMICZCLEAN, cTarget->m_DynamicZClean);
|
DDX_Check(pDX, IDC_DYNAMICZCLEAN, cTarget->m_DynamicZClean);
|
||||||
|
DDX_Check(pDX, IDC_ZBUFFERHARDCLEAN, cTarget->m_ZBufferHardClean);
|
||||||
DDX_Check(pDX, IDC_NOPOWER2FIX, cTarget->m_NoPower2Fix);
|
DDX_Check(pDX, IDC_NOPOWER2FIX, cTarget->m_NoPower2Fix);
|
||||||
DDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset);
|
DDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset);
|
||||||
DDX_Check(pDX, IDC_SUPPRESSD3DEXT, cTarget->m_SuppressD3DExt);
|
DDX_Check(pDX, IDC_SUPPRESSD3DEXT, cTarget->m_SuppressD3DExt);
|
||||||
|
@ -43,6 +43,7 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_UNLOCKZORDER, cTarget->m_UnlockZOrder);
|
DDX_Check(pDX, IDC_UNLOCKZORDER, cTarget->m_UnlockZOrder);
|
||||||
DDX_Check(pDX, IDC_NODESTROYWINDOW, cTarget->m_NoDestroyWindow);
|
DDX_Check(pDX, IDC_NODESTROYWINDOW, cTarget->m_NoDestroyWindow);
|
||||||
DDX_Check(pDX, IDC_ACTIVATEAPP, cTarget->m_ActivateApp);
|
DDX_Check(pDX, IDC_ACTIVATEAPP, cTarget->m_ActivateApp);
|
||||||
|
DDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME);
|
||||||
|
|
||||||
DDX_Radio(pDX, IDC_FREEMOVE, cTarget->m_WinMovementType);
|
DDX_Radio(pDX, IDC_FREEMOVE, cTarget->m_WinMovementType);
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_ImportTable = FALSE;
|
m_ImportTable = FALSE;
|
||||||
m_TraceHooks = FALSE;
|
m_TraceHooks = FALSE;
|
||||||
m_HandleExceptions = FALSE;
|
m_HandleExceptions = FALSE;
|
||||||
|
m_VirtualHeap = FALSE;
|
||||||
m_SuppressIME = FALSE;
|
m_SuppressIME = FALSE;
|
||||||
m_SuppressD3DExt = FALSE;
|
m_SuppressD3DExt = FALSE;
|
||||||
m_Enum16bitModes = FALSE;
|
m_Enum16bitModes = FALSE;
|
||||||
@ -113,6 +114,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_ZBufferClean = FALSE;
|
m_ZBufferClean = FALSE;
|
||||||
m_ZBuffer0Clean = FALSE;
|
m_ZBuffer0Clean = FALSE;
|
||||||
m_DynamicZClean = FALSE;
|
m_DynamicZClean = FALSE;
|
||||||
|
m_ZBufferHardClean = FALSE;
|
||||||
m_ZBufferAlways = FALSE;
|
m_ZBufferAlways = FALSE;
|
||||||
m_HotPatchAlways = FALSE;
|
m_HotPatchAlways = FALSE;
|
||||||
m_FreezeInjectedSon = FALSE;
|
m_FreezeInjectedSon = FALSE;
|
||||||
|
@ -163,12 +163,9 @@ public:
|
|||||||
BOOL m_NoDDExclusiveMode;
|
BOOL m_NoDDExclusiveMode;
|
||||||
BOOL m_CreateDesktop;
|
BOOL m_CreateDesktop;
|
||||||
BOOL m_AllowSysmemOn3DDev;
|
BOOL m_AllowSysmemOn3DDev;
|
||||||
//BOOL m_ForceVSync;
|
|
||||||
//BOOL m_ForceNoVSync;
|
|
||||||
//BOOL m_ForceWait;
|
|
||||||
//BOOL m_ForceNoWait;
|
|
||||||
BOOL m_HandleAltF4;
|
BOOL m_HandleAltF4;
|
||||||
BOOL m_HandleExceptions;
|
BOOL m_HandleExceptions;
|
||||||
|
BOOL m_VirtualHeap;
|
||||||
BOOL m_SkipFPS;
|
BOOL m_SkipFPS;
|
||||||
BOOL m_LimitFPS;
|
BOOL m_LimitFPS;
|
||||||
BOOL m_ShowFPS;
|
BOOL m_ShowFPS;
|
||||||
@ -221,6 +218,7 @@ public:
|
|||||||
BOOL m_ZBufferClean;
|
BOOL m_ZBufferClean;
|
||||||
BOOL m_ZBuffer0Clean;
|
BOOL m_ZBuffer0Clean;
|
||||||
BOOL m_DynamicZClean;
|
BOOL m_DynamicZClean;
|
||||||
|
BOOL m_ZBufferHardClean;
|
||||||
BOOL m_ZBufferAlways;
|
BOOL m_ZBufferAlways;
|
||||||
BOOL m_HotPatchAlways;
|
BOOL m_HotPatchAlways;
|
||||||
BOOL m_FreezeInjectedSon;
|
BOOL m_FreezeInjectedSon;
|
||||||
|
Binary file not shown.
@ -43,6 +43,7 @@ BOOL gAutoHideMode = FALSE;
|
|||||||
BOOL gQuietMode = FALSE;
|
BOOL gQuietMode = FALSE;
|
||||||
BOOL gMustDie = FALSE;
|
BOOL gMustDie = FALSE;
|
||||||
int iProgIndex;
|
int iProgIndex;
|
||||||
|
DWORD SysColors[32];
|
||||||
extern char m_ConfigFileName[20+1] = "dxwnd.ini";
|
extern char m_ConfigFileName[20+1] = "dxwnd.ini";
|
||||||
|
|
||||||
class CNewCommandLineInfo : public CCommandLineInfo
|
class CNewCommandLineInfo : public CCommandLineInfo
|
||||||
@ -239,7 +240,11 @@ BOOL CDxwndhostApp::InitInstance()
|
|||||||
if (bCheckAdminRights && (GetVersionEx(&osver)) && (osver.dwMajorVersion >= 6)){
|
if (bCheckAdminRights && (GetVersionEx(&osver)) && (osver.dwMajorVersion >= 6)){
|
||||||
DxSelfElevate((CDxwndhostView *)NULL);
|
DxSelfElevate((CDxwndhostView *)NULL);
|
||||||
}
|
}
|
||||||
return TRUE;
|
|
||||||
|
// save system colors for later recovery
|
||||||
|
for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=0; // initialize
|
||||||
|
for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=::GetSysColor(index);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -250,17 +255,20 @@ class CAboutDlg : public CDialog
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CAboutDlg();
|
CAboutDlg();
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
|
||||||
// Data Dialog
|
// Data Dialog
|
||||||
//{{AFX_DATA(CAboutDlg)
|
//{{AFX_DATA(CAboutDlg)
|
||||||
enum { IDD = IDD_ABOUTBOX };
|
enum { IDD = IDD_ABOUTBOX };
|
||||||
CString m_Version;
|
CString m_Version;
|
||||||
|
CString m_Thanks;
|
||||||
//}}AFX_DATA
|
//}}AFX_DATA
|
||||||
|
|
||||||
// ClassWizard generated virtual function overrides.
|
// ClassWizard generated virtual function overrides.
|
||||||
//{{AFX_VIRTUAL(CAboutDlg)
|
//{{AFX_VIRTUAL(CAboutDlg)
|
||||||
protected:
|
protected:
|
||||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Support
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Support
|
||||||
|
virtual void OnTimer(UINT_PTR);
|
||||||
//}}AFX_VIRTUAL
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
@ -283,13 +291,52 @@ void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
//{{AFX_DATA_MAP(CAboutDlg)
|
//{{AFX_DATA_MAP(CAboutDlg)
|
||||||
DDX_Text(pDX, IDC_VERSION, m_Version);
|
DDX_Text(pDX, IDC_VERSION, m_Version);
|
||||||
|
DDX_Text(pDX, IDC_THANKS, m_Thanks);
|
||||||
//}}AFX_DATA_MAP
|
//}}AFX_DATA_MAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ID_HELP_SCROLL 999
|
||||||
|
|
||||||
|
BOOL CAboutDlg::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
SetTimer(ID_HELP_SCROLL, 600, NULL);
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
}
|
||||||
|
|
||||||
|
CString Thanks[] = {
|
||||||
|
"Aqrit for proxies, many tweaks & hot patching schema",
|
||||||
|
"AxXxB and Old-Games.ru teammates for ZBUFFER fix",
|
||||||
|
"Fabian \"ryg\" Giesen & others for DXT1/5 compression",
|
||||||
|
"FunkyFr3sh for fixes in proxy dll",
|
||||||
|
"Gsky916 for chinese translation",
|
||||||
|
"Jari Kommpa for ddraw wrapper source and d3d hints",
|
||||||
|
"Jiri Dvorak for his d3d8 wrapper with 16bpp emulation",
|
||||||
|
"Luigi Auriemma for injection syncronization",
|
||||||
|
"Michael Koch for d3d9 proxy dll",
|
||||||
|
"Narzoul for sharing DC handling code",
|
||||||
|
"Olly (www.ollydbg.de) for OllyDBG & disasm lib",
|
||||||
|
"RomSteady for his kind encouragement",
|
||||||
|
"Ryan Geiss for his bilinear filter code",
|
||||||
|
"TigerhawkT3 for html manual pages",
|
||||||
|
"Tsuda Kageyu for MinHook dll",
|
||||||
|
""};
|
||||||
|
|
||||||
|
#define THANKSKOUNT 15
|
||||||
|
|
||||||
|
void CAboutDlg::OnTimer(UINT_PTR nIDEvent)
|
||||||
|
{
|
||||||
|
static int i=0;
|
||||||
|
int j;
|
||||||
|
CString RolledThanks;
|
||||||
|
for(j=i; j<THANKSKOUNT; j++) RolledThanks.AppendFormat("%s\n", Thanks[j]);
|
||||||
|
for(j=0; j<i ; j++) RolledThanks.AppendFormat("%s\n", Thanks[j]);
|
||||||
|
this->SetDlgItemTextA(IDC_THANKS, RolledThanks);
|
||||||
|
i=(i+1)%THANKSKOUNT;
|
||||||
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
||||||
//{{AFX_MSG_MAP(CAboutDlg)
|
ON_WM_TIMER()
|
||||||
// There is no message handler.
|
|
||||||
//}}AFX_MSG_MAP
|
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
// The application command to run the dialog
|
// The application command to run the dialog
|
||||||
@ -300,7 +347,26 @@ void CDxwndhostApp::OnAppAbout()
|
|||||||
GetDllVersion(tmp);
|
GetDllVersion(tmp);
|
||||||
sprintf(ver, "DLL version %s", tmp);
|
sprintf(ver, "DLL version %s", tmp);
|
||||||
aboutDlg.m_Version = ver;
|
aboutDlg.m_Version = ver;
|
||||||
|
aboutDlg.m_Thanks = "";
|
||||||
|
// aboutDlg.m_Thanks = "\
|
||||||
|
//Aqrit for proxies, many tweaks & hot patching schema\n\
|
||||||
|
//AxXxB and Old-Games.ru teammates for ZBUFFER fix\n\
|
||||||
|
//Fabian \"ryg\" Giesen & others for DXT1/5 compression\n\
|
||||||
|
//FunkyFr3sh for fixes in proxy dll\n\
|
||||||
|
//Gsky916 for chinese translation\n\
|
||||||
|
//Jari Kommpa for ddraw wrapper source and d3d hints\n\
|
||||||
|
//Jiri Dvorak for his d3d8 wrapper with 16bpp emulation\n\
|
||||||
|
//Luigi Auriemma for injection syncronization\n\
|
||||||
|
//Michael Koch for d3d9 proxy dll\n\
|
||||||
|
//Narzoul for sharing DC handling code\n\
|
||||||
|
//Olly (www.ollydbg.de) for OllyDBG & disasm lib\n\
|
||||||
|
//RomSteady for his kind encouragement\n\
|
||||||
|
//Ryan Geiss for his bilinear filter code\n\
|
||||||
|
//TigerhawkT3 for html manual pages\n\
|
||||||
|
//Tsuda Kageyu for MinHook dll\n\
|
||||||
|
//";
|
||||||
aboutDlg.DoModal();
|
aboutDlg.DoModal();
|
||||||
|
aboutDlg.KillTimer(ID_HELP_SCROLL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDxwndhostApp::OnViewHelp()
|
void CDxwndhostApp::OnViewHelp()
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -151,6 +151,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp)
|
ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp)
|
||||||
ON_COMMAND(ID_TOOLS_RECOVERSCREENMODE, OnRecoverScreenMode)
|
ON_COMMAND(ID_TOOLS_RECOVERSCREENMODE, OnRecoverScreenMode)
|
||||||
ON_COMMAND(ID_TOOLS_CLEARCOMPATIBILITYFLAGS, OnClearCompatibilityFlags)
|
ON_COMMAND(ID_TOOLS_CLEARCOMPATIBILITYFLAGS, OnClearCompatibilityFlags)
|
||||||
|
ON_COMMAND(ID_TOOLS_RECOVERSYSTEMCOLORS, OnRecoverSystemColors)
|
||||||
ON_COMMAND(ID_MOVE_TOP, OnMoveTop)
|
ON_COMMAND(ID_MOVE_TOP, OnMoveTop)
|
||||||
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
||||||
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
||||||
@ -376,6 +377,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY;
|
if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY;
|
||||||
if(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS;
|
if(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS;
|
||||||
if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS;
|
if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS;
|
||||||
|
if(dlg->m_VirtualHeap) t->flags8 |= VIRTUALHEAP;
|
||||||
if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES;
|
if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES;
|
||||||
if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE;
|
if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE;
|
||||||
if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY;
|
if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY;
|
||||||
@ -386,6 +388,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN;
|
if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN;
|
||||||
if(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN;
|
if(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN;
|
||||||
if(dlg->m_DynamicZClean) t->flags8 |= DYNAMICZCLEAN;
|
if(dlg->m_DynamicZClean) t->flags8 |= DYNAMICZCLEAN;
|
||||||
|
if(dlg->m_ZBufferHardClean) t->flags8 |= ZBUFFERHARDCLEAN;
|
||||||
if(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS;
|
if(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS;
|
||||||
if(dlg->m_HotPatchAlways) t->flags4 |= HOTPATCHALWAYS;
|
if(dlg->m_HotPatchAlways) t->flags4 |= HOTPATCHALWAYS;
|
||||||
if(dlg->m_FreezeInjectedSon) t->flags5 |= FREEZEINJECTEDSON;
|
if(dlg->m_FreezeInjectedSon) t->flags5 |= FREEZEINJECTEDSON;
|
||||||
@ -705,6 +708,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0;
|
dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0;
|
||||||
dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0;
|
dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0;
|
||||||
dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0;
|
dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0;
|
||||||
|
dlg->m_VirtualHeap = t->flags8 & VIRTUALHEAP ? 1 : 0;
|
||||||
dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;
|
dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;
|
||||||
dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0;
|
dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0;
|
||||||
dlg->m_Enum16bitModes = t->flags7 & ENUM16BITMODES ? 1 : 0;
|
dlg->m_Enum16bitModes = t->flags7 & ENUM16BITMODES ? 1 : 0;
|
||||||
@ -756,6 +760,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0;
|
dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0;
|
||||||
dlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0;
|
dlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0;
|
||||||
dlg->m_DynamicZClean = t->flags8 & DYNAMICZCLEAN ? 1 : 0;
|
dlg->m_DynamicZClean = t->flags8 & DYNAMICZCLEAN ? 1 : 0;
|
||||||
|
dlg->m_ZBufferHardClean = t->flags8 & ZBUFFERHARDCLEAN ? 1 : 0;
|
||||||
dlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0;
|
dlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0;
|
||||||
dlg->m_HotPatchAlways = t->flags4 & HOTPATCHALWAYS ? 1 : 0;
|
dlg->m_HotPatchAlways = t->flags4 & HOTPATCHALWAYS ? 1 : 0;
|
||||||
dlg->m_FreezeInjectedSon = t->flags5 & FREEZEINJECTEDSON ? 1 : 0;
|
dlg->m_FreezeInjectedSon = t->flags5 & FREEZEINJECTEDSON ? 1 : 0;
|
||||||
@ -2714,6 +2719,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
|
|||||||
case ID_TOOLS_CLEARCOMPATIBILITYFLAGS:
|
case ID_TOOLS_CLEARCOMPATIBILITYFLAGS:
|
||||||
OnClearCompatibilityFlags();
|
OnClearCompatibilityFlags();
|
||||||
break;
|
break;
|
||||||
|
case ID_TOOLS_RECOVERSYSTEMCOLORS:
|
||||||
|
OnRecoverSystemColors();
|
||||||
|
break;
|
||||||
case ID_MOVE_TOP:
|
case ID_MOVE_TOP:
|
||||||
OnMoveTop();
|
OnMoveTop();
|
||||||
break;
|
break;
|
||||||
@ -3517,6 +3525,19 @@ void CDxwndhostView::OnRecoverScreenMode()
|
|||||||
RevertScreenChanges(&this->InitDevMode);
|
RevertScreenChanges(&this->InitDevMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnRecoverSystemColors()
|
||||||
|
{
|
||||||
|
extern DWORD SysColors[];
|
||||||
|
//for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) {
|
||||||
|
for(int index=COLOR_SCROLLBAR; index<=COLOR_BTNHIGHLIGHT; index++) { // don't mess with taskbar ...
|
||||||
|
if(SysColors[index]) {
|
||||||
|
INT colors[1];
|
||||||
|
colors[0]=index;
|
||||||
|
::SetSysColors(1, colors, &SysColors[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnClearCompatibilityFlags()
|
void CDxwndhostView::OnClearCompatibilityFlags()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -113,6 +113,7 @@ protected:
|
|||||||
afx_msg void OnDesktopcolordepth32bpp();
|
afx_msg void OnDesktopcolordepth32bpp();
|
||||||
afx_msg void OnRecoverScreenMode();
|
afx_msg void OnRecoverScreenMode();
|
||||||
afx_msg void OnClearCompatibilityFlags();
|
afx_msg void OnClearCompatibilityFlags();
|
||||||
|
afx_msg void OnRecoverSystemColors();
|
||||||
afx_msg void OnMoveTop();
|
afx_msg void OnMoveTop();
|
||||||
afx_msg void OnMoveUp();
|
afx_msg void OnMoveUp();
|
||||||
afx_msg void OnMoveDown();
|
afx_msg void OnMoveDown();
|
||||||
|
BIN
host/resource
BIN
host/resource
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user