const string RootContainer = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"; const string RootQuery = "System.Devices.ContainerId:=\"" + RootContainer + "\""; const string DeviceClassKey = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10"; const string DeviceDriverVersionKey = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3"; const string HalDeviceClass = "4d36e966-e325-11ce-bfc1-08002be10318"; public static async Task<string> GetWindowsVersionAsync() { // There is no good place to get this. // The HAL driver version number should work unless you're using a custom HAL... var hal = await GetHalDevice(DeviceDriverVersionKey); if (hal == null || !hal.Properties.ContainsKey(DeviceDriverVersionKey)) return null; var versionParts = hal.Properties[DeviceDriverVersionKey].ToString().Split('.'); return string.Join(".", versionParts.Take(2).ToArray()); } private static async Task<PnpObject> GetHalDevice(params string[] properties) { var actualProperties = properties.Concat(new[] { DeviceClassKey }); var rootDevices = await PnpObject.FindAllAsync(PnpObjectType.Device, actualProperties, RootQuery); return rootDevices.FirstOrDefault(y => y.Properties .Last().Value.ToString().Equals(HalDeviceClass)); }