1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #ifndef _INC_VERSIONHELPERS
7 #define _INC_VERSIONHELPERS
8 
9 #include <winapifamily.h>
10 
11 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && !defined(__WIDL__)
12 
13 #ifdef __cplusplus
14 #define VERSIONHELPERAPI inline bool
15 #else
16 #define VERSIONHELPERAPI FORCEINLINE BOOL
17 #endif
18 
IsWindowsVersionOrGreater(WORD major,WORD minor,WORD servpack)19 VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD major, WORD minor, WORD servpack)
20 {
21     OSVERSIONINFOEXW vi = {sizeof(vi),major,minor,0,0,{0},servpack};
22     return VerifyVersionInfoW(&vi, VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR,
23         VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0,
24             VER_MAJORVERSION,VER_GREATER_EQUAL),
25             VER_MINORVERSION,VER_GREATER_EQUAL),
26             VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL));
27 }
28 
IsWindowsXPOrGreater(void)29 VERSIONHELPERAPI IsWindowsXPOrGreater(void) {
30     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
31 }
32 
IsWindowsXPSP1OrGreater(void)33 VERSIONHELPERAPI IsWindowsXPSP1OrGreater(void) {
34     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
35 }
36 
IsWindowsXPSP2OrGreater(void)37 VERSIONHELPERAPI IsWindowsXPSP2OrGreater(void) {
38     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
39 }
40 
IsWindowsXPSP3OrGreater(void)41 VERSIONHELPERAPI IsWindowsXPSP3OrGreater(void) {
42     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
43 }
44 
IsWindowsVistaOrGreater(void)45 VERSIONHELPERAPI IsWindowsVistaOrGreater(void) {
46     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
47 }
48 
IsWindowsVistaSP1OrGreater(void)49 VERSIONHELPERAPI IsWindowsVistaSP1OrGreater(void) {
50     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
51 }
52 
IsWindowsVistaSP2OrGreater(void)53 VERSIONHELPERAPI IsWindowsVistaSP2OrGreater(void) {
54     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
55 }
56 
IsWindows7OrGreater(void)57 VERSIONHELPERAPI IsWindows7OrGreater(void) {
58     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
59 }
60 
IsWindows7SP1OrGreater(void)61 VERSIONHELPERAPI IsWindows7SP1OrGreater(void) {
62     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
63 }
64 
IsWindows8OrGreater(void)65 VERSIONHELPERAPI IsWindows8OrGreater(void) {
66     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
67 }
68 
IsWindows8Point1OrGreater(void)69 VERSIONHELPERAPI IsWindows8Point1OrGreater(void) {
70     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
71 }
72 
IsWindowsThresholdOrGreater(void)73 VERSIONHELPERAPI IsWindowsThresholdOrGreater(void) {
74     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD), 0);
75 }
76 
IsWindows10OrGreater(void)77 VERSIONHELPERAPI IsWindows10OrGreater(void) {
78     return IsWindowsThresholdOrGreater();
79 }
80 
IsWindowsServer(void)81 VERSIONHELPERAPI IsWindowsServer(void) {
82     OSVERSIONINFOEXW vi = {sizeof(vi),0,0,0,0,{0},0,0,0,VER_NT_WORKSTATION};
83     return !VerifyVersionInfoW(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL));
84 }
85 
86 #endif
87 #endif
88