From ab276101451f5efb48d17bae26c85a850e225a45 Mon Sep 17 00:00:00 2001 From: gho tik Date: Wed, 11 Jan 2017 11:49:18 -0500 Subject: [PATCH] v2_04_04_src Former-commit-id: a950f895d2ca9fd1335d0e115037148169648cf0 --- build/dxwnd.dll | 2 +- build/dxwnd.exe | 2 +- build/readme-relnotes.txt | 11 +++++ dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 501760 -> 512000 bytes dll/hd3d.cpp | 3 -- dll/iatpatch.cpp | 6 +-- dll/smack.cpp | 97 +++++++++++++++++--------------------- dll/user32.cpp | 31 +++++++----- host/dxwndhost.rc | Bin 143146 -> 143308 bytes host/dxwndhost.vs2008.suo | Bin 144384 -> 144384 bytes host/dxwndhostView.cpp | 38 ++++++++++++--- host/dxwndhostView.h | 2 + host/resource | Bin 52638 -> 52732 bytes 14 files changed, 114 insertions(+), 80 deletions(-) diff --git a/build/dxwnd.dll b/build/dxwnd.dll index fa2b277..08ed6d5 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1db64cc2ff8db11e460be5c81efc1a0da01f7393b14471b0d3fb158105ed4523 +oid sha256:a5cf1c69e785fd49a000d8d45799f9cc319a62bbade9c8fece0a48fc1860c4c1 size 774656 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 21123ed..ea6e28e 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cac62feee622d3aecce7d6529ebd4f0460d97e9eb20edf79b3a03d935610cc1f +oid sha256:faa2086fcb25e8c4f488ce6c9a216819960a29cc365be1debe325635fef886e8 size 669696 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 6947a34..4c2b8e3 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1423,3 +1423,14 @@ add: D3D8 16bpp backbuffer emulation on 32bpp color depth. Fixes "Dangerous Wate add: more OpenGL wgl* hooks, used by "StarSiege 2014". fix: using correct version method pointers in bilinear blit, avoids crash in "Daytona USA" using bilinear filtering fix: do not try to CloseHandle the handle returned by GetMenu, avoids debugger exceptions. + +v2.04.04 +GUI: +add: run unhooked command +fix: improved logic to propose config save only when virtual registry string is potentially updated +fix: when hooking is disabled, STARTDEBUG and INJECTSUSPENDED processing don't take place +DLL: +fix: crashing condition on "hide desktop background" option - fixes M&MVI crash +fix: mouse loop coordinate fix when main window is not set +fix: eliminated log of dmDeviceName field in ChangeDisplaySettings* calls because the field may be not initialized +fix: NOMOVIES option now stops also SmackW32 movies (making movie length only 1 photogram). diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index b61f9b4..f59e360 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.04.03.fx1" +#define VERSION "2.04.04" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 6e767deca2324f5d516bb836fa07714a0bad371a..c4ed85e57b38574b59433240f37b9fb719ffe42e 100644 GIT binary patch delta 11564 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 diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index 5e633ff..0003bba 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -509,9 +509,6 @@ void HookD3DDevice8(void** ppD3Ddev8) if((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 244), extSetTexture8, (void **)&pSetTexture8, "SetTexture(D8)"); } - //if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; - //SetHook((void *)(**(DWORD **)ppD3Ddev8 + 4), extAddRef8, (void **)&pAddRef8, "AddRef(D8)"); - //SetHook((void *)(**(DWORD **)ppD3Ddev8 + 8), extRelease8, (void **)&pRelease8, "Release(D8)"); } void HookD3DDevice9(void** ppD3Ddev9) diff --git a/dll/iatpatch.cpp b/dll/iatpatch.cpp index abbed0e..7720284 100644 --- a/dll/iatpatch.cpp +++ b/dll/iatpatch.cpp @@ -155,14 +155,14 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc pidesc ++; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); - OutTraceB("IATPatch: first call=%s\n", fname); + //OutTraceB("IATPatch: first call=%s\n", fname); while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); if(!lstrcmpi(dll, impmodule)) { OutTraceH("IATPatch: dll=%s found at %x\n", dll, impmodule); - OutTraceH("IATPatch: first call=%s\n", fname); + //OutTraceH("IATPatch: first call=%s\n", fname); ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; @@ -228,7 +228,7 @@ void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc } } else{ - OutTraceDW("IATPatch: skip dll=%s first call=%s\n", impmodule, fname); + //OutTraceDW("IATPatch: skip dll=%s first call=%s\n", impmodule, fname); // skip dll fnames ... ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); //ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; diff --git a/dll/smack.cpp b/dll/smack.cpp index 21f59e4..b6c9e83 100644 --- a/dll/smack.cpp +++ b/dll/smack.cpp @@ -6,26 +6,13 @@ #include "syslibs.h" #include "dxhook.h" -#if 0 -#pragma pack(1) -typedef struct { - UINT32 Version; - UINT32 Width; - UINT32 Height; - UINT32 Frame; - UINT32 mspf; - char unknown[864]; - UINT32 FrameNum; -} Smack; -#else #include "smack.h" -#endif 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); +typedef Smack * (WINAPI *Smacker_Type)(Smack *); +typedef Smack * (WINAPI *Smacker2_Type)(Smack *, UINT32); +typedef Smack * (WINAPI *SmackColorRemap_Type)(Smack *, const void PTR4 *, u32, u32); +typedef Smack * (WINAPI *SmackColorRemapWithTrans_Type)(Smack *, const void PTR4 *, u32, u32, u32); typedef u32 (RADEXPLINK *SmackSetSystemRes_Type)(u32); SmackOpen_Type pSmackOpen; @@ -36,16 +23,16 @@ SmackColorRemapWithTrans_Type pSmackColorRemapWithTrans; SmackSetSystemRes_Type pSmackSetSystemRes; Smack * WINAPI extSmackOpen(HANDLE, UINT32, INT32); -Smack * WINAPI extSmackClose(HANDLE); -Smack * WINAPI extSmackWait(HANDLE); -Smack * WINAPI extSmackDoFrame(HANDLE); -Smack * WINAPI extSmackNextFrame(HANDLE); -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); +Smack * WINAPI extSmackClose(Smack *); +Smack * WINAPI extSmackWait(Smack *); +Smack * WINAPI extSmackDoFrame(Smack *); +Smack * WINAPI extSmackNextFrame(Smack *); +Smack * WINAPI extSmackSoundUseMSS(Smack *); +Smack * WINAPI extSmackSoundUseDirectSound(Smack *); +Smack * WINAPI extSmackSoundOnOff(Smack *, UINT32); +Smack * WINAPI extSmackGoto(Smack *, UINT32); +Smack * WINAPI extSmackColorRemap(Smack *, const void PTR4 *, u32, u32); +Smack * WINAPI extSmackColorRemapWithTrans(Smack *, const void PTR4 *, u32, u32, u32); u32 RADEXPLINK extSmackSetSystemRes(u32 mode); static HookEntryEx_Type Hooks[]={ @@ -124,32 +111,36 @@ static void DumpSmack(Smack *s) Smack * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 extrabuf) { - Smack *ret; + Smack *h; OutTraceDW("SmackOpen: SmackFile=%x flags=%x(%s) extrabuf=%x\n", SmackFile, flags, ExplainSmackFlags(flags), extrabuf); if(!pSmackOpen) OutTraceE("ASSERT: NULL pSmackOpen\n"); - ret=(*pSmackOpen)(SmackFile, flags, extrabuf); - OutTraceDW("SmackOpen: ret=%x\n", ret); - if (ret) { - OutTraceDW("SmackOpen: version=\"%4.4s\" screen=(%dx%d) frame_count=%d frame_number=%d\n", - (char *)&(ret->Version), ret->Width, ret->Height, ret->Frames, ret->FrameNum); + h=(*pSmackOpen)(SmackFile, flags, extrabuf); + OutTraceDW("SmackOpen: ret=%x\n", h); + if (!h) return NULL; + + DumpSmack(h); + if(dxw.dwFlags6 & NOMOVIES) { + OutTraceDW("SmackOpen: NOMOVIES\n"); + h->Frames = 1; // returning NULL or a frame counter below 1 is risky! + return h; } - return ret; + return h; } -Smack * WINAPI extSmackClose(HANDLE h) +Smack * WINAPI extSmackClose(Smack *h) { OutTraceDW("SmackClose: h=%x\n", h); return (*pSmackClose)(h); } -Smack * WINAPI extSmackWait(HANDLE h) +Smack * WINAPI extSmackWait(Smack *h) { OutTraceDW("SmackWait: h=%x\n", h); DumpSmack((Smack *)h); return (*pSmackWait)(h); } -Smack * WINAPI extSmackDoFrame(HANDLE h) +Smack * WINAPI extSmackDoFrame(Smack *h) { Smack *ret; OutTraceDW("SmackDoFrame: h=%x\n", h); @@ -162,57 +153,57 @@ Smack * WINAPI extSmackDoFrame(HANDLE h) return ret; } -Smack * WINAPI extSmackNextFrame(HANDLE h) +Smack * WINAPI extSmackNextFrame(Smack *h) { OutTraceDW("SmackNextFrame: h=%x\n", h); - DumpSmack((Smack *)h); + DumpSmack(h); return (*pSmackNextFrame)(h); } -Smack * WINAPI extSmackSoundUseMSS(HANDLE h) +Smack * WINAPI extSmackSoundUseMSS(Smack *h) { OutTraceDW("SmackSoundUseMSS: h=%x\n", h); - DumpSmack((Smack *)h); + DumpSmack(h); return (*pSmackSoundUseMSS)(h); } -Smack * WINAPI extSmackSoundUseDirectSound(HANDLE h) +Smack * WINAPI extSmackSoundUseDirectSound(Smack *h) { OutTraceDW("SmackSoundUseDirectSound: h=%x\n", h); - DumpSmack((Smack *)h); + DumpSmack(h); return (*pSmackSoundUseDirectSound)(h); } -Smack * WINAPI extSmackSoundOnOff(HANDLE h, UINT32 flag) +Smack * WINAPI extSmackSoundOnOff(Smack *h, UINT32 flag) { OutTraceDW("SmackSoundOnOff: h=%x flag=%x\n", h, flag); - DumpSmack((Smack *)h); + DumpSmack(h); return (*pSmackSoundOnOff)(h, flag); } -Smack * WINAPI extSmackGoto(HANDLE h, UINT32 flag) +Smack * WINAPI extSmackGoto(Smack *h, UINT32 flag) { OutTraceDW("SmackGoto: h=%x flag=%x\n", h, flag); - DumpSmack((Smack *)h); + DumpSmack(h); return (*pSmackGoto)(h, flag); } -Smack * WINAPI extSmackColorRemap(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype) +Smack * WINAPI extSmackColorRemap(Smack *h, const void PTR4 *remappal, u32 numcolors, u32 paltype) { OutTraceDW("SmackColorRemap: h=%x numcolors=%d paltype=%d\n", h, numcolors, paltype); - DumpSmack((Smack *)h); + DumpSmack(h); // BYPASS the call to avoid resolution changes //return (*pSmackColorRemap)(h, remappal, numcolors, paltype); - return (Smack *)h; + return h; } -Smack * WINAPI extSmackColorRemapWithTrans(HANDLE h, const void PTR4 *remappal, u32 numcolors, u32 paltype, u32 transindex) +Smack * WINAPI extSmackColorRemapWithTrans(Smack *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); + DumpSmack(h); // BYPASS the call to avoid resolution changes //return (*pSmackColorRemapWithTrans)(h, remappal, numcolors, paltype); - return (Smack *)h; + return h; } /* --------------------------------------------------------------- diff --git a/dll/user32.cpp b/dll/user32.cpp index ec523f0..549c0d5 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -165,7 +165,7 @@ static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "TranslateMessage", (FARPROC)TranslateMessage, (FARPROC *)&pTranslateMessage, (FARPROC)extTranslateMessage}, - {HOOK_IAT_CANDIDATE, 0, "UpdateWindow", (FARPROC)NULL, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, + {HOOK_IAT_CANDIDATE, 0, "UpdateWindow", (FARPROC)UpdateWindow, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, // v2.04.04: needed for "Hide Desktop" option //{HOOK_IAT_CANDIDATE, 0, "GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement}, //{HOOK_IAT_CANDIDATE, 0, "SetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pSetWindowPlacement, (FARPROC)extSetWindowPlacement}, {HOOK_HOT_CANDIDATE, 0x25, "ChangeDisplaySettingsA", (FARPROC)ChangeDisplaySettingsA, (FARPROC *)&pChangeDisplaySettingsA, (FARPROC)extChangeDisplaySettingsA}, @@ -777,6 +777,7 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow) BOOL res; extern HWND hTrayWnd; static long iLastSizX, iLastSizY; + int nOrigCmd; //static long iLastPosX, iLastPosY; OutTraceDW("ShowWindow: hwnd=%x, CmdShow=%x(%s)\n", hwnd, nCmdShow, ExplainShowCmd(nCmdShow)); @@ -787,6 +788,7 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow) return TRUE; } + nOrigCmd = nCmdShow; if (dxw.dwFlags1 & PREVENTMAXIMIZE){ if(nCmdShow==SW_MAXIMIZE){ OutTraceDW("ShowWindow: suppress SW_MAXIMIZE maximize\n"); @@ -804,14 +806,12 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow) } res=(*pShowWindow)(hwnd, nCmdShow); - // v2.03.95: force zero size when minimize and drefresh window coordinates + // v2.03.95: force zero size when minimize and refresh window coordinates if(hwnd == dxw.GethWnd()){ if(nCmdShow==SW_MINIMIZE) { dxw.IsVisible = FALSE; iLastSizX = dxw.iSizX; iLastSizY = dxw.iSizY; - //iLastPosX = dxw.iPosX; - //iLastPosY = dxw.iPosY; dxw.iSizX = dxw.iSizY = 0; } else { @@ -819,11 +819,10 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow) if((dxw.iSizX == 0) && (dxw.iSizY == 0)){ dxw.iSizX = iLastSizX; dxw.iSizY = iLastSizY; - //dxw.iPosX = iLastPosX; - //dxw.iPosY = iLastPosY; } } } + //dxw.UpdateDesktopCoordinates(); OutTraceDW("ShowWindow: res=%x\n", res); @@ -1269,8 +1268,14 @@ static BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HW lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); } - if(dxw.dwFlags1 & MODIFYMOUSE){ - extGetCursorPos(&(lpMsg->pt)); + if((dxw.dwFlags1 & MODIFYMOUSE) && dxw.GethWnd()){ + POINT point; + //res=(*pGetCursorPos)(&point); // can't do this. Why? + point = lpMsg->pt; + point=dxw.ScreenToClient(point); + point=dxw.FixCursorPos(point); + OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", lpMsg->pt.x, lpMsg->pt.y, point.x, point.y); + lpMsg->pt = point; } if(dxw.dwFlags1 & SLOWDOWN) (*pSleep)(1); @@ -2340,8 +2345,9 @@ LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *lpDevMode, DWORD dwflags) if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); - if (lpDevMode) sprintf(sInfo, " DeviceName=%s fields=%x(%s) size=(%d x %d) bpp=%d", - lpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), + // v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR) + if (lpDevMode) sprintf(sInfo, " fields=%x(%s) size=(%d x %d) bpp=%d", + lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsA: lpDevMode=%x flags=%x(%s)%s\n", lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); @@ -2358,8 +2364,9 @@ LONG WINAPI extChangeDisplaySettingsW(DEVMODEW *lpDevMode, DWORD dwflags) if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); - if (lpDevMode) sprintf(sInfo, " DeviceName=%ls fields=%x(%s) size=(%d x %d) bpp=%d", - lpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), + // v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR) + if (lpDevMode) sprintf(sInfo, "fields=%x(%s) size=(%d x %d) bpp=%d", + lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsW: lpDevMode=%x flags=%x(%s)%s\n", lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index e1c83f56964baa770ed46796df85ef43a25e73a1..9592d639e829f59c014521ffd30e387e431e1d7d 100644 GIT binary patch delta 101 zcmZ2=kK@dJjtv_$C-ZU1hzBv0GUPERfXNJod?3tbNM%Tw9LS?OIf0!`G>9RT!4Hf* x82o|Io57XAWqRW|M)Bzh`x*Hr8)UIGpV8cYMw4;M>*;wSOiJ4mM43)W0sxLE9KQen delta 38 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 diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index f1ab47b..1132085 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -95,7 +95,6 @@ static char *Unescape(char *s, char **dest) return *dest; } - void GetFolderFromPath(char *path) { for(char *c=&path[strlen(path)-1]; (c>path) && (*c!='\\'); c--) *c=0; @@ -1230,6 +1229,7 @@ void CDxwndhostView::SaveConfigFile() } for(; i < MAXTARGETS; i ++) ClearTarget(i, gInitPath); this->isUpdated=FALSE; + this->isRegistryUpdated=FALSE; } CDxwndhostView::~CDxwndhostView() @@ -1384,6 +1384,7 @@ void CDxwndhostView::OnInitialUpdate() this->OnHookStop(); if(m_StartToTray) this->OnGoToTrayIcon(); this->isUpdated=FALSE; + this->isRegistryUpdated=FALSE; pTitles = &PrivateMaps[0]; pTargets= &TargetMaps[0]; @@ -1488,6 +1489,7 @@ BOOL CDxwndhostView::OnImport(CString sFilePath) Resize(); SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; return TRUE; } @@ -1567,6 +1569,7 @@ void CDxwndhostView::OnImport() Resize(); SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } } @@ -1591,6 +1594,7 @@ void CDxwndhostView::OnModify() strnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE); PrivateMaps[i].notes = (char *)realloc(PrivateMaps[i].notes, strlen(dlg.m_Notes.GetString())+1); strcpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString()); + if(strcmp((char *)dlg.m_Registry.GetString(), PrivateMaps[i].registry)) this->isRegistryUpdated=TRUE; PrivateMaps[i].registry = (char *)realloc(PrivateMaps[i].registry, strlen(dlg.m_Registry.GetString())+1); strcpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString()); strnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH); @@ -1829,6 +1833,7 @@ void CDxwndhostView::OnSort() SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } BOOL PauseResumeThreadList(DWORD dwOwnerPID, bool bResumeThread) @@ -2071,6 +2076,7 @@ void CDxwndhostView::OnAdd(char *sInitialPath) Resize(); SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } } @@ -2105,6 +2111,7 @@ void CDxwndhostView::OnDuplicate() } SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveTop() @@ -2141,6 +2148,7 @@ void CDxwndhostView::OnMoveTop() } SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveUp() @@ -2175,6 +2183,7 @@ void CDxwndhostView::OnMoveUp() } SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveDown() @@ -2209,6 +2218,7 @@ void CDxwndhostView::OnMoveDown() } SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveBottom() @@ -2246,6 +2256,7 @@ void CDxwndhostView::OnMoveBottom() } SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnDelete() @@ -2281,6 +2292,7 @@ void CDxwndhostView::OnDelete() Resize(); SetTarget(TargetMaps); this->isUpdated=TRUE; + this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnHookStart() @@ -2545,6 +2557,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point) case ID_PRUN: OnRun(); break; + case ID_RUNUNHOOKED: + OnRun(TRUE); + break; case ID_PMODIFY: OnModify(); break; @@ -3230,6 +3245,11 @@ static void MakeHiddenFile(char *sTargetPath) PROCESSMAP pm; void CDxwndhostView::OnRun() +{ + OnRun(FALSE); +} + +void CDxwndhostView::OnRun(BOOL bForceNoHook) { CListCtrl& listctrl = GetListCtrl(); POSITION pos; @@ -3268,8 +3288,9 @@ void CDxwndhostView::OnRun() MakeHiddenFile(exepath); strncpy(RestrictedMaps[0].path, exepath, MAX_PATH); } + if(bForceNoHook) RestrictedMaps[0].flags3 &= ~HOOKENABLED; SetTarget(RestrictedMaps); - OutTrace("OnRun idx=%d prog=\"%s\"\n", i, TargetMaps[i].path); + OutTrace("OnRun idx=%d prog=\"%s\" unhooked=%x\n", i, TargetMaps[i].path, bForceNoHook); if(TargetMaps[i].flags7 & HOOKNORUN){ MessageBoxLang(DXW_STRING_CANT_RUN, DXW_STRING_WARNING, MB_ICONERROR|MB_OK); @@ -3287,7 +3308,7 @@ void CDxwndhostView::OnRun() } if((TargetMaps[i].flags3 & EMULATEREGISTRY) || (TargetMaps[i].flags4 & OVERRIDEREGISTRY)){ - if(this->isUpdated){ + if(this->isRegistryUpdated){ if(MessageBoxLang(DXW_STRING_VREG_UPDATE,DXW_STRING_WARNING, MB_OKCANCEL|MB_ICONINFORMATION)==IDOK) this->SaveConfigFile(); } @@ -3307,7 +3328,9 @@ void CDxwndhostView::OnRun() CheckSafeDiscVersion(TargetMaps[i].path); } - if(TargetMaps[i].flags2 & STARTDEBUG){ + // v2.04.04: fix - STARTDEBUG and INJECTSUSPENDED must take place only when HOOKENABLED + if ((TargetMaps[i].flags2 & STARTDEBUG) && + (TargetMaps[i].flags3 & HOOKENABLED)){ OutTrace("debugger mode\n"); ThreadInfo_Type ThreadInfo; ThreadInfo.TM=&TargetMaps[i]; @@ -3316,7 +3339,8 @@ void CDxwndhostView::OnRun() CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); } else - if(TargetMaps[i].flags7 & INJECTSUSPENDED){ + if ((TargetMaps[i].flags7 & INJECTSUSPENDED) && + (TargetMaps[i].flags3 & HOOKENABLED)){ OutTrace("injectsuspended mode\n"); InjectSuspended(exepath, folderpath); } @@ -3337,7 +3361,9 @@ void CDxwndhostView::OnRun() // wait & recover CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RecoverTargetMaps, (LPVOID)TargetMaps, 0, NULL); - if(gAutoHideMode) this->OnGoToTrayIcon(); + // go to tray icon mode when autohide is set, but only if hooking is enabled. If not enable it + // is not possible to monitor the process status, so the window will never show automatically! + if(gAutoHideMode && !bForceNoHook) this->OnGoToTrayIcon(); // not working: the file is opened, can't be deleted //if(TargetMaps[i].flags7 & COPYNOSHIMS){ diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h index c89fc5d..be50a48 100644 --- a/host/dxwndhostView.h +++ b/host/dxwndhostView.h @@ -18,6 +18,7 @@ protected: // Create from serialization only features. afx_msg void OnHotKey(UINT, UINT, UINT); DECLARE_DYNCREATE(CDxwndhostView) BOOL isUpdated; + BOOL isRegistryUpdated; void SaveConfigFile(); BOOL OnInitDialog(); @@ -89,6 +90,7 @@ protected: afx_msg void OnSetPath(); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnRun(); + afx_msg void OnRun(BOOL); afx_msg void OnClearAllLogs(); afx_msg void OnGoToTrayIcon(); afx_msg void OnSaveFile(); diff --git a/host/resource b/host/resource index 992c4ed0aab249ff6d424e45b843254691ca12d2..55e20f89baae04af308b709bfce98f9f24ccdfb3 100644 GIT binary patch delta 63 zcmV-F0KosAn*;ot1F#milTe@rlW?I12~_}207w8&08f)~oF$S029sc^29x3_7?Uu# V8nZCBk`Kt6_ZqN7L$I=6q8ELvfMllJpcdz