OSVERSIONINFOEXA 结构 (winnt.h)
包含操作系统版本信息。 这些信息包括主要版本号和次要版本号、内部版本号、平台标识符,以及有关系统上安装的产品套件和最新 Service Pack 的信息。 此结构与 GetVersionEx 和 VerifyVersionInfo 函数一起使用。
语法
typedef struct _OSVERSIONINFOEXA {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
CHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
成员
dwOSVersionInfoSize
此数据结构的大小(以字节为单位)。 将此成员设置为 sizeof(OSVERSIONINFOEX)
。
dwMajorVersion
操作系统的主版本号。 有关详细信息,请参阅“备注”。
dwMinorVersion
操作系统的次要版本号。 有关详细信息,请参阅“备注”。
dwBuildNumber
操作系统的内部版本号。
dwPlatformId
操作系统平台。 此成员可以 VER_PLATFORM_WIN32_NT (2) 。
szCSDVersion[128]
一个以 null 结尾的字符串,例如“Service Pack 3”,指示系统上安装的最新 Service Pack。 如果未安装 Service Pack,则字符串为空。
wServicePackMajor
系统上安装的最新 Service Pack 的主版本号。 例如,对于 Service Pack 3,主版本号为 3。 如果未安装 Service Pack,则值为零。
wServicePackMinor
系统上安装的最新 Service Pack 的次要版本号。 例如,对于 Service Pack 3,次要版本号为 0。
wSuiteMask
标识系统上可用的产品套件的位掩码。 此成员可以是以下值的组合。
wProductType
有关系统的任何其他信息。 此成员可以是以下值之一。
wReserved
保留供将来使用。
注解
依赖版本信息不是测试功能的最佳方式。 有关相关功能,请参阅文档。 有关功能检测的常见技术的详细信息,请参阅 操作系统版本。
如果必须需要特定的操作系统,请确保将其用作最低支持版本,而不是为一个操作系统设计测试。 这样,检测代码将继续在 Windows 的未来版本上运行。
下表汇总了受支持的 Windows 版本返回的值。 使用标记为“其他”的列中的信息来区分具有相同版本号的操作系统。
操作系统 | 版本号 | dwMajorVersion | dwMinorVersion | 其他 |
---|---|---|---|---|
Windows 10 | 10.0* | 10 | 0 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2016 | 10.0* | 10 | 0 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows 8.1 | 6.3* | 6 | 3 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2012 R2 | 6.3* | 6 | 3 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows 8 | 6.2 | 6 | 2 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2012 | 6.2 | 6 | 2 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows 7 | 6.1 | 6 | 1 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2008 R2 | 6.1 | 6 | 1 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows Server 2008 | 6.0 | 6 | 0 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows Vista | 6.0 | 6 | 0 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2003 R2 | 5.2 | 5 | 2 | GetSystemMetrics (SM_SERVERR2) != 0 |
Windows Home Server | 5.2 | 5 | 2 | OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER |
Windows Server 2003 | 5.2 | 5 | 2 | GetSystemMetrics (SM_SERVERR2) == 0 |
Windows XP Professional x64 Edition | 5.2 | 5 | 2 | (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) |
Windows XP | 5.1 | 5 | 1 | 不适用 |
Windows 2000 | 5.0 | 5 | 0 | 不适用 |
*对于已针对Windows 8.1或Windows 10进行清单的应用程序。 未针对Windows 8.1或Windows 10进行清单的应用程序将返回Windows 8 OS 版本值 (6.2) 。 若要针对Windows 8.1或Windows 10来清单应用程序,请参阅面向 Windows 的应用程序。 |
不应仅依赖 VER_SUITE_SMALLBUSINESS 标志来确定系统上是否已安装 Small Business Server,因为此标志和 VER_SUITE_SMALLBUSINESS_RESTRICTED 标志都是在安装此产品套件时设置的。 如果将此安装升级到 Windows Server Standard Edition,VER_SUITE_SMALLBUSINESS_RESTRICTED 标志将被 清除,但是, VER_SUITE_SMALLBUSINESS标志 将保持设置。 在这种情况下,这表示曾经在此系统上安装了 Small Business Server。 如果此安装进一步升级到 Windows Server,Enterprise Edition,VER_SUITE_SMALLBUSINESS标志将保持设置。
如果兼容模式有效, 则 OSVERSIONINFOEX 结构包含有关为 应用程序兼容性选择的操作系统的信息。
若要确定基于 Win32 的应用程序是否在 WOW64 上运行,请调用 IsWow64Process 函数。 若要确定系统是否正在运行 64 位版本的 Windows,请调用 GetNativeSystemInfo 函数。
GetSystemMetrics 函数提供有关当前操作系统的以下附加信息。
产品 | 设置 |
---|---|
Windows Server 2003 R2 | SM_SERVERR2 |
Windows XP Media Center Edition | SM_MEDIACENTER |
Windows XP Starter Edition | SM_STARTER |
Windows XP Tablet PC Edition | SM_TABLETPC |
示例
有关示例,请参阅 获取系统版本。
注意
winnt.h 标头将 OSVERSIONINFOEX 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | winnt.h (包括 Windows.h) |