OSVERSIONINFOEXW 结构 (winnt.h)

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

语法

typedef struct _OSVERSIONINFOEXW {
  DWORD dwOSVersionInfoSize;
  DWORD dwMajorVersion;
  DWORD dwMinorVersion;
  DWORD dwBuildNumber;
  DWORD dwPlatformId;
  WCHAR szCSDVersion[128];
  WORD  wServicePackMajor;
  WORD  wServicePackMinor;
  WORD  wSuiteMask;
  BYTE  wProductType;
  BYTE  wReserved;
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;

成员

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 Enterprise、Windows Server 2003、Enterprise Edition 或 Windows 2000 Advanced Server。 有关此位标志的详细信息,请参阅“备注”部分。
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小型企业服务器曾经安装在系统上,但可能已升级到另一版本的 Windows。 有关此位标志的详细信息,请参阅“备注”部分。
VER_SUITE_SMALLBUSINESS_RESTRICTED
0x00000020
Microsoft Small Business Server 随强制客户端许可证一起安装。 有关此位标志的详细信息,请参阅“备注”部分。
VER_SUITE_STORAGE_SERVER
0x00002000
已安装 Windows Storage Server 2003 R2 或 Windows Storage Server 2003is。
VER_SUITE_TERMINAL
0x00000010
已安装终端服务。 始终设置此值。

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

VER_SUITE_WH_SERVER
0x00008000
已安装 Windows Home Server。
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 版本 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