blob: 25ea4149f5c41b41ea3027f54748a45960843d73 [file] [log] [blame]
Jacek Cabana883b472015-03-19 14:47:34 +01001/**
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
19VERSIONHELPERAPI 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
29VERSIONHELPERAPI IsWindowsXPOrGreater(void) {
30 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
31}
32
33VERSIONHELPERAPI IsWindowsXPSP1OrGreater(void) {
34 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
35}
36
37VERSIONHELPERAPI IsWindowsXPSP2OrGreater(void) {
38 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
39}
40
41VERSIONHELPERAPI IsWindowsXPSP3OrGreater(void) {
42 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
43}
44
45VERSIONHELPERAPI IsWindowsVistaOrGreater(void) {
46 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
47}
48
49VERSIONHELPERAPI IsWindowsVistaSP1OrGreater(void) {
50 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
51}
52
53VERSIONHELPERAPI IsWindowsVistaSP2OrGreater(void) {
54 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
55}
56
57VERSIONHELPERAPI IsWindows7OrGreater(void) {
58 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
59}
60
61VERSIONHELPERAPI IsWindows7SP1OrGreater(void) {
62 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
63}
64
65VERSIONHELPERAPI IsWindows8OrGreater(void) {
66 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
67}
68
69VERSIONHELPERAPI IsWindows8Point1OrGreater(void) {
70 return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
71}
72
73VERSIONHELPERAPI IsWindowsServer(void) {
74 OSVERSIONINFOEXW vi = {sizeof(vi),0,0,0,0,{0},0,0,0,VER_NT_WORKSTATION};
75 return !VerifyVersionInfoW(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL));
76}
77
78#endif
79#endif