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


Структура OSVERSIONINFOEXA (winnt.h)

Содержит сведения о версии операционной системы. Сведения включают номера основных и дополнительных версий, номер сборки, идентификатор платформы, а также сведения о наборах продуктов и последнем пакете обновления, установленном в системе. Эта структура используется с функциями GetVersionEx и VerifyVersionInfo .

Синтаксис

typedef struct _OSVERSIONINFOEXA {
  DWORD dwOSVersionInfoSize;
  DWORD dwMajorVersion;
  DWORD dwMinorVersion;
  DWORD dwBuildNumber;
  DWORD dwPlatformId;
  CHAR  szCSDVersion[128];
  WORD  wServicePackMajor;
  WORD  wServicePackMinor;
  WORD  wSuiteMask;
  BYTE  wProductType;
  BYTE  wReserved;
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;

Члены

dwOSVersionInfoSize

Размер этой структуры данных в байтах. Присвойте этому члену значение sizeof(OSVERSIONINFOEX).

dwMajorVersion

Основной номер версии операционной системы. Дополнительные сведения см. в подразделе "Примечания".

dwMinorVersion

Дополнительный номер версии операционной системы. Дополнительные сведения см. в подразделе "Примечания".

dwBuildNumber

Номер сборки операционной системы.

dwPlatformId

Платформа операционной системы. Этот элемент может быть VER_PLATFORM_WIN32_NT (2).

szCSDVersion[128]

Строка, заканчивающаяся null, например "Пакет обновления 3", которая указывает на последнюю версию пакета обновления, установленного в системе. Если пакет обновления не установлен, строка пуста.

wServicePackMajor

Основной номер версии последнего пакета обновления, установленного в системе. Например, для пакета обновления 3 основной номер версии — 3. Если пакет обновления не установлен, значение равно нулю.

wServicePackMinor

Дополнительный номер версии последнего пакета обновления, установленного в системе. Например, для пакета обновления 3 дополнительный номер версии — 0.

wSuiteMask

Битовая маска, идентифицирующая наборы продуктов, доступные в системе. Этот элемент может быть сочетанием следующих значений.

Значение Значение
VER_SUITE_BACKOFFICE
0x00000004
Компоненты Microsoft BackOffice установлены.
VER_SUITE_BLADE
0x00000400
Установлен Windows Server 2003, Web Edition.
VER_SUITE_COMPUTE_SERVER
0x00004000
Установлен Выпуск Вычислительного кластера Windows Server 2003.
VER_SUITE_DATACENTER
0x00000080
Установлен Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition или Windows 2000 Datacenter Server.
VER_SUITE_ENTERPRISE
0x00000002
Установлен Windows Server 2008 Корпоративная, Windows Server 2003, выпуск Enterprise или Windows 2000 Advanced Server. Дополнительные сведения об этом битовом флаге см. в разделе Примечания.
VER_SUITE_EMBEDDEDNT
0x00000040
Установлен Windows XP Embedded.
VER_SUITE_PERSONAL
0x00000200
Установлена Ос Windows Vista Домашняя Премиум, Windows Vista Домашняя Базовая или Windows XP Home Edition.
VER_SUITE_SINGLEUSERTS
0x00000100
Удаленный рабочий стол поддерживается, но поддерживается только один интерактивный сеанс. Это значение устанавливается, если система не работает в режиме сервера приложений.
VER_SUITE_SMALLBUSINESS
0x00000001
Microsoft Small Business Server был установлен в системе, но, возможно, был обновлен до другой версии Windows. Дополнительные сведения об этом битовом флаге см. в разделе Примечания.
VER_SUITE_SMALLBUSINESS_RESTRICTED
0x00000020
Microsoft Small Business Server устанавливается с ограниченной клиентской лицензией. Дополнительные сведения об этом битовом флаге см. в разделе Примечания.
VER_SUITE_STORAGE_SERVER
0x00002000
Установлен Windows Storage Server 2003 R2 или Windows Storage Server 2003.
VER_SUITE_TERMINAL
0x00000010
Установлены службы терминалов. Это значение всегда задано.

Если VER_SUITE_TERMINAL задано, но VER_SUITE_SINGLEUSERTS не задано, система работает в режиме сервера приложений.

VER_SUITE_WH_SERVER
0x00008000
Windows Home Server установлен.
VER_SUITE_MULTIUSERTS
0x00020000
Включен режим AppServer.

wProductType

Любые дополнительные сведения о системе. Этот элемент может быть одним из следующих значений.

Значение Значение
VER_NT_DOMAIN_CONTROLLER
0x0000002
Система является контроллером домена, а операционная система Windows Server 2012 , Windows Server 2008 R2, Windows Server 2008, Windows Server 2003 или Windows 2000 Server.
VER_NT_SERVER
0x0000003
Операционная система Windows Server 2012, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Обратите внимание, что сервер, который также является контроллером домена, сообщается как VER_NT_DOMAIN_CONTROLLER, а не VER_NT_SERVER.

VER_NT_WORKSTATION
0x0000001
Операционная система Windows 8, Windows 7, Windows Vista, Windows XP Professional, Windows XP Home Edition или Windows 2000 Professional.

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)

См. также раздел

Iswow64Process

OSVERSIONINFO

API вспомогательной версии