public static extern int RtlGetVersion(ref RtlOSVersionInfoEx lpVersionInformation);
private string GetOsVersionString() { var name = "unknown"; var v = new RtlOSVersionInfoEx { dwOSVersionInfoSize = (uint)Marshal.SizeOf(typeof(RtlOSVersionInfoEx)) }; RtlGetVersion(ref v); var isWorkstation = v.wProductType == VER_NT_WORKSTATION; if (v.dwMajorVersion == 3) { name = "Windows NT 3.51"; } else if (v.dwMajorVersion == 4) { if (v.dwPlatformId == (uint)PlatformID.Win32Windows) { if (v.dwMinorVersion == 0) { name = "Windows 95"; } else if (v.dwMinorVersion == 10) { name = "Windows 98"; } else if (v.dwMinorVersion == 90) { name = "Windows ME"; } } else if (v.dwPlatformId == (uint)PlatformID.Win32NT) { name = "Windows NT 4.0"; } } else if (v.dwMajorVersion == 5) { if (v.dwMinorVersion == 0) { name = "Windows 2000"; } else if (v.dwMinorVersion == 1) { name = "Windows XP"; } else if (v.dwMinorVersion == 2) { name = "Windows .NET Server"; } } else if (v.dwMajorVersion == 6) { if (v.dwMinorVersion == 0) { name = isWorkstation ? "Windows Vista" : "Windows 2008"; } else if (v.dwMinorVersion == 1) { name = isWorkstation ? "Windows 7" : "Windows 2008 R2"; } else if (v.dwMinorVersion == 2) { name = isWorkstation ? "Windows 8" : "Windows 2012"; } else if (v.dwMinorVersion == 3) { name = isWorkstation ? "Windows 8.1" : "Windows 2012 R2"; } } else if (v.dwMajorVersion == 10) { name = isWorkstation ? "Windows 10" : "Windows 2016"; } var os = default(string); if (string.IsNullOrEmpty(v.szCSDVersion)) { os = string.Format("{0} (Build {1})", name, v.dwBuildNumber); } else { os = string.Format("{0} (Build {1}, {2})", name, v.dwBuildNumber, v.szCSDVersion); } #if DEBUG System.Diagnostics.Debug.WriteLine(string.Format("OS String: {0}", os)); #endif return(os); }