#os-version #version #nt #winapi #os #windows

no-std nt_version

Queries the major, minor and build version of Windows (NT) efficiently

1 unstable release

0.1.3 Jan 1, 2020
0.1.2 Dec 7, 2019
0.1.1 Dec 7, 2019
0.1.0 Dec 7, 2019

#178 in Windows APIs

Download history 6/week @ 2023-12-18 57/week @ 2023-12-25 65/week @ 2024-01-08 9/week @ 2024-02-19 17/week @ 2024-02-26 14/week @ 2024-03-04 6/week @ 2024-03-11 7/week @ 2024-03-18 37/week @ 2024-03-25

65 downloads per month

Unlicense

7KB

Build Status Crates.io Docs.rs License

nt_version

Queries the major, minor, and build version of Windows (NT) efficiently with usage of undocumented NTDLL functions. Needs a minimum version of NT 5.1 (Windows XP or above). This crate is no_std.

nt_version = "0.1"

If building fails with a linker error, you're missing ntdll.lib from your system. It doesn't come on older versions of Windows with the SDK and you need to install the DDK.

Alternatively, enable the fallback feature which queries the function pointer at runtime (but is slower):

nt_version = { version = "0.1", features = ["fallback"] }

Usage

It only has one function: get, and it's recommended you use it explicitly:

fn main() {
    let (major, minor, build) = nt_version::get();
    println!("NT Version v{}.{}.{}", major, minor, build);
}

This returns the NTDLL version, which has this numbering system.

Why?

Microsoft deprecated GetVersionEx back in Windows 8.1 in favour of functions such as "IsWindows8Point1OrGreater" and there's not really a good way to just get an OS version now. You can still use NetWkstaGetInfo from lmwksta.h if you just want the OS version without any build numbers, but it's much slower and allocates a WKSTA_INFO_100 chunk which you have to deallocate yourself, containing excess info your like PC name as a windows wide-string. Not very ideal.

Dependencies

~175KB