日期:2014-05-16  浏览次数:20951 次

因在Windows 8.1中微软没有对版本API进行更新 导致桌面软件识别版本号为6.2.9200


这次的问题在Windows 8.1 Preview的时候就已经存在,RTM发布微软将系统内核升级到了6.3.9600,可对上层的Win32 API没有进行更新,导致应用程序通过这些API进行取值的时候返回错误的版本号,即Windows 8的版本号:6.2.9200。
几乎所有桌面软件都使用了GetVersion或者GetVersionEx来查询Windows的系统版本信息,可这些API此次在Windows 8.1上却返回了Windows 8的版本号,受影响范围极广,此前很多著名的硬件检测软件都识别了错误的系统版本,包括AIDA64在内也错误的识别了Windows 8.1的系统版本,不过在新版本中已经修正。
目前这个“BUG”还没有得到Windows Update下发的补丁进行修正,这可能导致很多问题,如应用层软件的驱动程序支持Windows 8却不支持Windows 8.1,可它在8.1上运行时因为获取到的是错误的版本号,最终会尝试加载驱动导致系统崩溃等。

临时的修正方案是使用未文档化的函数ntdll!RtlGetNtVersionNumbers进行获取版本号,此API返回的是正确的版本号,即6.3.9600。

此次Win32 API返回的版本号和内核版本号不同的问题,在各个版本的Windows系统中尚属首例。