/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: SWInfo.hpp Date: 2022-1-25 Author: Reece ***/ #pragma once namespace Aurora::SWInfo { struct OSInformation { // I tried to make these references, but the special c++ andineers decided that objects and functions should hold constantness, not the data // Returning a const reference to a struct containing const references, maintaining the ability to move, and disabling copy, is impossible // Nice highiq lang const AuString *kKernelString; // const AuString *kUserlandBrand; // Windows 10 Pro, Xbox, glibc, Ubuntu, distro name const AuString *kUserlandDesktopEnv; // DWM, CF, [kwin/etc] const AuString *kBuildString; // Example: (`??7??.?.amd64???.rs?_release.??-??`, `Linux version wtf-doxing-lts (no-lts@fingerprinterinos) (some things here) #1 SMP Mon, 69 Apr 2000 13:33:37 +0000`) AuUInt32 uKernelMajor {}; AuUInt32 uKernelMinor {}; AuUInt32 uKernelPatch {}; AuUInt32 uUserlandMajor {}; AuUInt32 uUserlandMinor {}; AuUInt32 uUserlandPatch {}; bool bIsServer {}; bool bIsEnterprise {}; Aurora::Build::EPlatform ePlatform = Aurora::Build::EPlatform::eEnumInvalid; private: static inline AuString _kIgnore {}; public: OSInformation() : kKernelString(&_kIgnore), kUserlandDesktopEnv(&_kIgnore), kUserlandBrand(&_kIgnore), kBuildString(&_kIgnore), ePlatform(Build::EPlatform::eEnumInvalid) {} AU_DEFINE_CTOR_VA(OSInformation, ( kKernelString, kUserlandBrand, kUserlandDesktopEnv, kBuildString, ePlatform )) AU_NO_COPY(OSInformation); AU_MOVE(OSInformation); }; AUKN_SYM const OSInformation &GetPlatformInfo(); // VersionHelpers.h, except it doesn't lie to you and wont break NIX land AUKN_SYM bool IsWindowsXPOrGreater(); AUKN_SYM bool IsWindowsXPSP1OrGreater(); AUKN_SYM bool IsWindowsXPSP2OrGreater(); AUKN_SYM bool IsWindowsXPSP3OrGreater(); AUKN_SYM bool IsWindowsVistaOrGreater(); AUKN_SYM bool IsWindowsVistaSP1OrGreater(); AUKN_SYM bool IsWindowsVistaSP2OrGreater(); AUKN_SYM bool IsWindows7OrGreater(); AUKN_SYM bool IsWindows7SP1OrGreater(); AUKN_SYM bool IsWindows8OrGreater(); AUKN_SYM bool IsWindows8Point1OrGreater(); AUKN_SYM bool IsWindows10OrGreater(); AUKN_SYM bool IsWindows11OrGreater(); }