1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_04_01_src_fx3

Former-commit-id: 7373e879fbf64993eef4fcf8e677427372e26d23
This commit is contained in:
gho tik 2016-12-27 11:48:55 -05:00 committed by Refael ACkermann
parent b8ec0f64c4
commit 46ef0171d4
14 changed files with 276 additions and 75 deletions

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f6a96c3c20704b6b52ee2e8757c9fe7e52d36dcf6b9772c9e6e88488d9ac04dc
size 764928
oid sha256:980c05e0c87605ce728d6f896a4f42c8ba6bb4900af3a160f11be87dd57e81b8
size 765440

@ -1,3 +1,113 @@
[window]
exepath=F:\Games\ManTTSuperBike\
exportpath=D:\DxWnd.develop\v2_04_01_beta\Release\
exepath=F:\Games\Garfield\
posx=597
posy=556
sizx=320
sizy=200
exportpath=D:\DxWnd.develop\v2_04_01_fx3_src\build\exports\
[target]
title0=Garfield - Caught in the Act
path0=F:\Games\Garfield\GARFIELD.NOSHIM.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=673185826
flagg0=1208221696
flagh0=65556
flagi0=138412036
flagj0=4226
flagk0=327680
flagl0=8421376
flagm0=0
tflag0=-2147477245
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=0
swapeffect0=0
maxddinterface0=7
slowratio0=2
scanline0=0
initresw0=320
initresh0=224
title1=Titanic
path1=F:\Games\Titanic\TI.noshim.EXE
startfolder1=
launchpath1=
module1=
opengllib1=
notes1=
registry1=
ver1=0
monitorid1=-1
coord1=0
flag1=-1474293718
flagg1=1745879072
flagh1=540692
flagi1=138412036
flagj1=4224
flagk1=67584
flagl1=269484032
flagm1=9216
tflag1=0
dflag1=0
posx1=50
posy1=50
sizx1=800
sizy1=600
maxfps1=0
initts1=0
winver1=0
maxres1=-1
swapeffect1=0
maxddinterface1=7
slowratio1=2
scanline1=0
initresw1=800
initresh1=600
title2=Titanic
path2=F:\Games\Titanic\TI.noshim.EXE
startfolder2=
launchpath2=
module2=
opengllib2=
notes2=
registry2=
ver2=0
monitorid2=-1
coord2=0
flag2=-1474293718
flagg2=1745879072
flagh2=606228
flagi2=138412036
flagj2=4224
flagk2=67584
flagl2=269484032
flagm2=9216
tflag2=0
dflag2=0
posx2=50
posy2=50
sizx2=800
sizy2=600
maxfps2=0
initts2=0
winver2=0
maxres2=-1
swapeffect2=0
maxddinterface2=7
slowratio2=2
scanline2=0
initresw2=800
initresh2=600

@ -0,0 +1,36 @@
[target]
title0=Garfield - Caught in the Act
path0=F:\Games\Garfield\GARFIELD.NOSHIM.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=673185826
flagg0=1208221696
flagh0=65556
flagi0=138412036
flagj0=4226
flagk0=327680
flagl0=8421376
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=0
swapeffect0=0
maxddinterface0=7
slowratio0=2
scanline0=0
initresw0=320
initresh0=224

@ -10,14 +10,14 @@ registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=-1474293726
flag0=-1474297814
flagg0=1745879072
flagh0=540692
flagi0=138412036
flagj0=4224
flagk0=67584
flagl0=269484032
flagm0=1024
flagm0=9216
tflag0=0
dflag0=0
posx0=50

@ -1393,7 +1393,7 @@ fix: bug in Hybrid and GDI ddraw surface rendering
fix: missing "No HAL Device" flag default to disabled
fix: improvements in texture handling, dds format support for DirectDraw textures
v2.04.01
v2.04.01/fx2
add: preliminary WinG32 handling
add: minimal WinG32 replacement, thank to Wine source code
add: DirectX(2)/"Create a Desktop Win" option. Fixes "Man TT Super Bike"
@ -1401,4 +1401,7 @@ add: new hooking schema for IAT organized like original "Al Unser Jr. Arcade Rac
fix: in virtual registry fix to handle the '@' void label case properly
fix: added hook for RegQueryValueA, used by "Warhammer 40.000 Shadow of the Horned Rat"
fix: virtual registry logging
add: added SmackW32 hooking to bypass SmackColorRemapWithTrans and SmackColorRemap: SmackColorRemap seems involved in changing screen resolution in "Civil War Generals 2"
fix: some log messages
fix: SetWindowLong hooker: eliminated a unassigned variable condition
fix: added hooker for GDI32/SetROP2 call to insert a InvalidateRect as in older OS. Makes "Titanic" working.

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:53879e29d60dcbc3d6ae8c5161d9749f3204fd2a2c5ae3e095bb81a47c3d90dc
size 41984
oid sha256:55b44016e314b1abcbcfa27cee66899407fab0694ef995bec1fc01e460dac5ca
size 42496

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h"
#define VERSION "2.04.01"
#define VERSION "2.04.01.fx3"
#define DDTHREADLOCK 1

Binary file not shown.

@ -70,6 +70,7 @@ static HookEntryEx_Type Hooks[]={
{HOOK_HOT_CANDIDATE, 0, "SetPaletteEntries", (FARPROC)SetPaletteEntries, (FARPROC *)&pSetPaletteEntries, (FARPROC)extSetPaletteEntries},
{HOOK_HOT_CANDIDATE, 0, "GetSystemPaletteUse", (FARPROC)GetSystemPaletteUse, (FARPROC *)&pGetSystemPaletteUse, (FARPROC)extGetSystemPaletteUse},
{HOOK_HOT_CANDIDATE, 0, "CreateICA", (FARPROC)CreateICA, (FARPROC *)&pCreateICA, (FARPROC)extCreateICA}, // Riven
{HOOK_HOT_CANDIDATE, 0, "SetROP2", (FARPROC)SetROP2, (FARPROC *)&pSetROP2, (FARPROC)extSetROP2}, // Titanic
#ifdef TRACEPALETTE
{HOOK_IAT_CANDIDATE, 0, "ResizePalette", (FARPROC)ResizePalette, (FARPROC *)&pResizePalette, (FARPROC)extResizePalette},
#endif
@ -1705,7 +1706,8 @@ int WINAPI extSetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines,
{
int ret;
if(IsTraceDW){
OutTrace("SetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n", hdc, hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));
OutTrace("SetDIBits: hdc=%x%s hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n",
hdc, dxw.IsToRemap(hdc)?"(R)":"", hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));
TraceBITMAPINFOHEADER("SetDIBits", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));
}
@ -3287,6 +3289,20 @@ UINT WINAPI extSetPaletteEntries(HPALETTE hpal, UINT iStart, UINT cEntries, cons
return ret;
}
int WINAPI extSetROP2(HDC hdc, int fnDrawMode)
{
// In early OS the SetROP2 caused some sort of screen refresh, that does no longer happen in recent ones.
// So wrapping the function and inserting a InvalidateRect right after that fixes the problem.
// This trick fixes the black screens in "Titanic - an adventure out of time" on Win10.
// N.b. Titanic calls SetTextColor, SetBkColor and SetROP2 in sequence, it might be possible that the
// API to hook for refreshing is another, or even them all!
int ret;
OutTrace("SetROP2: hdc=%x drawmode=%d\n", hdc, fnDrawMode);
ret = (*pSetROP2)(hdc, fnDrawMode);
(*pInvalidateRect)(WindowFromDC(hdc), NULL, 0);
return ret;
}
#if 0
LONG WINAPI extSetBitmapBits(HBITMAP hbmp, DWORD cBytes, VOID *lpBits)
{

@ -146,6 +146,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
}
pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);
// move fname pointer to first API name
char *fname;
while(pidesc->FirstThunk){
impmodule = (PSTR)(base + pidesc->Name);
@ -154,7 +155,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
pidesc ++;
}
pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);
OutTrace("IATPatch: no PE OFTs - first call=%s\n", fname);
OutTraceB("IATPatch: first call=%s\n", fname);
while(pidesc->FirstThunk){
impmodule = (PSTR)(base + pidesc->Name);
@ -204,7 +205,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc
}
if(ptaddr->u1.Function) {
OutTraceDW("IATPatch: hooking %s\n", fname);
OutTraceDW("IATPatch: hooking %s\n", apiname);
org = (void *)ptaddr->u1.Function;
if(org == hookproc) return 0; // already hooked
@ -466,7 +467,7 @@ BOOL IsIATSequential(HMODULE module)
// skip first string
for(; *fname; fname++); for(; !*fname; fname++);
// if second string is another DLL it is sequential, otherwise not.
// OutTrace("IsIATSequential: second entry=%s\n", fname);
OutTraceB("IsIATSequential: second entry=%s\n", fname);
return (BOOL)stristr(fname, ".DLL");
}
__except(EXCEPTION_EXECUTE_HANDLER)

@ -24,10 +24,14 @@ typedef struct {
typedef Smack * (WINAPI *SmackOpen_Type)(HANDLE, UINT32, INT32);
typedef Smack * (WINAPI *Smacker_Type)(HANDLE);
typedef Smack * (WINAPI *Smacker2_Type)(HANDLE, UINT32);
typedef Smack * (WINAPI *SmackColorRemap_Type)(HANDLE, const void PTR4 *, u32, u32);
typedef Smack * (WINAPI *SmackColorRemapWithTrans_Type)(HANDLE, const void PTR4 *, u32, u32, u32);
SmackOpen_Type pSmackOpen;
Smacker_Type pSmackClose, pSmackWait, pSmackDoFrame, pSmackNextFrame, pSmackSoundUseMSS, pSmackSoundUseDirectSound;
Smacker2_Type pSmackSoundOnOff, pSmackGoto;
SmackColorRemap_Type pSmackColorRemap;
SmackColorRemapWithTrans_Type pSmackColorRemapWithTrans;
Smack * WINAPI extSmackOpen(HANDLE, UINT32, INT32);
Smack * WINAPI extSmackClose(HANDLE);
@ -38,6 +42,8 @@ Smack * WINAPI extSmackSoundUseMSS(HANDLE);
Smack * WINAPI extSmackSoundUseDirectSound(HANDLE);
Smack * WINAPI extSmackSoundOnOff(HANDLE, UINT32);
Smack * WINAPI extSmackGoto(HANDLE, UINT32);
Smack * WINAPI extSmackColorRemap(HANDLE, const void PTR4 *, u32, u32);
Smack * WINAPI extSmackColorRemapWithTrans(HANDLE, const void PTR4 *, u32, u32, u32);
static HookEntryEx_Type Hooks[]={
{HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
@ -49,6 +55,8 @@ static HookEntryEx_Type Hooks[]={
{HOOK_IAT_CANDIDATE, 0x001B, "_SmackGoto@8", (FARPROC)NULL, (FARPROC *)&pSmackGoto, (FARPROC)extSmackGoto},
{HOOK_IAT_CANDIDATE, 0x0015, "_SmackNextFrame@4", (FARPROC)NULL, (FARPROC *)&pSmackNextFrame, (FARPROC)extSmackNextFrame},
{HOOK_IAT_CANDIDATE, 0x0026, "_SmackSoundUseDirectSound@4", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseDirectSound, (FARPROC)extSmackSoundUseDirectSound},
{HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemap@16", (FARPROC)NULL, (FARPROC *)&pSmackColorRemap, (FARPROC)extSmackColorRemap},
{HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemapWithTrans@20", (FARPROC)NULL, (FARPROC *)&pSmackColorRemapWithTrans, (FARPROC)extSmackColorRemapWithTrans},
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
};
@ -185,6 +193,24 @@ Smack * WINAPI extSmackGoto(HANDLE h, UINT32 flag)
return (*pSmackGoto)(h, flag);
}
Smack * WINAPI extSmackColorRemap(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype)
{
OutTraceDW("SmackColorRemap: h=%x numcolors=%d paltype=%d\n", h, numcolors, paltype);
DumpSmack((Smack *)h);
// BYPASS the call to avoid resolution changes
//return (*pSmackColorRemap)(h, remappal, numcolors, paltype);
return (Smack *)h;
}
Smack * WINAPI extSmackColorRemapWithTrans(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype, u32 transindex)
{
OutTraceDW("SmackColorRemapWithTrans: h=%x numcolors=%d paltype=%d transindex=%d\n", h, numcolors, paltype, transindex);
DumpSmack((Smack *)h);
// BYPASS the call to avoid resolution changes
//return (*pSmackColorRemapWithTrans)(h, remappal, numcolors, paltype);
return (Smack *)h;
}
/* ---------------------------------------------------------------
Used by M2 Tank Platoon II:
Ordinal 0x0015 name _SmackNextFrame@4

@ -109,35 +109,36 @@ typedef BOOL (WINAPI *GDIGetPixelFormat_Type)(HDC);
typedef int (WINAPI *ChoosePixelFormat_Type)(HDC, const PIXELFORMATDESCRIPTOR *);
typedef int (WINAPI *DescribePixelFormat_Type)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
typedef DWORD (WINAPI *GetObjectType_Type)(HGDIOBJ);
typedef int (WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
typedef int (WINAPI *OffsetRgn_Type)(HRGN, int, int);
typedef int (WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
typedef int (WINAPI *OffsetRgn_Type)(HRGN, int, int);
typedef COLORREF (WINAPI *GetPixel_Type)(HDC, int, int);
typedef BOOL (WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);
typedef BOOL (WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF);
typedef BOOL (WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int);
typedef BOOL (WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int);
typedef BOOL (WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int);
typedef int (WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
typedef BOOL (WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);
typedef BOOL (WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF);
typedef BOOL (WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int);
typedef BOOL (WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int);
typedef BOOL (WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int);
typedef int (WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
typedef HBITMAP (WINAPI *CreateDIBitmap_Type)(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT);
typedef HBITMAP (WINAPI *CreateDIBSection_Type)(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);
typedef HBITMAP (WINAPI *CreateDiscardableBitmap_Type)(HDC, int, int);
typedef BOOL (WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT);
typedef BOOL (WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);
typedef BOOL (WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
typedef BOOL (WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
typedef BOOL (WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int);
typedef BOOL (WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT);
typedef BOOL (WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD);
typedef BOOL (WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH);
typedef BOOL (WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int);
typedef BOOL (WINAPI *InvertRgn_Type)(HDC, HRGN);
typedef BOOL (WINAPI *PaintRgn_Type)(HDC, HRGN);
typedef int (WINAPI *SetMapMode_Type)(HDC, int);
typedef BOOL (WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int);
typedef BOOL (WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int);
//typedef BOOL (WINAPI *DPtoLP_Type)(HDC, LPPOINT, int);
typedef BOOL (WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *);
typedef UINT (WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);
typedef BOOL (WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT);
typedef BOOL (WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);
typedef BOOL (WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
typedef BOOL (WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
typedef BOOL (WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int);
typedef BOOL (WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT);
typedef BOOL (WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD);
typedef BOOL (WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH);
typedef BOOL (WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int);
typedef BOOL (WINAPI *InvertRgn_Type)(HDC, HRGN);
typedef BOOL (WINAPI *PaintRgn_Type)(HDC, HRGN);
typedef int (WINAPI *SetMapMode_Type)(HDC, int);
typedef BOOL (WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int);
typedef BOOL (WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int);
//typedef BOOL (WINAPI *DPtoLP_Type)(HDC, LPPOINT, int);
typedef BOOL (WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *);
typedef UINT (WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);
typedef int (WINAPI *SetROP2_Type)(HDC, int);
// Kernel32.dll:
typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
@ -406,6 +407,7 @@ DXWEXTERN PolyPolygon_Type pPolyPolygon DXWINITIALIZED;
//DXWEXTERN DPtoLP_Type pDPtoLP DXWINITIALIZED;
DXWEXTERN PlayEnhMetaFile_Type pPlayEnhMetaFile DXWINITIALIZED;
DXWEXTERN SetPaletteEntries_Type pSetPaletteEntries DXWINITIALIZED;
DXWEXTERN SetROP2_Type pSetROP2 DXWINITIALIZED;
// Kernel32.dll:
DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;
@ -664,6 +666,7 @@ extern BOOL WINAPI extPolyPolygon(HDC, const POINT *, const INT *, int);
//extern BOOL WINAPI extDPtoLP(HDC, LPPOINT, int);
extern BOOL WINAPI extPlayEnhMetaFile(HDC, HENHMETAFILE, const RECT *);
extern UINT WINAPI extSetPaletteEntries(HPALETTE, UINT, UINT, const PALETTEENTRY *);
extern int WINAPI extSetROP2(HDC, int);
// Kernel32.dll:
extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);

@ -899,7 +899,7 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon
// v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions
// fixes "Nascar Racing 3" that was setting the WinProc while still in non fullscreen mode!
if ((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) {
WNDPROC lres;
LONG lres;
WNDPROC OldProc;
DWORD WinStyle;
BOOL bHooked = FALSE;
@ -921,42 +921,48 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon
OldProc = (WNDPROC)(*pGetWindowLong)(hwnd, nIndex);
WinStyle = (*pGetWindowLong)(hwnd, GWL_STYLE);
// hook extWindowProc to main win ....
if(dxw.IsDesktop(hwnd) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc);
OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc);
bHooked = TRUE;
}
while(TRUE){ // fake loop
lres = -1; // initialize with not 0 value since 0 means error
if(!(dxw.dwFlags6 & NOWINDOWHOOKS)){
// hook extWindowProc to main win ....
if(dxw.IsDesktop(hwnd)){
if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc);
OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc);
break;
}
// hook extChildWindowProc to child win ....
if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc);
OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc);
bHooked = TRUE;
}
// hook extDlgWindowProc to dialog win ....
if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags1 & HOOKCHILDWIN)){
if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc);
OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc);
break;
}
// hook extDlgWindowProc to dialog win ....
if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){
if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc);
OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc);
bHooked = TRUE;
}
// hook extChildWindowProc to child win ....
if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN)){
if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd);
dxwws.PutProc(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc;
SetLastError(0);
lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc);
OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc);
break;
}
}
// hook dwNewLong if not done otherwise
if(!bHooked) res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong);
if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
// hook dwNewLong if not done otherwise
res = (*pSetWindowLong)(hwnd, nIndex, dwNewLong);
break;
}
if(!lres && GetLastError()) OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
}
else{
// through here for any message different from GWL_WNDPROC or DWL_DLGPROC
@ -3747,7 +3753,7 @@ BOOL WINAPI extSwitchDesktop(HDESK hDesktop)
HDESK WINAPI extOpenDesktop(LPTSTR lpszDesktop, DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess)
{
OutTraceDW("CreateDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess);
OutTraceDW("OpenDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess);
return (HDESK)0xDEADBEEF; // fake handle
//return (HDESK)NULL; // fake handle
}

Binary file not shown.