Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155/* * versionhelpers.h * * Inline helper functions for Windows version detection * * This file is part of the ReactOS PSDK package. * * Contributors: * Created by Timo Kreuzer <timo.kreuzer@reactos.org> * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */
#pragma once#define _versionhelpers_H_INCLUDED_
#include <specstrings.h>
#ifdef __cplusplus#define VERSIONHELPERAPI inline bool#else#define VERSIONHELPERAPI FORCEINLINE BOOL#endif
VERSIONHELPERAPIIsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor){ OSVERSIONINFOEXW osvi = { sizeof(osvi), wMajorVersion, wMinorVersion, 0, 0, {0}, wServicePackMajor, 0, 0, 0, 0 }; DWORDLONG dwlConditionMask = VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL); dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); dwlConditionMask = VerSetConditionMask(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;}
VERSIONHELPERAPIIsWindowsXPOrGreater(){ return IsWindowsVersionOrGreater(5, 1, 0);}
VERSIONHELPERAPIIsWindowsXPSP1OrGreater(){ return IsWindowsVersionOrGreater(5, 1, 1);}
VERSIONHELPERAPIIsWindowsXPSP2OrGreater(){ return IsWindowsVersionOrGreater(5, 1, 2);}
VERSIONHELPERAPIIsWindowsXPSP3OrGreater(){ return IsWindowsVersionOrGreater(5, 1, 3);}
VERSIONHELPERAPIIsWindowsVistaOrGreater(){ return IsWindowsVersionOrGreater(6, 0, 0);}
VERSIONHELPERAPIIsWindowsVistaSP1OrGreater(){ return IsWindowsVersionOrGreater(6, 0, 1);}
VERSIONHELPERAPIIsWindowsVistaSP2OrGreater(){ return IsWindowsVersionOrGreater(6, 0, 2);}
VERSIONHELPERAPIIsWindows7OrGreater(){ return IsWindowsVersionOrGreater(6, 1, 0);}
VERSIONHELPERAPIIsWindows7SP1OrGreater(){ return IsWindowsVersionOrGreater(6, 1, 1);}
VERSIONHELPERAPIIsWindows8OrGreater(){ return IsWindowsVersionOrGreater(6, 2, 0);}
VERSIONHELPERAPIIsWindows8Point1OrGreater(){ return IsWindowsVersionOrGreater(6, 3, 0);}
VERSIONHELPERAPIIsWindowsThresholdOrGreater(){ return IsWindowsVersionOrGreater(10, 0, 0);}
VERSIONHELPERAPIIsWindows10OrGreater(){ return IsWindowsVersionOrGreater(10, 0, 0);}
VERSIONHELPERAPIIsWindowsServer(){ OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION }; DWORDLONG const dwlConditionMask = VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL); return VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask) == FALSE;}
VERSIONHELPERAPIIsActiveSessionCountLimited(){ OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, 0, 0 }; DWORDLONG dwlConditionMask = VerSetConditionMask(0, VER_SUITENAME, VER_AND); BOOL fSuiteTerminal, fSuiteSingleUserTS;
osvi.wSuiteMask = VER_SUITE_TERMINAL; fSuiteTerminal = VerifyVersionInfoW(&osvi, VER_SUITENAME, dwlConditionMask);
osvi.wSuiteMask = VER_SUITE_SINGLEUSERTS; fSuiteSingleUserTS = VerifyVersionInfoW(&osvi, VER_SUITENAME, dwlConditionMask);
return !(fSuiteTerminal & !fSuiteSingleUserTS);}
#ifdef __REACTOS__VERSIONHELPERAPIIsReactOS(){ /* Hardcoded SharedUserData and PAGE_SIZE to avoid NDK includes */ return *(UINT*)((ULONG_PTR)0x7FFE0000 + 4096 - sizeof(ULONG)) == 0x8EAC705;}#endif // __REACTOS__