Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
uchebnik.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
557.61 Кб
Скачать

1.2.4.2 Функции для получения информации о системе

1.2.4.2.1 Информация об аппаратной конфигурации

Функции, рассматриваемые в этом разделе, позволяют получить информацию о процессоре, клавиатуре и т.п.

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

В качестве входного параметра этой функции используется указатель на структуру данных типа SYSTEM_INFO (таблица 16).

Таблица 16 - Структура данных типа SYSTEM_INFO

SYSTEM_INFO Struc

Название поля

Тип в С

Тип в ассемблере

Назначение поля

dwOemId

DWORD

DD

Идентификатор производителя

wProcessorArchitecture

WORD

DW

Идентификатор архитектуры процесора: 9 - х64; 6 - Intel Itanium; 0 - x86; 0xffff - неизвестный процессор

wReserved

WORD

DW

Зарезервировано

dwPageSize

DWORD

DD

Размер страницы

lpMinimumApplicationAddress

LPVOID

DD

Указатель на минимальный адрес, доступный приложению

lpMaximumApplicationAddress

LPVOID

DD

Указатель на максимальный адрес, доступный приложению

dwActiveProcessorMask

DWORD_PTR

DD

Маска, представляющая набор процессоров, сконфигурированных в системе

dwNumberOfProcessors

DWORD

DD

Количество процессоров в системе

dwProcessorType

DWORD

DD

Типа процессора: 386 - I80386; 486 - I80486; 586 - Intel Pentium; 2200 - процессор с архитектурой IA64; 8664 - 64x разрядный процессор AMD х86.

dwAllocationGranularity

DWORD

DD

Размер блоков, на которые разбита память

wProcessorLevel

WORD

DW

Уровень процессора, определяется архитектурой процессора.

wProcessorRevision

WORD

DW

Версия процессора. Состоит из идентификатора модели процессора и частоты. Начиная с процессоров Pentium старший байт - модель, младший - частота процессора.

Необходимо отметить, что первые 3 элемента (dwOemId, wProcessorArchitecture и wReserved) представляют собой данные, представляющие собой альтернативные ветви одного объединения (объявляется ключевым словом UNION) и фактически используется либо элемент dwOemId, либо пара элементов wProcessorArchitecture и wReserved - то есть, в программе объявляется двойное слово. Фактически же, при создании новых приложений, необходимо учитывать тот факт, что элемент dwOemId не используется и информацию об архитектуре процессора следует извлекать из старшего слова.

Для определения того, поддерживает ли имеющийся процессор тот или иной набор команд или функциональность, используется функция IsProcessorFeaturePresent. В качестве входного параметра задается код (4 байта) того или иного набора команд (или функциональности), а в результате выполнения функции формируется значение: не равное 0 в случае если процессор поддерживает заданный набор команд или функциональность и равное 0 - если не поддерживает.

В таблице 17 приведены некоторые коды, которые могут быть использованы в качестве входного параметра функции IsProcessorFeaturePresent.

Таблица 17 - Коды для определения функциональных возможностей процессора

Название и значение кода

Описание

PF_3DNOW_INSTRUCTIONS_AVAILABLE 7

Набор команд 3DNow (введен в процессорах AMD) доступен

PF_COMPARE_EXCHANGE_DOUBLE 2

Доступна команда cmpxchg (сравнить и поменять местами)

PF_COMPARE_EXCHANGE128 14

Доступна команда cmpxchg128 (сравнить и поменять местами 128 бит)

Эта возможность не поддерживается до ОС Windows Vista

PF_COMPARE64_EXCHANGE128 15

Доступна команда сравнения 64 бит и обмена 128 бит cmp8xchg16.

Эта возможность не поддерживается до ОС Windows Vista

PF_FLOATING_POINT_EMULATED 1

Операции с плавающей запятой реализуются программными средствами. Ненулевое значение свидетельствует о эмуляции операции с плавающей запятой, нулевое - операции с плавающей запятой выполняются аппаратно.

PF_MMX_INSTRUCTIONS_AVAILABLE 3

Доступен набор команд MMX.

PF_NX_ENABLED 12

Включена защита от выполнения кода (когда в счетчик команд загружается адрес, указывающий на страницу памяти, содержащую данные, а не команды)

Эта возможность не поддерживается в ОС семейства Windows до версий Windows XP SP2 и Windows Server 2003 SP1.

PF_PAE_ENABLED 9

Процессор поддерживает режим PAE (расширение физической памяти, см. раздел "Управление памятью").

PF_SSE3_INSTRUCTIONS_AVAILABLE 13

Доступен набор команды SSE3.

Эта возможность не поддерживается до ОС Windows Vista

PF_XMMI_INSTRUCTIONS_AVAILABLE 6

Доступен набор команды SSE.

PF_XMMI64_INSTRUCTIONS_AVAILABLE 10

Доступен набор команды SSE2.

Эта возможность не поддерживается в ОС Windows 2000

1.2.4.2.2. 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 и т.п.). Более подробно см. в [Error: Reference source not found]

wProductType

BYTE

DB

Такая информация как: является ли установленная ОС контроллером домена (значение параметра = 2), сервером (значение параметра = 3) или просто рабочей станцией (значение параметра = 1).

wReserved

BYTE

DB

Зарезервировано

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]