Пример объекта устройства для SCSI HBA
На следующем рисунке показаны объекты устройств, созданные для системы с контроллером PCI IEEE 1394 и адаптером PCI SCSI с cd-ROM и подключенным устройством с секционируемым диском. Объекты для устройств, подключенных к контроллеру IEEE 1394, показаны и описаны в разделе Пример объекта устройства для контроллера IEEE 1394.
Дерево объектов устройства для дисков cd-ROM и дисковых устройств на адаптере SCSI HBA
Начиная с нижней части рисунка ниже описывается каждый объект устройства и связанный с ним драйвер.
Драйвер шины хранилища создает FDO для шины хранения и присоединяет его к PDO шины хранилища, созданному диспетчером PnP (не показано на этом рисунке). Структура дерева объектов устройства под FDO шины хранения данных зависит от шины хранения и от того, как она интегрирована в систему. Драйверы хранилища выше уровня драйвера порта не взаимодействуют ни с одним из этих более низких объектов.
На этом рисунке показано FDO шины хранения данных, созданное драйвером шины PCI для системы с шиной PCI.
Драйвер шины PCI перечисляет и создает PDO для каждого адаптера хранилища в своей шине. Соответствующий драйвер порта хранилища создает FDO и присоединяет его к PDO для адаптера.
На этом рисунке показаны два PDO адаптера: один для контроллера IEEE 1394 (описан в разделе Пример объекта устройства для контроллера IEEE 1394), а другой для контроллера SCSI HBA. Драйвер порта SCSI и связанный драйвер мини-порта создают FDO и присоединяют его к PDO адаптера SCSI.
Драйвер порта хранилища виртуализирует целевые устройства, создавая PDO для каждого целевого устройства, подключенного к адаптеру. На этом рисунке показаны два таких PDO, созданных драйверами порта или мини-порта SCSI: один для жесткого диска и один для КОМПАКТ-диска.
Один или несколько драйверов фильтров могут подключать объект устройства фильтра (фильтр DO) к PDO целевого устройства, экспортируемого драйвером порта хранилища. Такой драйвер фильтра может перехватывать и изменять запросы, отправляемые драйвером класса на целевое устройство, например, для обхода проблем, относящихся к конкретному устройству, без необходимости вносить изменения в универсальный класс или драйверы портов для конкретного оборудования.
На этом рисунке показан фильтр DO, подключенный драйвером аудиофильтра cd к PDO компакт-диска.
Драйвер класса хранения создает FDO и присоединяет его к следующему объекту устройства, который является PDO целевого устройства, экспортированного драйвером порта хранилища, или фильтрОМ DO, присоединенным к стеку промежуточным драйвером фильтра. Драйвер класса отправляет все последующие запросы к запоминающее устройство через объект устройства нижнего драйвера.
На этом рисунке показаны два таких FDO: один представляет устройство компакт-диска, а второй — раздел 0 жесткого диска. Раздел 0 представляет весь необработанный диск и всегда существует независимо от того, является ли диск секционирован или нет.
Драйвер класса также может выступать в качестве водителя автобуса, возвращая список PDO, когда диспетчер PnP запрашивает свои дочерние устройства (IRP_MN_QUERY_DEVICE_RELATIONS с BusRelations). Например, драйвер секционированного устройства мультимедиа, например съемный диск, может вернуть список PDO, представляющих его секции. Драйверы более высокого уровня присоединяют FDO к этим PDO.
На этом рисунке показаны три таких PDO, каждый из которых представляет раздел диска, к которому можно обращаться как к целевому устройству.
В случае фиксированного диска диспетчер секций подключается к FDO, представляющей секцию 0, и обрабатывает операции PnP от имени всех секций. Действия диспетчера секций прозрачны для драйвера класса дисков и любых драйверов фильтров верхнего уровня.
Один или несколько драйверов фильтров могут быть присоединены к драйверу класса. В отличие от драйвера фильтра нижнего уровня, драйвер фильтра верхнего уровня перехватывает IRP, отправленные драйверу класса, и может изменить их перед перенаправлением в следующий нижний объект устройства. Драйвер фильтра может перехватывать любые запросы на чтение и запись и при необходимости преобразовывать данные, а также определять дополнительные коды управления вводом-выводом (IOCTLs), например, чтобы разрешить пользовательскому приложению предоставлять пароли или другую связанную информацию.
На этом рисунке показан фильтр DO, созданный драйвером фильтра шифрования дисков и подключенный к PDO диска для раздела 1.