Windows API 拥有下面的G e t Ve r s i o n 函数:
DWORD GetVersion();
该函数已经有相当长的历史了。最初它是为1 6 位Wi n d o w s 设计的。它的作用很简单,在高位字中返回M S - D O S 版本号,在低位字中返回Wi n d o w s 版本号。对于每个字来说,高位字节代表主要版本号,低位字节代表次要版本号。
但是,编写该代码的程序员犯了一个小小的错误,函数的编码结果使得Wi n d o w s 的版本号颠倒了,即主要版本号位于低位字节,而次要版本号位于高位字节。由于许多程序员已经开始使用该函数,M i c r o s o f t 不得不保持函数的原样,并修改了文档,以说明这个错误。
由于围绕着G e t Ve r s i o n 函数存在着各种混乱,因此M i c r o s o f t 增加了一个新函数G e t Ve r s i o n E x :
BOOL GetVersionEx(POSVERSIONINFO pVersionInformation);
为了使操作更加容易,Windows 2000以后的版本 提供了一个新的函数,即Ve r i f y Ve r s i o n I n f o ,用于对主机系统的版本与你的应用程序需要的版本进行比较:
BOOL VerifyVersionInfo(
POSVERSIONINFOEX pVersionInformation,
DWORD dwTypeMask,
DWORDLONG dwlConditionMask);
若要使用该函数,必须指定一个O S V E R S I O N I N F O E X 结构,将它的d w O S Ve r s i o n I n f o S i z e 成员初始化为该结构的大小,然后对该结构中的其他成员(这些成员对你的应用程序来说很重要)进行初始化。当调用Ve r i f y Ve r s i o n I n f o 时,d w Ty p e M a s k 参数用于指明该结构的哪些成员已经进行了初始化。d w Ty p e M a s k 参数是用O R 连接在一起的下列标志中的任何一个标志:
V E R _ M I N O RV E R S I O N ,V E R _ M A J O RV E R S I O N ,V E R _ B U I L D N U M B E R ,V E R _ P L AT F O R M I D ,VER_ SERV I C E PA C K M I N O R ,V E R _ S E RV I C E PA C K M A J O R ,V E R _ S U I T E N A M E ,VER_PRODUCT_ TYPE 。最后一个参数d w l C o n d i t i o n M a s k 是个6 4 位值,用于控制该函数如何将系统的版本信息与需要的信息进行比较。