Reactos
at master 154 lines 3.8 kB view raw
1/* 2 * versionhelpers.h 3 * 4 * Inline helper functions for Windows version detection 5 * 6 * This file is part of the ReactOS PSDK package. 7 * 8 * Contributors: 9 * Created by Timo Kreuzer <timo.kreuzer@reactos.org> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 16 * This code is distributed in the hope that it will be useful but 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18 * DISCLAMED. This includes but is not limited to warranties of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 */ 22 23#pragma once 24#define _versionhelpers_H_INCLUDED_ 25 26#include <specstrings.h> 27 28#ifdef __cplusplus 29#define VERSIONHELPERAPI inline bool 30#else 31#define VERSIONHELPERAPI FORCEINLINE BOOL 32#endif 33 34VERSIONHELPERAPI 35IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor) 36{ 37 OSVERSIONINFOEXW osvi = { sizeof(osvi), wMajorVersion, wMinorVersion, 0, 0, {0}, wServicePackMajor, 0, 0, 0, 0 }; 38 DWORDLONG dwlConditionMask = VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL); 39 dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); 40 dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); 41 42 return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE; 43} 44 45VERSIONHELPERAPI 46IsWindowsXPOrGreater() 47{ 48 return IsWindowsVersionOrGreater(5, 1, 0); 49} 50 51VERSIONHELPERAPI 52IsWindowsXPSP1OrGreater() 53{ 54 return IsWindowsVersionOrGreater(5, 1, 1); 55} 56 57VERSIONHELPERAPI 58IsWindowsXPSP2OrGreater() 59{ 60 return IsWindowsVersionOrGreater(5, 1, 2); 61} 62 63VERSIONHELPERAPI 64IsWindowsXPSP3OrGreater() 65{ 66 return IsWindowsVersionOrGreater(5, 1, 3); 67} 68 69VERSIONHELPERAPI 70IsWindowsVistaOrGreater() 71{ 72 return IsWindowsVersionOrGreater(6, 0, 0); 73} 74 75VERSIONHELPERAPI 76IsWindowsVistaSP1OrGreater() 77{ 78 return IsWindowsVersionOrGreater(6, 0, 1); 79} 80 81VERSIONHELPERAPI 82IsWindowsVistaSP2OrGreater() 83{ 84 return IsWindowsVersionOrGreater(6, 0, 2); 85} 86 87VERSIONHELPERAPI 88IsWindows7OrGreater() 89{ 90 return IsWindowsVersionOrGreater(6, 1, 0); 91} 92 93VERSIONHELPERAPI 94IsWindows7SP1OrGreater() 95{ 96 return IsWindowsVersionOrGreater(6, 1, 1); 97} 98 99VERSIONHELPERAPI 100IsWindows8OrGreater() 101{ 102 return IsWindowsVersionOrGreater(6, 2, 0); 103} 104 105VERSIONHELPERAPI 106IsWindows8Point1OrGreater() 107{ 108 return IsWindowsVersionOrGreater(6, 3, 0); 109} 110 111VERSIONHELPERAPI 112IsWindowsThresholdOrGreater() 113{ 114 return IsWindowsVersionOrGreater(10, 0, 0); 115} 116 117VERSIONHELPERAPI 118IsWindows10OrGreater() 119{ 120 return IsWindowsVersionOrGreater(10, 0, 0); 121} 122 123VERSIONHELPERAPI 124IsWindowsServer() 125{ 126 OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION }; 127 DWORDLONG const dwlConditionMask = VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL); 128 return VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask) == FALSE; 129} 130 131VERSIONHELPERAPI 132IsActiveSessionCountLimited() 133{ 134 OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, 0, 0 }; 135 DWORDLONG dwlConditionMask = VerSetConditionMask(0, VER_SUITENAME, VER_AND); 136 BOOL fSuiteTerminal, fSuiteSingleUserTS; 137 138 osvi.wSuiteMask = VER_SUITE_TERMINAL; 139 fSuiteTerminal = VerifyVersionInfoW(&osvi, VER_SUITENAME, dwlConditionMask); 140 141 osvi.wSuiteMask = VER_SUITE_SINGLEUSERTS; 142 fSuiteSingleUserTS = VerifyVersionInfoW(&osvi, VER_SUITENAME, dwlConditionMask); 143 144 return !(fSuiteTerminal & !fSuiteSingleUserTS); 145} 146 147#ifdef __REACTOS__ 148VERSIONHELPERAPI 149IsReactOS() 150{ 151 /* Hardcoded SharedUserData and PAGE_SIZE to avoid NDK includes */ 152 return *(UINT*)((ULONG_PTR)0x7FFE0000 + 4096 - sizeof(ULONG)) == 0x8EAC705; 153} 154#endif // __REACTOS__