From 57a98d667da4d5609b755e1dd1e4458f5867659b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 6 May 2024 02:56:40 +0200 Subject: [PATCH] add additonoal windows version check fucntions --- inc/versionhelpers.h | 67 ++++++++++++++++++++++++++++++++++++++++++++ src/versionhelpers.c | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/inc/versionhelpers.h b/inc/versionhelpers.h index 116f0f4..3e539c7 100644 --- a/inc/versionhelpers.h +++ b/inc/versionhelpers.h @@ -45,6 +45,17 @@ VERSIONHELPERAPI IsWindowsVersionOrGreater(DWORD major, DWORD minor, DWORD build VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL)); } +VERSIONHELPERAPI IsWindowsVersion(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_GREATER_EQUAL), + VER_SERVICEPACKMAJOR, VER_EQUAL)); +} + VERSIONHELPERAPI IsWindowsXPOrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0, 0); } @@ -106,6 +117,62 @@ VERSIONHELPERAPI IsWindowsServer(void) { return !verhelp_verify_version(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL)); } +VERSIONHELPERAPI IsWindowsXP(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0, 0); +} + +VERSIONHELPERAPI IsWindowsXPSP1(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0, 1); +} + +VERSIONHELPERAPI IsWindowsXPSP2(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0, 2); +} + +VERSIONHELPERAPI IsWindowsXPSP3(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0, 3); +} + +VERSIONHELPERAPI IsWindowsVista(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0, 0); +} + +VERSIONHELPERAPI IsWindowsVistaSP1(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0, 1); +} + +VERSIONHELPERAPI IsWindowsVistaSP2(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0, 2); +} + +VERSIONHELPERAPI IsWindows7(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0, 0); +} + +VERSIONHELPERAPI IsWindows7SP1(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0, 1); +} + +VERSIONHELPERAPI IsWindows8(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0, 0); +} + +VERSIONHELPERAPI IsWindows8Point1(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0, 0); +} + +VERSIONHELPERAPI IsWindowsThreshold(void) { + return IsWindows10OrGreater() && !IsWindows11OrGreater(); +} + +VERSIONHELPERAPI IsWindows10(void) { + return IsWindowsThreshold(); +} + +VERSIONHELPERAPI IsWindows11(void) { + return IsWindowsVersion(HIBYTE(_WIN32_WINNT_WIN11), LOBYTE(_WIN32_WINNT_WIN11), 22000, 0); +} + VERSIONHELPERAPI IsWine(void) { return verhelp_wine_get_version() != NULL; } diff --git a/src/versionhelpers.c b/src/versionhelpers.c index dc4b450..e422e90 100644 --- a/src/versionhelpers.c +++ b/src/versionhelpers.c @@ -9,7 +9,7 @@ static RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo; static WINE_GET_VERSIONPROC wine_get_version; static WINE_GET_HOST_VERSIONPROC wine_get_host_version; -/* GetProcAddress is rather slow so we use a function to inizialize it once on startup */ +/* GetProcAddress is rather slow so we use a function to initialize it once on startup */ void verhelp_init() { HMODULE mod = GetModuleHandleA("ntdll.dll");