Operating System Version

Для определения версии ОС, установленной на вычислительной машине, можно использовать функцию GetVersionEx, которая определяет версию ОС и другую информацию о запущенной в текущий момент времени ОС. В качестве входного параметра используется указатель на структуру данных типа OSVERSIONINFO или OSVERSIONINFOEX (таблица 18), которая кроме тех полей что входят в структуру данных OSVERSIONINFO содержит дополнительные поля. Функция GetVersionEx существует как в Unicode-формате (в тексте программы вызов функции осуществляется как CALL GetVersionExW), так и в ANSI-формате (GetVersionExA).

Таблица 18 - Структура данных OSVERSIONINFOEX

Название поля Тип в С Тип в ассемблере Назначение поля
dwOSVersionInfoSize DWORD DD Размер этой структуры данных в байтах
dwMajorVersion DWORD DD Номер версии ОС: 4 - NT4; 5 - XP, Server 2003; 6 - Vista, Server2008.
dwMinorVersion DWORD DD Номер модификации: 0 - у Vista, Server 2008, NT4.0; 1- у XP; 2 - у Server 2003 или XP Professional x64
dwBuildNumber DWORD DD Номер сборки ОС
dwPlatformId DWORD DD Идентификатор платформы
szCSDVersion[128] TCHAR db или dw Строка заканчивающаяся нулем, показывающая последнее обновление ОС (ServicePack), установленное в системе. В зависимости от типа кодировки состоит либо из двухбайтных (Unicode), либо из однобайтных символов (ANSI).
wServicePackMajor WORD DW Версия установленного обновления в системе
wServicePackMinor WORD DW Модификация версии установленного обновления в системе
wSuiteMask WORD DW Битовая маска, определяющая какие блоки установлены в системе (установлены ли HOME-версии ОС, установлен ли Windows Home Server и т.п.). Более подробно см. в [Ошибка! Источник ссылки не найден.]
wProductType BYTE DB Такая информация как: является ли установленная ОС контроллером домена (значение параметра = 2), сервером (значение параметра = 3) или просто рабочей станцией (значение параметра = 1).
wReserved BYTE DB Зарезервировано

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

При успешном выполнении функции GetVersionEx возвращается ненулевое значение.

Поскольку возможности ОС со временем могут расширяться с помощью установки динамических библиотек, определение версии ОС не является лучшим способом узнать, поддерживает ли установленная ОС ту или иную возможность. Поэтому, лучше использовать другие методы: например, попытаться загрузить динамическую библиотеку, в которой должна находиться необходимая функция и запустить эту функцию. Если попытка не удалась - значит, ОС не поддерживает данную возможность. Можно использовать какие-то другие функции (см. предыдущий раздел - не все ОС поддерживают некоторые функциональные возможности процессора, поэтому при попытке выполнить функцию IsProcessorFeaturePresent результат будет отрицательным) которые позволят определить, поддерживает ли данная конкретная ОС ту или иную возможность.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: