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


Функция VerifyVersionInfoW (winbase.h)

Сравнивает набор требований к версии операционной системы с соответствующими значениями для текущей версии системы. Эта функция подвержена поведению на основе манифеста. Дополнительные сведения см. в разделе "Примечания".

Примечание. эта функция устарела для Windows 10. Дополнительные сведения см. в , предназначенных для приложений для Windows.

Синтаксис

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

Параметры

[in] lpVersionInformation

Указатель на структуру OSVERSIONINFOEX , содержащую требования к версии операционной системы для сравнения. Параметр dwTypeMask указывает на элементы этой структуры, содержащие сведения для сравнения.

Необходимо задать для элемента этой структуры dwOSVersionInfoSize значение . Кроме того, необходимо указать допустимые данные для элементов, указанных 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, так как она выполняет больше операции в основной версии.)

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

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

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

Чтобы проверить, является ли текущая операционная система версией Media Center или планшетного компьютера Windows, вызовите 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 или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

GetVersionEx

OSVERSIONINFOEX

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

системные информационные функции

VER_SET_CONDITION

VerSetConditionMask