mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
add new "win_version" setting to fake the reported windows version
This commit is contained in:
parent
f4ca7973eb
commit
b88857386e
@ -57,6 +57,7 @@ typedef struct CNCDDRAWCONFIG
|
||||
int fixchilds;
|
||||
BOOL hook_peekmessage;
|
||||
BOOL hook_getmessage;
|
||||
char win_version[32];
|
||||
|
||||
/* Undocumented settings */
|
||||
|
||||
|
@ -70,6 +70,8 @@ typedef HMODULE(WINAPI* LOADLIBRARYEXAPROC)(LPCSTR, HANDLE, DWORD);
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYEXWPROC)(LPCWSTR, HANDLE, DWORD);
|
||||
typedef FARPROC(WINAPI* GETPROCADDRESSPROC)(HMODULE, LPCSTR);
|
||||
typedef BOOL(WINAPI* GETDISKFREESPACEAPROC)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||
typedef DWORD(WINAPI* GETVERSIONPROC)(void);
|
||||
typedef BOOL(WINAPI* GETVERSIONEXAPROC)(LPOSVERSIONINFOA);
|
||||
typedef HRESULT(WINAPI* COCREATEINSTANCEPROC)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID*);
|
||||
typedef MCIERROR(WINAPI* MCISENDCOMMANDAPROC)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
||||
typedef LPTOP_LEVEL_EXCEPTION_FILTER(WINAPI* SETUNHANDLEDEXCEPTIONFILTERPROC)(LPTOP_LEVEL_EXCEPTION_FILTER);
|
||||
@ -120,6 +122,8 @@ extern LOADLIBRARYEXAPROC real_LoadLibraryExA;
|
||||
extern LOADLIBRARYEXWPROC real_LoadLibraryExW;
|
||||
extern GETPROCADDRESSPROC real_GetProcAddress;
|
||||
extern GETDISKFREESPACEAPROC real_GetDiskFreeSpaceA;
|
||||
extern GETVERSIONPROC real_GetVersion;
|
||||
extern GETVERSIONEXAPROC real_GetVersionExA;
|
||||
extern COCREATEINSTANCEPROC real_CoCreateInstance;
|
||||
extern MCISENDCOMMANDAPROC real_mciSendCommandA;
|
||||
extern SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter;
|
||||
|
@ -72,6 +72,9 @@ BOOL WINAPI fake_GetDiskFreeSpaceA(
|
||||
LPDWORD lpNumberOfFreeClusters,
|
||||
LPDWORD lpTotalNumberOfClusters);
|
||||
|
||||
DWORD WINAPI fake_GetVersion(void);
|
||||
BOOL WINAPI fake_GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
|
||||
|
||||
HWND WINAPI fake_CreateWindowExA(
|
||||
DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y,
|
||||
int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
||||
|
@ -69,6 +69,7 @@ void cfg_load()
|
||||
GET_INT(g_config.fixchilds, "fixchilds", FIX_CHILDS_DETECT_PAINT);
|
||||
GET_BOOL(g_config.hook_peekmessage, "hook_peekmessage", FALSE);
|
||||
GET_BOOL(g_config.hook_getmessage, "hook_getmessage", FALSE);
|
||||
GET_STRING("win_version", "", g_config.win_version, sizeof(g_config.win_version));
|
||||
|
||||
/* Undocumented settings */
|
||||
|
||||
@ -323,6 +324,7 @@ static void cfg_create_ini()
|
||||
"lock_mouse_top_left=false\n"
|
||||
"no_compat_warning=false\n"
|
||||
"remove_menu=false\n"
|
||||
";win_version=95\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -63,6 +63,8 @@ LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA;
|
||||
LOADLIBRARYEXWPROC real_LoadLibraryExW = LoadLibraryExW;
|
||||
GETPROCADDRESSPROC real_GetProcAddress = GetProcAddress;
|
||||
GETDISKFREESPACEAPROC real_GetDiskFreeSpaceA = GetDiskFreeSpaceA;
|
||||
GETVERSIONPROC real_GetVersion = GetVersion;
|
||||
GETVERSIONEXAPROC real_GetVersionExA = GetVersionExA;
|
||||
COCREATEINSTANCEPROC real_CoCreateInstance = CoCreateInstance;
|
||||
MCISENDCOMMANDAPROC real_mciSendCommandA = mciSendCommandA;
|
||||
SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter = SetUnhandledExceptionFilter;
|
||||
@ -168,6 +170,8 @@ HOOKLIST g_hook_hooklist[] =
|
||||
{ "LoadLibraryExW", (PROC)fake_LoadLibraryExW, (PROC*)&real_LoadLibraryExW, HOOK_SKIP_2 },
|
||||
{ "GetProcAddress", (PROC)fake_GetProcAddress, (PROC*)&real_GetProcAddress, HOOK_SKIP_2 },
|
||||
{ "GetDiskFreeSpaceA", (PROC)fake_GetDiskFreeSpaceA, (PROC*)&real_GetDiskFreeSpaceA, HOOK_SKIP_2 },
|
||||
{ "GetVersion", (PROC)fake_GetVersion, (PROC*)&real_GetVersion, HOOK_SKIP_2 },
|
||||
{ "GetVersionExA", (PROC)fake_GetVersionExA, (PROC*)&real_GetVersionExA, HOOK_SKIP_2 },
|
||||
#if defined(_DEBUG) && defined(__GNUC__)
|
||||
{ "SetUnhandledExceptionFilter", (PROC)fake_SetUnhandledExceptionFilter, (PROC*)&real_SetUnhandledExceptionFilter, 0 },
|
||||
#endif
|
||||
|
@ -1548,6 +1548,98 @@ BOOL WINAPI fake_GetDiskFreeSpaceA(
|
||||
return result;
|
||||
}
|
||||
|
||||
DWORD WINAPI fake_GetVersion()
|
||||
{
|
||||
if (_strcmpi(g_config.win_version, "95") == 0)
|
||||
return 0xC3B60004;
|
||||
|
||||
if (_strcmpi(g_config.win_version, "98") == 0)
|
||||
return 0xC0000A04;
|
||||
|
||||
if (_strcmpi(g_config.win_version, "nt4") == 0)
|
||||
return 0x05650004;
|
||||
|
||||
if (_strcmpi(g_config.win_version, "2000") == 0)
|
||||
return 0x08930005;
|
||||
|
||||
if (_strcmpi(g_config.win_version, "xp") == 0)
|
||||
return 0x0A280105;
|
||||
|
||||
return real_GetVersion();
|
||||
}
|
||||
|
||||
BOOL WINAPI fake_GetVersionExA(LPOSVERSIONINFOA info)
|
||||
{
|
||||
if (info && info->dwOSVersionInfoSize == sizeof(OSVERSIONINFOA))
|
||||
{
|
||||
if (_strcmpi(g_config.win_version, "95") == 0)
|
||||
{
|
||||
*info = (OSVERSIONINFOA){ sizeof(OSVERSIONINFOA), 4, 0, 950, 1, "" };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "98") == 0)
|
||||
{
|
||||
*info = (OSVERSIONINFOA){ sizeof(OSVERSIONINFOA), 4, 10, 67766446, 1, "" };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "nt4") == 0)
|
||||
{
|
||||
*info = (OSVERSIONINFOA){ sizeof(OSVERSIONINFOA), 4, 0, 1381, 2, "Service Pack 5" };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "2000") == 0)
|
||||
{
|
||||
*info = (OSVERSIONINFOA){ sizeof(OSVERSIONINFOA), 5, 0, 2195, 2, "" };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "xp") == 0)
|
||||
{
|
||||
*info = (OSVERSIONINFOA){ sizeof(OSVERSIONINFOA), 5, 1, 2600, 2, "Service Pack 3" };
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (info && info->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXA))
|
||||
{
|
||||
LPOSVERSIONINFOEXA ex = (LPOSVERSIONINFOEXA)info;
|
||||
if (_strcmpi(g_config.win_version, "95") == 0)
|
||||
{
|
||||
*ex = (OSVERSIONINFOEXA){ sizeof(OSVERSIONINFOEXA), 4, 0, 950, 1, "", 1, 0, 256, 1, 30 };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "98") == 0)
|
||||
{
|
||||
*ex = (OSVERSIONINFOEXA){ sizeof(OSVERSIONINFOEXA), 4, 10, 67766446, 1, "", 1, 0, 256, 1, 30 };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "nt4") == 0)
|
||||
{
|
||||
*ex = (OSVERSIONINFOEXA){ sizeof(OSVERSIONINFOEXA), 4, 0, 1381, 2, "Service Pack 5", 5, 0, 256, 1, 30 };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "2000") == 0)
|
||||
{
|
||||
*ex = (OSVERSIONINFOEXA){ sizeof(OSVERSIONINFOEXA), 5, 0, 2195, 2, "", 0, 0, 256, 1, 30 };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strcmpi(g_config.win_version, "xp") == 0)
|
||||
{
|
||||
*ex = (OSVERSIONINFOEXA){ sizeof(OSVERSIONINFOEXA), 5, 1, 2600, 2, "Service Pack 3", 3, 0, 256, 1, 30 };
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return real_GetVersionExA(info);
|
||||
}
|
||||
|
||||
BOOL WINAPI fake_DestroyWindow(HWND hWnd)
|
||||
{
|
||||
TRACE("DestroyWindow(hwnd=%p) - g_ddraw.hwnd=%p [%p]\n", hWnd, g_ddraw.hwnd, _ReturnAddress());
|
||||
|
Loading…
x
Reference in New Issue
Block a user