VerifyVersionInfoW 函数 (winbase.h)

将一组操作系统版本要求与当前正在运行的系统版本的相应值进行比较。此函数受基于清单的行为的约束。 有关详细信息,请参阅“备注”部分。

注意: 此函数已弃用 Windows 10。 有关详细信息,请参阅面向 Windows 应用程序的

语法

BOOL VerifyVersionInfoW(
  [in] LPOSVERSIONINFOEXW lpVersionInformation,
  [in] DWORD              dwTypeMask,
  [in] DWORDLONG          dwlConditionMask
);

参数

[in] lpVersionInformation

指向 OSVERSIONINFOEX 结构的指针,其中包含要比较的操作系统版本要求。 dwTypeMask 参数指示包含要比较的信息的此结构的成员。

必须将此结构的 dwOSVersionInfoSize 成员设置为 sizeof(OSVERSIONINFOEX)。 还必须为 dwTypeMask指示的成员指定有效数据。 该函数将忽略未设置相应 dwTypeMask 位的结构成员。

[in] dwTypeMask

一个掩码,指示要测试 OSVERSIONINFOEX 结构的成员。 此参数可以是以下一个或多个值。

价值 意义
VER_BUILDNUMBER
0x0000004
dwBuildNumber
VER_MAJORVERSION
0x0000002
dwMajorVersion

如果要测试主版本,还必须测试次要版本和 Service Pack 主要版本和次要版本。

VER_MINORVERSION
0x0000001
dwMinorVersion
VER_PLATFORMID
0x0000008
dwPlatformId
VER_SERVICEPACKMAJOR
0x0000020
wServicePackMajor
VER_SERVICEPACKMINOR
0x0000010
wServicePackMinor
VER_SUITENAME
0x0000040
wSuiteMask
VER_PRODUCT_TYPE
0x0000080
wProductType

[in] dwlConditionMask

要用于每个 lpVersionInfo 成员的比较类型。 若要生成此值,请为每个 OSVERSIONINFOEX 成员调用 VerSetConditionMask 函数或 VER_SET_CONDITION 宏一次。

返回值

如果当前正在运行的操作系统满足指定的要求,则返回值为非零值。

如果当前系统不满足要求,则返回值为零,GetLastError 返回ERROR_OLD_WIN_VERSION。

如果函数失败,则返回值为零,GetLastError 返回除ERROR_OLD_WIN_VERSION以外的错误代码。

言论

VerifyVersionInfo 函数检索有关当前正在运行的操作系统的版本信息,并将其与 lpVersionInfo 结构的有效成员进行比较。 这使你能够轻松确定一组所需的操作系统版本条件。 最好使用 VerifyVersionInfo,而不是调用 GetVersionEx 函数来执行自己的比较。

通常,VerifyVersionInfo 仅当所有指定测试都成功时才返回非零值。 但是,主要版本、次要版本和 Service Pack 版本以分层方式进行测试,因为操作系统版本是这些值的组合。 如果主版本存在条件,它将取代为次要版本和 Service Pack 版本指定的条件。 (不能测试大于 5 的主版本,次要版本小于或等于 1。如果指定此类测试,该函数将更改请求以测试大于 1 的次要版本,因为它正在对主版本执行大于操作。

该函数按以下顺序测试这些值:主版本、次要版本和 Service Pack 版本。 函数在值相等时继续测试值,当其中一个值不符合指定条件时停止。 例如,如果测试大于或等于版本 5.1 Service Pack 1 的系统,则如果当前版本为 6.0,则测试会成功。 (主版本大于指定版本,因此测试停止。同样,如果测试大于或等于版本 5.1 Service Pack 1 的系统,则如果当前版本为 5.2,则测试会成功。 (次要版本大于指定版本,因此测试停止。但是,如果测试的系统大于或等于版本 5.1 Service Pack 1,则如果当前版本为 5.0 Service Pack 2,则测试将失败。 (次要版本不大于指定版本,因此测试停止。

若要验证一系列系统版本,必须调用 VerifyVersionInfo 两次。 例如,若要验证系统版本是否大于 5.0 但小于或等于 5.1,请首先调用 VerifyVersionInfo 来测试主版本是否为 5 且次要版本大于 0,然后再次调用 VerifyVersionInfo 以测试主版本是否为 5 且次要版本小于或等于 1。

确定当前操作系统通常不是确定特定操作系统功能是否存在的最佳方法。 这是因为操作系统可能已在可再发行 DLL 中添加了新功能。 与其使用 GetVersionEx 来确定操作系统平台或版本号,不如测试功能本身是否存在。 有关详细信息,请参阅 操作系统版本

若要验证当前操作系统是 Windows 的媒体中心还是平板电脑版本,请调用 GetSystemMetrics

Windows 10:如果设置了 lpVersionInfo 参数,则当没有 Windows 8.1 或 Windows 10 兼容性清单的应用程序调用时,VerifyVersionInfo 返回 false,即使当前操作系统版本为 Windows 8.1 或 Windows 10 也是如此。 具体而言,VerifyVersionInfo 具有以下行为:

  • 如果应用程序没有清单,VerifyVersionInfo 的行为就像操作系统版本为 Windows 8 (6.2)。
  • 如果应用程序具有包含与 Windows 8.1 对应的 GUID 的清单,VerifyVersionInfo 的行为就像操作系统版本为 Windows 8.1 (6.3)。
  • 如果应用程序具有包含与 Windows 10 对应的 GUID 的清单,VerifyVersionInfo 的行为就像操作系统版本为 Windows 10(10.0)。
版本帮助程序函数 使用 VerifyVersionInfo 函数,因此,IsWindows8Point1OrGreaterIsWindows10OrGreater 的行为也受到清单的存在和内容的影响。

若要为 Windows 8.1 或 Windows 10 清单应用程序,请参阅 面向 Windows的应用程序。

例子

有关示例,请参阅 验证系统版本

注意

winbase.h 标头将 VerifyVersionInfo 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winbase.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

GetVersionEx

OSVERSIONINFOEX

操作系统版本

系统信息函数

VER_SET_CONDITION

VerSetConditionMask