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 版本 | 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) |