From ee247794c554fcd8f00ba7d495e8243b2bc50a68 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 1 Jan 2025 03:30:54 +0100 Subject: [PATCH] only enable workaround for win 11 24H2 --- inc/versionhelpers.h | 19 +++++++++++++++++++ src/dd.c | 2 +- src/dllmain.c | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/inc/versionhelpers.h b/inc/versionhelpers.h index 6c4076d..36f2dd6 100644 --- a/inc/versionhelpers.h +++ b/inc/versionhelpers.h @@ -60,6 +60,17 @@ VERSIONHELPERAPI IsWindowsVersion(DWORD major, DWORD minor, DWORD build, WORD se VER_SERVICEPACKMAJOR, VER_EQUAL)); } +VERSIONHELPERAPI IsWindowsVersionExcactBuild(DWORD major, DWORD minor, DWORD build, WORD servpack) +{ + RTL_OSVERSIONINFOEXW vi = { sizeof(vi),major,minor,build,0,{0},servpack }; + return verhelp_verify_version(&vi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER | VER_SERVICEPACKMAJOR, + VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, + VER_MAJORVERSION, VER_EQUAL), + VER_MINORVERSION, VER_EQUAL), + VER_BUILDNUMBER, VER_EQUAL), + VER_SERVICEPACKMAJOR, VER_EQUAL)); +} + VERSIONHELPERAPI IsWindowsVersionAnySP(DWORD major, DWORD minor, DWORD build) { RTL_OSVERSIONINFOEXW vi = { sizeof(vi),major,minor,build,0,{0},0 }; @@ -135,6 +146,10 @@ VERSIONHELPERAPI IsWindows11OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN11), LOBYTE(_WIN32_WINNT_WIN11), 22000, 0); } +VERSIONHELPERAPI IsWindows11Version24H2OrGreater(void) { + return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN11), LOBYTE(_WIN32_WINNT_WIN11), 26100, 0); +} + VERSIONHELPERAPI IsWindowsServer(void) { OSVERSIONINFOEXW vi = {sizeof(vi),0,0,0,0,{0},0,0,0,VER_NT_WORKSTATION}; return !verhelp_verify_version(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL)); @@ -212,6 +227,10 @@ VERSIONHELPERAPI IsWindows11(void) { return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WIN11), LOBYTE(_WIN32_WINNT_WIN11), 22000, 0); } +VERSIONHELPERAPI IsWindows11Version24H2(void) { + return IsWindowsVersionExcactBuild(HIBYTE(_WIN32_WINNT_WIN11), LOBYTE(_WIN32_WINNT_WIN11), 26100, 0); +} + VERSIONHELPERAPI IsWine(void) { return verhelp_wine_get_version() != NULL; } diff --git a/src/dd.c b/src/dd.c index fed3f2e..1e90def 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1824,7 +1824,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute if (g_config.singlecpu) { - if (!IsWine() && IsWindows11OrGreater()) + if (!IsWine() && IsWindows11Version24H2()) { if (GetProcessAffinityMask(proc, &proc_affinity, &system_affinity)) SetProcessAffinityMask(proc, system_affinity); diff --git a/src/dllmain.c b/src/dllmain.c index adbc8c0..f4ede20 100644 --- a/src/dllmain.c +++ b/src/dllmain.c @@ -183,7 +183,7 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved) } case DLL_THREAD_ATTACH: { - if (g_config.singlecpu && !IsWine() && IsWindows11OrGreater()) + if (g_config.singlecpu && !IsWine() && IsWindows11Version24H2()) { util_set_thread_affinity(GetCurrentThreadId()); }