use wdk_sys::{ntddk::RtlGetVersion, NT_SUCCESS, RTL_OSVERSIONINFOW};
use crate::os_versions::{OSVersionInfo, VERSION_MAP};
extern crate alloc;
lazy_static! {
pub static ref OS_INFO: &'static OSVersionInfo = {
let mut os_version = RTL_OSVERSIONINFOW {
dwOSVersionInfoSize: 0,
dwMajorVersion: 0,
dwMinorVersion: 0,
dwBuildNumber: 0,
dwPlatformId: 0,
szCSDVersion: [0; 128],
};
let os_version_ptr: *mut RTL_OSVERSIONINFOW = &mut os_version;
let status = unsafe { RtlGetVersion(os_version_ptr) };
if !NT_SUCCESS(status) {
return &VERSION_MAP[0];
}
for os_info in &VERSION_MAP {
if os_info.major_version == os_version.dwMajorVersion
&& os_info.build_number == os_version.dwBuildNumber
{
return &os_info;
}
}
&VERSION_MAP[0]
};
}