diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 5b35bf2..32d12bf 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -143,6 +143,7 @@ #define ENABLEHOTKEYS 0x08000000 // Enables hot keys #define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call #define NOD3DRESET 0x20000000 // Disables D3D8/9 D3DDevice::Reset method +#define OVERRIDEREGISTRY 0x40000000 // same as EMULATEREGISTRY, but fake keys takeprecedence // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index ef61201..33179d4 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0abd5d664eea54b2046da9cf7c3b556569a5bbd8c65eb87e1b088dff67641ef1 +oid sha256:cb95d0f4d937aa39bf29f2fdcc106f4999dff564dbb4b323be38fd9e106184fd size 483840 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index b44d478..259f680 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11f3d90b87b33ec400bd96219a0786300f2dbd21935e72a2b859317f887696e0 +oid sha256:14c815ffe23493c0f2ea72905d50b6972fcf35e78b827e243865b327d2ce7ac8 size 540160 diff --git a/build/dxwnd.reg b/build/dxwnd.reg new file mode 100644 index 0000000..71b12c0 --- /dev/null +++ b/build/dxwnd.reg @@ -0,0 +1,10 @@ +# Requiem Avenging Angel: DirectX version patch + +[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\DirectX] +"Version"="4.07.00.0704" + +[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX] +"Version"="4.07.00.0704" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX] +"Version"="4.07.00.0704" diff --git a/build/exports/Requiem Avenging Angel (software).dxw b/build/exports/Requiem Avenging Angel (software).dxw new file mode 100644 index 0000000..0b0b99a --- /dev/null +++ b/build/exports/Requiem Avenging Angel (software).dxw @@ -0,0 +1,27 @@ +[target] +title0=Requiem Avenging Angel (software) +path0=D:\Games\Requiem Avenging Angel\Software.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=-1199570906 +flagg0=1207959552 +flagh0=20 +flagi0=1212153860 +tflag0=6914 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index a107f21..e52629a 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -500,3 +500,7 @@ added: "Suppress D3D8/9 Reset" flag fix: improved show FPS and Time Stretch overlay so that the two overlays won't overlap each other fix: bug in ddraw "Locked surface" mode preventing output on screen fix: fixed bug in critical common portion of the code that was crashing even unhooked programs (namely, Flash Player, ...) + +v2.02.76 +fixed and enhanced several features about registry emulation: added flags "Emulate registry" (to add missing entries) and "Override registry" (to fake existing entries with different values). Fixed "Requiem Avenging Angel" DirectX bogus check bug. +fixed bug in emulate surface palette handling affecting "Requiem Avenging Angel" colors \ No newline at end of file diff --git a/dll/advapi.cpp b/dll/advapi.cpp index 4937dec..66c7656 100644 --- a/dll/advapi.cpp +++ b/dll/advapi.cpp @@ -49,8 +49,56 @@ static char *hKey2String(HKEY hKey) return skey; } +static FILE *OpenFakeRegistry() +{ + DWORD dwAttrib; + char sSourcePath[MAX_PATH+1]; + char *p; + dwAttrib = GetFileAttributes("dxwnd.dll"); + if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL; + GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_PATH); + p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")]; + strcpy(p, "dxwnd.reg"); + return fopen(sSourcePath,"r"); +} + // --------------------------------------------------------------------------------- +static LONG myRegOpenKeyEx( + HKEY hKey, + LPCTSTR lpSubKey, + PHKEY phkResult) +{ + FILE *regf; + char sKey[MAX_PATH+1]; + char RegBuf[MAX_PATH+1]; + + sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); + OutTraceDW("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); + + regf=OpenFakeRegistry(); + if(regf!=NULL){ + if(phkResult) *phkResult=HKEY_FAKE; + fgets(RegBuf, 256, regf); + while (!feof(regf)){ + if(RegBuf[0]=='['){ + if((!strncmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){ + OutTrace("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, phkResult ? *phkResult : 0); + fclose(regf); + return ERROR_SUCCESS; + } + else { + if(phkResult) (*phkResult)--; + } + } + fgets(RegBuf, 256, regf); + } + fclose(regf); + } + return ERROR_FILE_NOT_FOUND; +} + + LONG WINAPI extRegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, @@ -59,36 +107,21 @@ LONG WINAPI extRegOpenKeyEx( PHKEY phkResult) { LONG res; - char RegBuf[256+1]; OutTraceR("RegOpenKeyEx: hKey=%x(%s) SubKey=\"%s\" Options=%x\n", hKey, hKey2String(hKey), lpSubKey, ulOptions); - res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult); - OutTraceR("RegOpenKeyEx: res=%x\n", res); - if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY)) return res; - - if(phkResult) *phkResult=HKEY_FAKE; - FILE *regf; - char sKey[256+1]; - sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); - OutTraceDW("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); - regf=fopen("dxwnd.reg","r"); - if(regf==NULL) return ERROR_FILE_NOT_FOUND; - fgets(RegBuf, 256, regf); - while (!feof(regf)){ - if(RegBuf[0]=='['){ - if((!strncmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){ - OutTrace("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, *phkResult); - fclose(regf); - return ERROR_SUCCESS; - } - else (*phkResult)--; - } - fgets(RegBuf, 256, regf); + if(dxw.dwFlags4 & OVERRIDEREGISTRY){ + res = myRegOpenKeyEx(hKey, lpSubKey, phkResult); + if(res == ERROR_SUCCESS) return res; } - fclose(regf); - return ERROR_FILE_NOT_FOUND; + + res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult); + OutTraceR("RegOpenKeyEx: res=%x phkResult=%x\n", res, phkResult ? *phkResult : 0); + + if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY)) return res; + + return myRegOpenKeyEx(hKey, lpSubKey, phkResult); } LONG WINAPI extRegQueryValueEx( @@ -132,14 +165,12 @@ LONG WINAPI extRegQueryValueEx( return res; } - //if(!(dxw.dwFlags3 & EMULATEREGISTRY)) return res; - // try emulated registry FILE *regf; - char RegBuf[256+1]; + char RegBuf[MAX_PATH+1]; char *pData; HKEY hCurKey=HKEY_FAKE+1; - regf=fopen("dxwnd.reg","r"); + regf=OpenFakeRegistry(); if(regf==NULL) return ERROR_FILE_NOT_FOUND; if(!lpValueName)lpValueName=""; fgets(RegBuf, 256, regf); @@ -159,17 +190,16 @@ LONG WINAPI extRegQueryValueEx( res=ERROR_FILE_NOT_FOUND; pData=&RegBuf[strlen(lpValueName)+3]; if(*pData=='"'){ // string value - //strcpy((char *)lpData, &RegBuf[strlen(lpValueName)+4]); - //lpData[strlen((char *)lpData)-2]=0; // eliminates " and \n - //if(lpType) *lpType=REG_SZ; - //*lpcbData=strlen((char *)lpData)+1; + LPBYTE lpb; + lpb = lpData; *lpcbData=0; pData++; while(*pData && (*pData != '"')){ if(*pData=='\\') pData++; - *lpData++=*pData++; + *lpb++=*pData++; *lpcbData++; } + *lpb = 0; // string terminator if(lpType) *lpType=REG_SZ; // OutTraceDW("RegQueryValueEx: Data=\"%s\" type=REG_SZ\n", lpData); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 1f3e0f9..1c2adc5 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -3565,7 +3565,7 @@ HRESULT WINAPI extSetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpdd lpentries = (LPPALETTEENTRY)PaletteEntries; res2=lpddp->GetEntries(0, 0, 256, lpentries); if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2)); - //mySetPalette(0, 256, lpentries); + mySetPalette(0, 256, lpentries); // v2.02.76: necessary for "Requiem Avenging Angel" in SURFACEEMULATION mode } // Apply palette to backbuffer surface. This is necessary on some games: "Duckman private dick", "Total Soccer 2000", ... if (lpDDSBack) { diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 0528e20..4e24f68 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -87,7 +87,7 @@ static char *Flag4Names[32]={ "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", "RELEASEMOUSE", "FRAMECOMPENSATION", "HOTPATCH", "ENABLEHOTKEYS", - "HOTPATCHALWAYS", "", "", "", + "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "", }; static char *TFlagNames[32]={ @@ -1222,7 +1222,9 @@ void HookModule(HMODULE base, int dxversion) HookDirect3D7(base, dxversion); if(dxw.dwFlags2 & HOOKOPENGL) HookOpenGLLibs(base, dxw.CustomOpenGLLib); if(dxw.dwFlags4 & HOOKGLIDE) HookGlideLibs(base); - if((dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base); + if( (dxw.dwFlags3 & EMULATEREGISTRY) || + (dxw.dwFlags4 & OVERRIDEREGISTRY) || + (dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base); HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for? } @@ -1428,6 +1430,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) dxw.hChildWnd=hwnd; // v2.02.31: set main win either this one or the parent! dxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? GetParent(hwnd) : hwnd); + if(dxw.dwFlags4 & ENABLEHOTKEYS) dxw.MapKeysInit(); } if(IsTraceDW){ diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index c7b7d6c..0797684 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -102,7 +102,6 @@ void dxwCore::InitTarget(TARGETMAP *target) pTimeShifter = TimeShifterCoarse; pTimeShifter64 = TimeShifter64Coarse; } - if(dwFlags4 & ENABLEHOTKEYS) MapKeysInit(); } void dxwCore::SetScreenSize(void) diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 48b4dd7..3656f2c 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -117,6 +117,7 @@ public: // methods BOOL CheckScreenResolution(unsigned int, unsigned int); LARGE_INTEGER StretchLargeCounter(LARGE_INTEGER); UINT MapKeysConfig(UINT, LPARAM, WPARAM); + void MapKeysInit(); public: // simple data variables BOOL Windowize; @@ -170,7 +171,6 @@ private: void ShowFPS(HDC); void ShowTimeStretching(HDC); TimerEvent_Type TimerEvent; - void MapKeysInit(); }; extern dxwCore dxw; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 580a036..af8a9e2 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -24,7 +24,7 @@ along with this program. If not, see . #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.75" +#define VERSION "2.02.76" #define DDTHREADLOCK 1 @@ -224,8 +224,9 @@ void InjectHook() for(i = 0; pMapping[i].path[0]; i ++){ if(!strncmp(name, pMapping[i].path, strlen(name))){ if (pMapping[i].flags2 & STARTDEBUG){ - OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); - HookInit(&pMapping[i],NULL); + HookInit(&pMapping[i],NULL); + // beware: logging is possible only AFTER HookInit execution + OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); } break; } diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 0518d09..06f1b8b 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/dxwnd.vs2008.vcproj.User-PC.User.user b/dll/dxwnd.vs2008.vcproj.User-PC.User.user new file mode 100644 index 0000000..facf31e --- /dev/null +++ b/dll/dxwnd.vs2008.vcproj.User-PC.User.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/dll/wndproc.cpp b/dll/wndproc.cpp index 98a1a86..1da6c7d 100644 --- a/dll/wndproc.cpp +++ b/dll/wndproc.cpp @@ -36,7 +36,6 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc) if(WhndTOS == WhndSize){ WhndSize += MAXWNDHSTACK; WhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry)); - //OutTraceDW("DEBUG: WNDPROC STACK new size=%d\n", WhndSize); } // wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses .... // v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them! diff --git a/host/Resource.h b/host/Resource.h index 3febda2..27d4268 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -152,6 +152,7 @@ #define IDC_HOOKDI 1112 #define IDC_EMULATEREGISTRY 1113 #define IDC_CDROMDRIVETYPE 1114 +#define IDC_OVERRIDEREGISTRY 1115 #define IDC_NOWINDOWMOVE 1116 #define IDC_DISABLEHAL 1117 #define IDC_LOCKSYSCOLORS 1118 diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 7515921..759ce05 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -46,6 +46,10 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOTEXTURES, cTarget->m_NoTextures); DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); DDX_Check(pDX, IDC_DISABLEFOGGING, cTarget->m_DisableFogging); + + // Registry management + DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); + DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index 4c6ece2..00036bd 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -40,7 +40,6 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip); DDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt); DDX_Check(pDX, IDC_NOFILLRECT, cTarget->m_NoFillRect); - DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_ZBUFFERALWAYS, cTarget->m_ZBufferAlways); DDX_Check(pDX, IDC_HOTPATCHALWAYS, cTarget->m_HotPatchAlways); } diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 7a08af9..4595f1f 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -72,6 +72,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_HookDLLs = TRUE; // default true !! m_HookEnabled = TRUE; // default true !! m_EmulateRegistry = FALSE; + m_OverrideRegistry = FALSE; m_FullScreenOnly = FALSE; m_FilterMessages = FALSE; m_PeekAllMessages = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 6c3078b..f0e2818 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -49,6 +49,7 @@ public: BOOL m_HotPatch; BOOL m_HookDLLs; BOOL m_EmulateRegistry; + BOOL m_OverrideRegistry; BOOL m_FullScreenOnly; BOOL m_FilterMessages; BOOL m_PeekAllMessages; diff --git a/host/dib.cpp b/host/dib.cpp index 5b4a13c..a7a9134 100644 --- a/host/dib.cpp +++ b/host/dib.cpp @@ -319,7 +319,7 @@ DWORD CDib::Save(CFile& file) const DWORD CDib::Read(CFile& file, BOOL bFromResource) { DWORD dwReadBytes = 0; - DWORD dwLength = file.GetLength(); + DWORD dwLength = (DWORD)file.GetLength(); // Ensures no memory leaks will occur Free(); diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 24a16db..a3d43d1 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -466,7 +466,10 @@ IDD_TAB_COMPAT DIALOGEX 0, 0, 300, 240 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Fake Version",IDC_STATIC,7,3,139,64 + GROUPBOX "Fake Version",IDC_STATIC,6,3,140,64 + GROUPBOX "3D effects",IDC_STATIC,149,3,144,64 + GROUPBOX "Registry",IDC_STATIC,149,69,144,64 + GROUPBOX "Tweaks",IDC_STATIC,6,69,140,164 CONTROL "",IDC_FAKEVERSION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,26,12,10 LISTBOX IDC_LISTFAKE,39,15,98,43,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP CONTROL "Handle Exceptions",IDC_HANDLEEXCEPTIONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,200,109,12 @@ -482,10 +485,11 @@ BEGIN CONTROL "Clean ZBUFFER @0.0 fix",IDC_ZBUFFER0CLEAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,104,109,12 CONTROL "Textures not power of 2 fix",IDC_NOPOWER2FIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,92,109,12 CONTROL "Disable performance counter",IDC_NOPERFCOUNTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,80,109,12 - CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,34,96,10 - GROUPBOX "3D effects",IDC_STATIC,149,3,144,64 - CONTROL "Disable Fogging",IDC_DISABLEFOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,46,96,10 + CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,34,96,10 + CONTROL "Disable Fogging",IDC_DISABLEFOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,46,96,10 CONTROL "Disable Textures",IDC_NOTEXTURES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,22,96,10 + CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,84,110,10 + CONTROL "Override Registry",IDC_OVERRIDEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,96,110,10 END IDD_TAB_SYSLIBS DIALOGEX 0, 0, 300, 240 @@ -526,7 +530,6 @@ BEGIN CONTROL "Suppress ddraw Flip",IDC_NODDRAWFLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,36,127,10 CONTROL "Suppress GDI Blt",IDC_NOGDIBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,48,127,10 GROUPBOX "Visual flags",IDC_STATIC,153,7,140,139 - CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,84,124,10 CONTROL "Force D3DCMP_ALWAYS setting ",IDC_ZBUFFERALWAYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,164,127,10 CONTROL "Suppress FillRect",IDC_NOFILLRECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,60,127,10 CONTROL "Force hot patching",IDC_HOTPATCHALWAYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,176,127,10 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 2070908..b966f86 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 86fe6f7..39bba94 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -116,6 +116,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY; + if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY; if(dlg->m_HookEnabled) t->flags3 |= HOOKENABLED; if(dlg->m_NoBanner) t->flags2 |= NOBANNER; if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG; @@ -293,6 +294,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0; dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0; dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0; + dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0; dlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0; dlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0; dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0;