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

v2_02_76_src

Former-commit-id: e638d38fb9407ba82b1423e5596ccadd84aaecd3
This commit is contained in:
gho tik 2014-05-24 12:39:16 -04:00 committed by Refael ACkermann
parent 8e93278b0c
commit 46fe2cb28f
24 changed files with 202 additions and 52 deletions

View File

@ -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

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0abd5d664eea54b2046da9cf7c3b556569a5bbd8c65eb87e1b088dff67641ef1
oid sha256:cb95d0f4d937aa39bf29f2fdcc106f4999dff564dbb4b323be38fd9e106184fd
size 483840

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11f3d90b87b33ec400bd96219a0786300f2dbd21935e72a2b859317f887696e0
oid sha256:14c815ffe23493c0f2ea72905d50b6972fcf35e78b827e243865b327d2ce7ac8
size 540160

10
build/dxwnd.reg Normal file
View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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) {

View File

@ -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){

View File

@ -102,7 +102,6 @@ void dxwCore::InitTarget(TARGETMAP *target)
pTimeShifter = TimeShifterCoarse;
pTimeShifter64 = TimeShifter64Coarse;
}
if(dwFlags4 & ENABLEHOTKEYS) MapKeysInit();
}
void dxwCore::SetScreenSize(void)

View File

@ -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;

View File

@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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;
}

Binary file not shown.

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="9.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="USER-PC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="USER-PC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -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!

View File

@ -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

View File

@ -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)

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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

Binary file not shown.

View File

@ -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;