1 // Clean drop-in replacement for the versionhelpers.h header
\r
3 // Copyright (C) 2015 Alessandro Menti <alessandro.menti@hotmail.it>
\r
5 // This library is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU Library General Public
\r
7 // License as published by the Free Software Foundation; either
\r
8 // version 2 of the License, or (at your option) any later version.
\r
10 // This library is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
13 // Library General Public License for more details.
\r
15 // You should have received a copy of the GNU Library General Public
\r
16 // License along with this library; if not, write to the Free Software
\r
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 #ifndef SG_VERSIONHELPERS_HXX_
\r
20 #define SG_VERSIONHELPERS_HXX_
\r
22 #include <sdkddkver.h>
\r
25 #define VERSIONHELPERAPI inline bool
\r
27 #define VERSIONHELPERAPI FORCEINLINE BOOL
\r
28 #endif // __cplusplus
\r
30 /* Windows 8/8.1 version numbers, not defined in the Windows 7 SDK. */
\r
31 #ifndef _WIN32_WINNT_WIN8
\r
32 #define _WIN32_WINNT_WIN8 0x0602
\r
34 #ifndef _WIN32_WINNT_WINBLUE
\r
35 #define _WIN32_WINNT_WINBLUE 0x0603
\r
38 VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD wMajorVersion,
\r
39 WORD wMinorVersion, WORD wServicePackMajor) {
\r
40 OSVERSIONINFOEXW osVersionInfo;
\r
41 DWORDLONG dwlConditionMask = 0;
\r
42 ZeroMemory(&osVersionInfo, sizeof(osVersionInfo));
\r
43 osVersionInfo.dwOSVersionInfoSize = sizeof(osVersionInfo);
\r
44 osVersionInfo.dwMajorVersion = wMajorVersion;
\r
45 osVersionInfo.dwMinorVersion = wMinorVersion;
\r
46 osVersionInfo.wServicePackMajor = wServicePackMajor;
\r
47 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION,
\r
49 VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION,
\r
51 VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR,
\r
53 return VerifyVersionInfoW(&osVersionInfo, VER_MAJORVERSION
\r
54 | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask);
\r
57 VERSIONHELPERAPI IsWindowsXPOrGreater() {
\r
58 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),
\r
59 LOBYTE(_WIN32_WINNT_WINXP), 0);
\r
62 VERSIONHELPERAPI IsWindowsXPSP1OrGreater() {
\r
63 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),
\r
64 LOBYTE(_WIN32_WINNT_WINXP), 1);
\r
67 VERSIONHELPERAPI IsWindowsXPSP2OrGreater() {
\r
68 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),
\r
69 LOBYTE(_WIN32_WINNT_WINXP), 2);
\r
72 VERSIONHELPERAPI IsWindowsXPSP3OrGreater() {
\r
73 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),
\r
74 LOBYTE(_WIN32_WINNT_WINXP), 3);
\r
77 VERSIONHELPERAPI IsWindowsVistaOrGreater() {
\r
78 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),
\r
79 LOBYTE(_WIN32_WINNT_VISTA), 0);
\r
82 VERSIONHELPERAPI IsWindowsVistaSP1OrGreater() {
\r
83 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),
\r
84 LOBYTE(_WIN32_WINNT_VISTA), 1);
\r
87 VERSIONHELPERAPI IsWindowsVistaSP2OrGreater() {
\r
88 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),
\r
89 LOBYTE(_WIN32_WINNT_VISTA), 2);
\r
92 VERSIONHELPERAPI IsWindows7OrGreater() {
\r
93 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7),
\r
94 LOBYTE(_WIN32_WINNT_WIN7), 0);
\r
97 VERSIONHELPERAPI IsWindows7SP1OrGreater() {
\r
98 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7),
\r
99 LOBYTE(_WIN32_WINNT_WIN7), 1);
\r
102 VERSIONHELPERAPI IsWindows8OrGreater() {
\r
103 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8),
\r
104 LOBYTE(_WIN32_WINNT_WIN8), 0);
\r
107 VERSIONHELPERAPI IsWindows8Point1OrGreater() {
\r
108 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE),
\r
109 LOBYTE(_WIN32_WINNT_WINBLUE), 0);
\r
112 VERSIONHELPERAPI IsWindowsServer() {
\r
113 OSVERSIONINFOEXW osVersionInfo;
\r
114 DWORDLONG dwlConditionMask = 0;
\r
115 ZeroMemory(&osVersionInfo, sizeof(osVersionInfo));
\r
116 osVersionInfo.dwOSVersionInfoSize = sizeof(osVersionInfo);
\r
117 osVersionInfo.wProductType = VER_NT_WORKSTATION;
\r
118 VER_SET_CONDITION(dwlConditionMask, VER_PRODUCT_TYPE, VER_EQUAL);
\r
119 return !VerifyVersionInfoW(&osVersionInfo, VER_PRODUCT_TYPE,
\r
122 #endif // SG_VERSIONHELPERS_HXX_
\r