Поделиться через


Функция 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

При тестировании основной версии необходимо также проверить дополнительную версию и основной и дополнительный версии пакета обновления.

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 . Чтобы создать это значение, вызовите функцию VerSetConditionMask или макросVER_SET_CONDITION один раз для каждого сравниваемого элемента OSVERSIONINFOEX .

Возвращаемое значение

Если текущая операционная система удовлетворяет указанным требованиям, возвращаемое значение будет ненулевым.

Если текущая система не соответствует требованиям, возвращаемое значение равно нулю, а GetLastError возвращает ERROR_OLD_WIN_VERSION.

Если функция завершается ошибкой, возвращаемое значение равно нулю, а GetLastError возвращает код ошибки, отличный от ERROR_OLD_WIN_VERSION.

Комментарии

Функция VerifyVersionInfo извлекает сведения о версии работающей операционной системы и сравнивает ее с допустимыми элементами структуры lpVersionInfo . Это позволяет легко определить наличие необходимого набора условий версии операционной системы. Предпочтительнее использовать VerifyVersionInfo , а не вызывать функцию GetVersionEx для выполнения собственных сравнений.

Как правило, VerifyVersionInfo возвращает ненулевое значение только в том случае, если все указанные тесты успешно выполнены. Однако основные, дополнительные версии и пакеты обновления тестируются иерархически, так как версия операционной системы является сочетанием этих значений. Если для основной версии существует условие, оно заменяет условия, указанные для дополнительной версии и версии пакета обновления. (Вы не можете проверить наличие основной версии больше 5 и дополнительной версии меньше или равной 1. Если указать такой тест, функция изменит запрос на проверку дополнительной версии больше 1, так как она выполняет операцию больше, чем для основной версии.)

Функция проверяет эти значения в следующем порядке: основная версия, дополнительный номер версии и версия пакета обновления. Функция продолжает проверять значения, пока они равны, и останавливается, когда одно из значений не соответствует указанному условию. Например, если вы тестируете систему с пакетом обновления 1 (SP1) версии 5.1 или большей, проверка будет успешной, если текущая версия — 6.0. (Основная версия больше указанной версии, поэтому тестирование прекращается.) Аналогичным образом, если вы тестируете систему, превышающую версию 5.1 с пакетом обновления 1 (SP1), проверка будет успешной, если текущая версия — 5.2. (Дополнительный номер версии больше указанных версий, поэтому тестирование прекращается.) Однако при тестировании системы, более чем 5.1 с пакетом обновления 1 (SP1), тест завершается ошибкой, если текущая версия — 5.0 с пакетом обновления 2 (SP2). (Дополнительный номер версии не больше указанной версии, поэтому тестирование останавливается.)

Чтобы проверить диапазон версий системы, необходимо дважды вызвать VerifyVersionInfo . Например, чтобы убедиться, что версия системы больше 5.0, но меньше или равна 5.1, сначала вызовите VerifyVersionInfo , чтобы проверить, что основной номер версии равен 5 и дополнительный номер версии больше 0, а затем снова вызовите VerifyVersionInfo , чтобы проверить, что основной номер версии равен 5, а дополнительный номер версии меньше или равен 1.

Определение текущей операционной системы обычно не является лучшим способом определить, присутствует ли определенная функция операционной системы. Это связано с тем, что операционная система могла иметь новые функции, добавленные в распространяемую библиотеку DLL. Вместо того чтобы использовать GetVersionEx для определения платформы операционной системы или номера версии, проверьте наличие самой функции. Дополнительные сведения см. в разделе Версия операционной системы.

Чтобы проверить, является ли текущая операционная система версией Windows для Media Center или планшетного компьютера, вызовите Метод GetSystemMetrics.

Windows 10. VerifyVersionInfo возвращает значение false при вызове приложениями, которые не имеют манифеста совместимости для Windows 8.1 или Windows 10, если параметр lpVersionInfo задан таким образом, что он указывает Windows 8.1 или Windows 10, даже если текущая операционная система версия Windows 8.1 или Windows 10. В частности, VerifyVersionInfo имеет следующее поведение:

  • Если в приложении нет манифеста, VerifyVersionInfo ведет себя так, как если бы версия операционной системы Windows 8 (6.2).
  • Если приложение имеет манифест, содержащий GUID, соответствующий Windows 8.1, VerifyVersionInfo ведет себя так, как если бы версия операционной системы Windows 8.1 (6.3).
  • Если приложение имеет манифест, содержащий GUID, соответствующий Windows 10, VerifyVersionInfo ведет себя так, как если бы версия операционной системы Windows 10 (10.0).
Вспомогательные функции версии используют функцию VerifyVersionInfo , поэтому на поведение IsWindows8Point1OrGreater и IsWindows10OrGreater аналогичным образом влияет наличие и содержимое манифеста.

Сведения о манифесте приложений для Windows 8.1 или Windows 10 см. в статье Назначение приложения для Windows.

Примеры

Пример см. в разделе Проверка версии системы.

Примечание

Заголовок winbase.h определяет VerifyVersionInfo в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

GetVersionEx

OSVERSIONINFOEX

Версия операционной системы

Функции сведений о системе

VER_SET_CONDITION

VerSetConditionMask