mirror of
https://github.com/bb107/MemoryModulePP
synced 2026-06-08 13:15:33 +00:00
109 lines
2.6 KiB
C++
109 lines
2.6 KiB
C++
#include "stdafx.h"
|
|
|
|
bool NTAPI RtlVerifyVersion(IN DWORD MajorVersion, IN DWORD MinorVersion OPTIONAL, IN DWORD BuildNumber OPTIONAL, IN BYTE Flags) {
|
|
DWORD Versions[3];
|
|
RtlGetNtVersionNumbers(Versions, Versions + 1, Versions + 2);
|
|
if (Versions[0] == MajorVersion &&
|
|
((Flags & RTL_VERIFY_FLAGS_MINOR_VERSION) ? Versions[1] == MinorVersion : true) &&
|
|
((Flags & RTL_VERIFY_FLAGS_BUILD_NUMBERS) ? Versions[2] == BuildNumber : true))return true;
|
|
return false;
|
|
}
|
|
|
|
bool NTAPI RtlIsWindowsVersionOrGreater(IN DWORD MajorVersion, IN DWORD MinorVersion, IN DWORD BuildNumber) {
|
|
static DWORD Versions[3]{};
|
|
if (!Versions[0])RtlGetNtVersionNumbers(Versions, Versions + 1, Versions + 2);
|
|
|
|
if (Versions[0] == MajorVersion) {
|
|
if (Versions[1] == MinorVersion) return Versions[2] >= BuildNumber;
|
|
else return (Versions[1] > MinorVersion);
|
|
}
|
|
else return Versions[0] > MajorVersion;
|
|
}
|
|
|
|
bool NTAPI RtlIsWindowsVersionInScope(
|
|
IN DWORD MinMajorVersion, IN DWORD MinMinorVersion, IN DWORD MinBuildNumber,
|
|
IN DWORD MaxMajorVersion, IN DWORD MaxMinorVersion, IN DWORD MaxBuildNumber) {
|
|
return RtlIsWindowsVersionOrGreater(MinMajorVersion, MinMinorVersion, MinBuildNumber) &&
|
|
!RtlIsWindowsVersionOrGreater(MaxMajorVersion, MaxMinorVersion, MaxBuildNumber);
|
|
}
|
|
|
|
WINDOWS_VERSION NTAPI NtWindowsVersion() {
|
|
static WINDOWS_VERSION version = null;
|
|
DWORD versions[3]{};
|
|
if (version)return version;
|
|
RtlGetNtVersionNumbers(versions, versions + 1, versions + 2);
|
|
|
|
switch (versions[0]) {
|
|
case 5: {
|
|
switch (versions[1]) {
|
|
case 1:return version = versions[2] == 2600 ? xp : invalid;
|
|
case 2:return version = versions[2] == 3790 ? xp : invalid;
|
|
default:break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 6: {
|
|
switch (versions[1]) {
|
|
case 0: {
|
|
switch (versions[2]) {
|
|
case 6000:
|
|
case 6001:
|
|
case 6002:
|
|
return version = vista;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 1: {
|
|
switch (versions[2]) {
|
|
case 7600:
|
|
case 7601:
|
|
return version = win7;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 2: {
|
|
if (versions[2] == 9200)return version = win8;
|
|
break;
|
|
}
|
|
break;
|
|
case 3: {
|
|
if (versions[2] == 9600)return version = win8_1;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 10: {
|
|
if (versions[1])break;
|
|
switch (versions[2]) {
|
|
case 10240:
|
|
case 10586: return version = win10;
|
|
case 14393: return version = win10_1;
|
|
case 15063:
|
|
case 16299:
|
|
case 17134:
|
|
case 17763:
|
|
case 18362:return version = win10_2;
|
|
default:if (RtlIsWindowsVersionOrGreater(versions[0], versions[1], 15063))return version = win10_2;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return version = invalid;
|
|
}
|