- •Минобрнауки россии
- •Е.В. Грачева Системное программное обеспечение персональных эвм
- •1 Программирование в операционной среде
- •1.1 Программирование в среде однозадачной операционной системы
- •1.2 Программирование в среде ос Windows
- •1.2.1 Основные понятия
- •1.2.2 Программный интерфейс
- •1.2.2.1 Сообщения, очередь сообщений
- •1.2.2.2 Процедура окна
- •1.2.3 Использование динамических библиотек
- •1.2.3.1.Описание api-функции LoadLibrary
- •1.2.3.2 Описание функции GetProcAddress
- •1.2.3.3 Описание функции FreeLibrary
- •1.2.4 Описание некоторых api-функций
- •1.2.4.1.Функции для создания пользовательского интерфейса
- •1.2.4.1.1 Ввод данных с клавиатуры
- •1.2.4.1.2 Ввод данных с помощью "мыши"
- •1.2.4.1.3 Диалоговые окна
- •1.2.4.2 Функции для получения информации о системе
- •1.2.4.2.1 Информация об аппаратной конфигурации
- •1.2.4.2.3 Конфигурация ос
- •1.2.4.2.4 Системные параметры
- •1.2.4.2.5 Внешний вид системных элементов
- •1.2.4.3 Функции управления памятью
- •1.2.4.3.1 Основные функции управления памятью
- •1.2.4.4.Функции управления файлами
- •1.2.4.4 Функции управления некоторыми устройствами
- •Контрольные вопросы
- •35. Охарактеризовать функцию для определения конфигурации ос
- •36. Охарактеризовать функции об установке системных параметров.
- •2.Ассемблеры
- •2.1 Архитектура процессоров ia-32
- •2.1.1.Основная исполнительная среда микропроцессора с архитектурой ia32
- •2.1.2 Режимы работы и используемая модель памяти процессоров с архитектурой ia32
- •2.1.3 Архитектура ia-32 системного уровня
- •2.2.Программирование на языке ассемблера
- •2.2.1 Метки
- •2.2.2 Директивы
- •2.2.3 Формат команды
- •2.2.4 Система команд микропроцессоров с архитектурой ia32
- •2.2.4.1 Команды пересылки данных
- •Ins строка, dx
- •2.2.4.2 Арифметические операции
- •2.2.4.3 Операции сдвига
- •2.2.4.4 Битовые операции
- •2.2.4.5 Команды для организации циклов
- •1.3.1.1 Команды сравнения
- •2.2.4.6 Команды передачи управления
- •2.2.4.7 Системные команды
- •2.2.4.8 Команды математического сопроцессора
- •2.2.5 Технология программирования
- •2.3 Макроязыки
- •3.Трансляторы
- •3.1 Структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода
- •3.1.1.Распределение памяти, виды переменных
- •3.1.2.Статическое и динамическое связывание
- •3.2 Загрузчики
- •3.2.1 Функции загрузчика
- •3.2.1 Настраивающий и динамический загрузчики
- •3.3 Подключение библиотек
- •4. Формальные языки и грамматики
- •4.1 Типы грамматик
- •4.1.1 Вывод цепочек
- •4.1.2 Конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике
- •Приложения Приложение а
- •Оглавление
- •4. Формальные языки и грамматики
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 результат будет отрицательным) которые позволят определить, поддерживает ли данная конкретная ОС ту или иную возможность.
