static osVersion() { Api.RTL_OSVERSIONINFOW x = default; x.dwOSVersionInfoSize = Api.SizeOf(x); if (0 == Api.RtlGetVersion(ref x)) { _winver = Math2.MakeWord(x.dwMinorVersion, x.dwMajorVersion); _winbuild = (int)x.dwBuildNumber; //use this because Environment.OSVersion.Version (GetVersionEx) lies, even if we have correct manifest when is debugger present } else { Debug.Fail("RtlGetVersion"); var v = Environment.OSVersion.Version; _winver = Math2.MakeWord(v.Minor, v.Major); _winbuild = v.Build; } _minWin8 = _winver >= win8; _minWin8_1 = _winver >= win8_1; _minWin10 = _winver >= win10; if (_minWin10) { _win10build = _winbuild; } //print.it(_win10build); //this is to remind to add new members for new Windows 10/11 versions //Debug_.PrintIf(_win10build > 19044, $"{_win10build} {Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DisplayVersion", "failed")}"); _is32BitOS = sizeof(nint) == 4 && !(Api.IsWow64Process(Api.GetCurrentProcess(), out _isWow64) && _isWow64); }
static AVersion() { Api.RTL_OSVERSIONINFOW x = default; x.dwOSVersionInfoSize = Api.SizeOf(x); if (0 == Api.RtlGetVersion(ref x)) { _winver = AMath.MakeUshort(x.dwMinorVersion, x.dwMajorVersion); //use this because Environment.OSVersion.Version (GetVersionEx) lies, even if we have correct manifest when is debugger present } else { Debug.Fail("RtlGetVersion"); var v = Environment.OSVersion.Version; _winver = AMath.MakeUshort(v.Minor, v.Major); } _minWin8 = _winver >= Win8; _minWin8_1 = _winver >= Win8_1; _minWin10 = _winver >= Win10; _is32BitOS = sizeof(IntPtr) == 4 && !(Api.IsWow64Process(Api.GetCurrentProcess(), out _isWow64) && _isWow64); }