add new "win_version" setting to fake the reported windows version
This commit is contained in:
parent
f4ca7973eb
commit
b88857386e
6 changed files with 106 additions and 0 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue