- •Минобрнауки россии
- •Е.В. Грачева Системное программное обеспечение персональных эвм
- •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.3.1.Описание api-функции LoadLibrary
API-функция LoadLibrary (как и некоторые другие) может быть использована как в стандартном, так и расширенном виде. В последнем случае к названию API-функции добавляется суффикс Ex. Кроме этого, существуют версии этой функции для кодировки Unicode (LoadLibraryW и LoadLibraryExW) и для кодировки ANSI (LoadLibraryA и LoadLibraryExA).
В стандартном виде, в качестве входного параметра функции LoadLibrary выступает указатель на строку, содержащую имя DLL (в принципе, с помощью этой функции можно загрузить и .exe модуль, однако для запуска приложений желательно использовать функцию CreateProcess).
В качестве результата выполнения данной функцией возвращается описатель модуля. Если функция завершилась успешно (DLL с указанным именем найдена), то результат будет отличен от нуля. Нулевое значение дескриптора означает отсутствие динамической библиотеки.
При задании имени файла можно использовать полный путь, можно ограничиться только именем файла. В последнем случае используется стандартная стратегия поиска файлов: сначала в каталоге где находится исполняемый файл вызывающего процесса, затем в системном каталоге, затем в текущем каталоге, затем в каталогах описанных в переменной PATH (в системном файле инициализации). При этом загружается первый подходящий по названию файл. Можно изменить стандартную последовательность каталогов при поиске DLL с помощью значений ключа реестра "HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode" активируя или дезактивируя ключ "SafeDllSearchMode".
Пусть имя файла с DLL находится в строке под именем DllFileName, тогда вызов функции LoadLibrary будет выглядеть так:
PUSH offset DllFileName; в стек передается адрес строки с именем DLL
CALL LoadLibraryW; вызывается функция загрузки DLL
CMP eax,0; результат функции сравнивается с 0
JZ ErrorMessage_DllNotFound; если 0, то переход на вывод сообщения об ошибке
MOV [dllHandle],eax; дескриптор DLL сохраняется в переменной dllHandle
При использовании расширенной функции загрузки динамической библиотеки LoadLibraryEx, кроме имени DLL необходимо указывать дескриптор файла и 32-х разрядное слово, определяющее флаги, инициирующие различные действия выполняющиеся при загрузке модуля.
PUSH dwFlags; загружаются флаги
PUSH hFile; загружается дескриптор файла
PUSH offset DllFileName; загружается имя DLL
CALL LoadLibraryExW; вызывается функция загрузки DLL
CMP eax,0; результат функции сравнивается с 0
JZ ErrorMessage_DllNotFound; если 0, то переход на вывод сообщения об ошибке
В таблице 6 приведены описания некоторых флагов.
Таблица 6 -Описание флагов API-функции LoadLibraryEx
Название флага и его значение (в 16-ой с/с) |
Описание действия |
DONT_RESOLVE_DLL_REFERENCES 0x00000001 |
При загрузке DLL ОС не вызывает процедуру входа и не загружает дополнительные исполняемые модули, на которые ссылается модуль |
LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x00000010 |
Во время загрузки DLL ОС не выполняет автоматическую проверку уровня доверия к DLL или её зависимостям |
LOAD_LIBRARY_AS_DATAFILE 0x00000002 |
ОС загружает DLL как файл с данными, не выполняя никаких операций по подготовке к исполнению кода, поэтому в этом случае нельзя выполнять функции типа GetProcAddress. Данный флаг используется если DLL содержит какие-либо ресурсы. |
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x00000040
|
То же самое что и LOAD_LIBRARY_AS_DATAFILE, за исключением того, что файл DLL на диске открывается для эксклюзивной записи. |
