verifyVersionInfoA 函数 (winbase.h)

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

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

语法

BOOL VerifyVersionInfoA(
  [in] LPOSVERSIONINFOEXA 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 的 Media Center 版本还是平板电脑版本,请调用 GetSystemMetrics

Windows 10:如果 lpVersionInfo 参数设置为指定Windows 8.1或Windows 10,则没有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 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

GetVersionEx

OSVERSIONINFOEX

操作系统版本

系统信息函数

VER_SET_CONDITION

VerSetConditionMask