- •Лекция №5. Структура драйвера. Основные точки входа. Точка входа DriverEntry.
- •[5.1] Ограничения, налагаемые на драйвер
- •[5.2] Назначение и взаимосвязь основных объектов
- •[5.2.1] Объект-драйвер
- •[5.2.2] Объект-устройство
- •Имя устройства и символическая связь
- •[5.2.3] Объект-файл и файловые описатели (handle)
- •[5.2.4] Пакет запроса ввода/вывода (irp)
- •[5.3] Точки входа драйвера
- •[5.3.1] Контекст исполнения
- •[5.3.2] Уровень irql
- •[5.4] Точка входа DriverEntry
- •[5.4.1] Определение всех других точек входа драйвера
- •[5.4.2] Определение конфигурации аппаратного устройства, все, связанное с его инициализацией
- •[5.4.3] Запрос содержимого реестра
- •[5.4.4] Создание объекта-устройство и символической связи
Лекция №5. Структура драйвера. Основные точки входа. Точка входа DriverEntry.
Данная лекция может быть рассмотрена как одно большое оглавление последующих лекций.
На этой лекции будет рассмотрено:
Ограничения, налагаемые на драйвер
Точки входа драйвера. Описание наиболее общих точек входа драйверов ядра Windows NT. Будут указаны точки входа, которые должны быть реализованы обязательно, и точки входа, наличие которых зависит от назначения драйвера.
Назначение и взаимосвязь основных объектов. Прежде чем мы сможем обсуждать подробности каждой точки входа драйвера на следующих лекциях, важно понять общие концепции организации драйверов устройств Windows NT.
Точка входа DriverEntry
[5.1] Ограничения, налагаемые на драйвер
Драйвер режима ядра не может использовать API пользовательского уровня или стандартные библиотеки времени исполнения языка С. Можно использовать только функции ядра.
Драйвер не может осуществлять операции с числами с плавающей точкой. Попытка сделать это может вызвать аварийную остановку системы. Причина – в основе реализации архитектуры MMX. На вдаваясь в подробности можно сказать, что в этой архитектуре для обозначения регистров MMX использованы те же обозначения, что и для использования регистров FPU. Переключение между использованием регистров MMX/FPU, производимое на пользовательском уровне, невидимо для драйвера.
Драйвер не может манипулировать напрямую физической памятью. Однако, он может получить виртуальный адрес для любого физического адреса и манипулировать им.
Код драйвер не должен долгое время работать на повышенных уровнях IRQL.
Другие ограничения можно посмотреть в [Developing Windows NT Device Driver, chapter 5, Driver Limitation]
[5.2] Назначение и взаимосвязь основных объектов
Рис. 1
Как и любая DLL, драйвер имеет свою точку входа – функцию, вызываемую при загрузке исполняемого файла в память. Адрес этой точки входа содержится в служебной информации в самом модуле. При создании модуля в процессе компиляции настройки среды разработки предполагают, что имя соответствующей функции будет DriverEntry, хотя оно может быть заменено на любое другое.
Когда происходит загрузка модуля? Это определяется соответствующими данному драйверу настройками в реестре (ключ Start). Как уже говорилось, этими настройками управляет Service Control Manager (SCM), хотя они могут быть изменены и вручную.
При загрузке драйвера в качестве первого параметра ему передается указатель на объект-драйвер, который представляет данный конкретный драйвер.
[5.2.1] Объект-драйвер
Объект-Драйвер описывает, где драйвер загружен в физическую память, размер драйвера и основные точки входа. Объект-драйвер создается диспетчером В/В и описывается частично документированной структурой данных DRIVER_OBJECT.
Примечание.
Microsoft не гарантирует неизменность недокументированных полей любых своих структур в последующих версиях ОС. Однако фактически, некоторые недокументированные в DDK элементы различных системных структур документированы в другом пакете для разработчика – IFS Kit.
Внутри функции DriverEntry происходит инициализация всего, что необходимо для выполнения драйвером его предназначения. В этой функции определяются стандартные и опциональные точки входа драйвера, в особенности – точки входа Dispatch, являющиеся частью структуры DRIVER_OBJECT. Кроме того, обычно именно здесь происходит создание одного или нескольких объектов-устройств.