OSVERSIONINFOEXA 结构 (winnt.h)

包含操作系统版本信息。 这些信息包括主要版本号和次要版本号、内部版本号、平台标识符,以及有关系统上安装的产品套件和最新 Service Pack 的信息。 此结构与 GetVersionExVerifyVersionInfo 函数一起使用。

语法

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

标识系统上可用的产品套件的位掩码。 此成员可以是以下值的组合。

含义
VER_SUITE_BACKOFFICE
0x00000004
已安装 Microsoft BackOffice 组件。
VER_SUITE_BLADE
0x00000400
已安装 Windows Server 2003 Web 版。
VER_SUITE_COMPUTE_SERVER
0x00004000
已安装 Windows Server 2003 计算群集版本。
VER_SUITE_DATACENTER
0x00000080
已安装 Windows Server 2008 Datacenter、Windows Server 2003、Datacenter Edition 或 Windows 2000 Datacenter Server。
VER_SUITE_ENTERPRISE
0x00000002
已安装 Windows Server 2008 企业版、Windows Server 2003、Enterprise Edition或 Windows 2000 高级服务器。 有关此位标志的详细信息,请参阅备注部分。
VER_SUITE_EMBEDDEDNT
0x00000040
已安装 Windows XP Embedded。
VER_SUITE_PERSONAL
0x00000200
已安装Windows Vista 家庭高级版、Windows Vista 家庭普通版或 Windows XP 家庭版。
VER_SUITE_SINGLEUSERTS
0x00000100
支持远程桌面,但仅支持一个交互式会话。 除非系统在应用程序服务器模式下运行,否则将设置此值。
VER_SUITE_SMALLBUSINESS
0x00000001
Microsoft Small Business Server 曾经安装在系统上,但可能已升级到另一个版本的 Windows。 有关此位标志的详细信息,请参阅备注部分。
VER_SUITE_SMALLBUSINESS_RESTRICTED
0x00000020
Microsoft Small Business Server 随有效限制性客户端许可证一起安装。 有关此位标志的详细信息,请参阅备注部分。
VER_SUITE_STORAGE_SERVER
0x00002000
已安装 Windows Storage Server 2003 R2 或 Windows Storage Server 2003。
VER_SUITE_TERMINAL
0x00000010
已安装终端服务。 始终设置此值。

如果已设置 VER_SUITE_TERMINAL未设置VER_SUITE_SINGLEUSERTS ,则系统在应用程序服务器模式下运行。

VER_SUITE_WH_SERVER
0x00008000
已安装 Windows 主服务器。
VER_SUITE_MULTIUSERTS
0x00020000
AppServer 模式已启用。

wProductType

有关系统的任何其他信息。 此成员可以是以下值之一。

含义
VER_NT_DOMAIN_CONTROLLER
0x0000002
系统是域控制器,操作系统Windows Server 2012 、Windows Server 2008 R2、Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。
VER_NT_SERVER
0x0000003
操作系统Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

请注意,同样是域控制器的服务器报告为 VER_NT_DOMAIN_CONTROLLER,而不是 VER_NT_SERVER

VER_NT_WORKSTATION
0x0000001
操作系统为 Windows 8、Windows 7、Windows Vista、Windows XP Professional、Windows XP Home Edition 或 Windows 2000 Professional。

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)

另请参阅

IsWow64Process

OSVERSIONINFO

版本帮助程序 API