Структура OSVERSIONINFOEXW (winnt.h)
Содержит сведения о версии операционной системы. Эти сведения включают номера основных и дополнительных версий, номер сборки, идентификатор платформы, а также сведения о наборах продуктов и последнем пакете обновления, установленном в системе. Эта структура используется с функциями GetVersionEx и VerifyVersionInfo .
Синтаксис
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]
Строка, завершающаяся нулевым значением, например "Пакет обновления 3", которая указывает на последний пакет обновления, установленный в системе. Если пакет обновления не установлен, строка будет пустой.
wServicePackMajor
Номер основной версии последнего пакета обновления, установленного в системе. Например, для пакета обновления 3 основной номер версии — 3. Если пакет обновления не установлен, значение равно нулю.
wServicePackMinor
Дополнительный номер версии последнего пакета обновления, установленного в системе. Например, для пакета обновления 3 дополнительный номер версии — 0.
wSuiteMask
Битовая маска, идентифицирующая наборы продуктов, доступные в системе. Этот элемент может быть сочетанием следующих значений.
wProductType
Любые дополнительные сведения о системе. Этот элемент может иметь одно из следующих значений.
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 Edition | 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 версии ОС (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, флаг 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 в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | winnt.h (включая Windows.h) |