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


Структура 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

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

Значение Значение
VER_SUITE_BACKOFFICE
0x00000004
Установлены компоненты Microsoft BackOffice.
VER_SUITE_BLADE
0x00000400
Установлен Windows Server 2003, Web Edition.
VER_SUITE_COMPUTE_SERVER
0x00004000
Установлен выпуск Windows Server 2003 Compute Cluster Edition.
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 Home Premium, 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 Профессиональная.

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 версий