Функции, рассматриваемые в этом разделе, позволяют получить информацию о процессоре, клавиатуре и т.п.
Функция 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 |