Структура 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
Битовая маска, идентифицирующая наборы продуктов, доступные в системе. Этот элемент может быть сочетанием следующих значений.
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) |