- •Структура wdm-драйвера
- •Ознакомиться с материалом, ответить на контрольные вопросы
- •2000 Поставляется с двумя подсистемами, а в Windows xp, кроме Win32,
- •1.2 Типы драйверов
- •1.4 Иерархия устройств и драйверов
- •IoInvalidateDeviceRelations, сообщая диспетчеру PnP список
- •1.5 Порядок загрузки драйверов
1.4 Иерархия устройств и драйверов
Прежде, чем рассматривать процессы функционирования и взаимодействия
драйверов, следует рассмотреть иерархию устройств и драйверов, лежащую в
основе этого взаимодействия. Концепция подобной иерархии достаточно
наглядно представлена на рисунке 1.5 [3].
Рисунок 1.5 – Иерархия объектов устройств и драйверов в модели WDM
На рисунке 1.5 три столбца означают следующее:
− левый столбец представляет стек (направленный снизу вверх) структур
ядра DEVICE_OBJEKT, каждая из которых описывает специфику
управления одним устройством,
− средний столбец представляет набор драйверов устройств, участвующих
в управлении,
− правый столбец показывает направления передачи IRP (пакетов запросов
ввода-вывода) между драйверами.
Модель WDM предусматривает как минимум два драйвера для каждого
устройства. Один из драйверов – функциональный драйвер – отвечает за операции
ввода-вывода, обработку прерываний, а также предоставления пользователю
возможностей управления устройством. Это то, что в MS-DOS выполняет драйве
устройства.
Вторым драйвером является драйвер шины, отвечающий за взаимодействие
оборудования с компьютером. Так, например, драйвер шины PCI (Peripheral
Component Interconnect) обнаруживает карту расширения, вставленную в слот
PCI, определяет требования карты к ресурсам, которые должны быть выделены
для обеспечения связи с компьютером (порты ввода-вывода, области памяти),
включает и выключает питание в слоте карты
Многие устройства имеют более двух драйверов. Эти дополнительные
драйверы обычно называют драйверами-фильтрами (или фильтрующими
драйверами). Драйверы-фильтры отслеживают выполнение операций ввода-
вывода функциональными драйверами или модифицируют их поведение.
Верхний фильтрующий драйвер получает доступ к пакетам IRP до
функционального драйвера, что позволяет ему поддерживать дополнительные функции, отсутствующие в функциональном драйвере. Иногда верхний драйвер-фильтр исправляет недостатки функционального драйвера.
Нижний фильтрующий драйвер получает пакеты IRP, которые
функциональный драйвер отправляет (как он думает) драйверу шины. Его задача также заключается в модификации, а если надо, то и в исправлении поведения функционального драйвера при выполнении операций с шиной.
Как показано на рисунке 1.5, каждый из четырех показанных драйверов
устройства связан с одной из структур DEVICE_OBJECT левого столбца. Эти структуры принято обозначать следующим образом:
− PDO (Phisical Device Object) – физический объект устройства,
используемый драйвером шины для представления связи устройства с
шиной,
− FDO (Function Device Object) – функциональный объект устройства,
используемый функциональным драйвером для управления
функциональностью устройства,
− FiDO (Filter Device Object) – фильтрующий объект устройства,
используемый драйвером-фильтром для хранения информации об
оборудовании и о выполнении операций фильтрации.
Рисунок 1.6 – Подключение устройства Plug and Play
Как уже говорилось выше, WDM-драйвер, это, прежде всего, PnP-драйвер.
Любое устройство PnP обладает электронной сигнатурой, служащей для
идентификации устройства. Драйвер шины Plug and Play поддерживает функцию перечисления (сканирования всех возможных устройств в момент запуска).
Драйверы шин, поддерживающих «горячее» подключение устройств (например, USB, PCMCIA), отслеживают аппаратные сигналы, свидетельствующие о появлении нового устройства на шине. Результатом перечисления, выполняемого
в момент запуска или в момент подключения устройства, является набор объектов PDO, показанных на рисунке 1.6 (подробнее об объектах – в следующем разделе).
(1) Как только драйвер шины обнаруживает факт подключения или
отключения оборудования, он вызывает функцию
