Поделиться через


Пример объекта устройства для SCSI HBA

На следующем рисунке показаны объекты устройств, созданные для системы с контроллером PCI IEEE 1394 и адаптером PCI SCSI с cd-ROM и подключенным устройством с секционируемым диском. Объекты для устройств, подключенных к контроллеру IEEE 1394, показаны и описаны в разделе Пример объекта устройства для контроллера IEEE 1394.

Объекты устройств, созданные для системы с контроллером PCI IEEE 1394 и адаптером PCI SCSI с подключенным компакт-диском и секционируемым дисковым устройством.

Дерево объектов устройства для дисков cd-ROM и дисковых устройств на адаптере SCSI HBA

Начиная с нижней части рисунка ниже описывается каждый объект устройства и связанный с ним драйвер.

  1. Драйвер шины хранилища создает FDO для шины хранения и присоединяет его к PDO шины хранилища, созданному диспетчером PnP (не показано на этом рисунке). Структура дерева объектов устройства под FDO шины хранения данных зависит от шины хранения и от того, как она интегрирована в систему. Драйверы хранилища выше уровня драйвера порта не взаимодействуют ни с одним из этих более низких объектов.

    На этом рисунке показано FDO шины хранения данных, созданное драйвером шины PCI для системы с шиной PCI.

  2. Драйвер шины PCI перечисляет и создает PDO для каждого адаптера хранилища в своей шине. Соответствующий драйвер порта хранилища создает FDO и присоединяет его к PDO для адаптера.

    На этом рисунке показаны два PDO адаптера: один для контроллера IEEE 1394 (описан в разделе Пример объекта устройства для контроллера IEEE 1394), а другой для контроллера SCSI HBA. Драйвер порта SCSI и связанный драйвер мини-порта создают FDO и присоединяют его к PDO адаптера SCSI.

  3. Драйвер порта хранилища виртуализирует целевые устройства, создавая PDO для каждого целевого устройства, подключенного к адаптеру. На этом рисунке показаны два таких PDO, созданных драйверами порта или мини-порта SCSI: один для жесткого диска и один для КОМПАКТ-диска.

  4. Один или несколько драйверов фильтров могут подключать объект устройства фильтра (фильтр DO) к PDO целевого устройства, экспортируемого драйвером порта хранилища. Такой драйвер фильтра может перехватывать и изменять запросы, отправляемые драйвером класса на целевое устройство, например, для обхода проблем, относящихся к конкретному устройству, без необходимости вносить изменения в универсальный класс или драйверы портов для конкретного оборудования.

    На этом рисунке показан фильтр DO, подключенный драйвером аудиофильтра cd к PDO компакт-диска.

  5. Драйвер класса хранения создает FDO и присоединяет его к следующему объекту устройства, который является PDO целевого устройства, экспортированного драйвером порта хранилища, или фильтрОМ DO, присоединенным к стеку промежуточным драйвером фильтра. Драйвер класса отправляет все последующие запросы к запоминающее устройство через объект устройства нижнего драйвера.

    На этом рисунке показаны два таких FDO: один представляет устройство компакт-диска, а второй — раздел 0 жесткого диска. Раздел 0 представляет весь необработанный диск и всегда существует независимо от того, является ли диск секционирован или нет.

  6. Драйвер класса также может выступать в качестве водителя автобуса, возвращая список PDO, когда диспетчер PnP запрашивает свои дочерние устройства (IRP_MN_QUERY_DEVICE_RELATIONS с BusRelations). Например, драйвер секционированного устройства мультимедиа, например съемный диск, может вернуть список PDO, представляющих его секции. Драйверы более высокого уровня присоединяют FDO к этим PDO.

    На этом рисунке показаны три таких PDO, каждый из которых представляет раздел диска, к которому можно обращаться как к целевому устройству.

    В случае фиксированного диска диспетчер секций подключается к FDO, представляющей секцию 0, и обрабатывает операции PnP от имени всех секций. Действия диспетчера секций прозрачны для драйвера класса дисков и любых драйверов фильтров верхнего уровня.

  7. Один или несколько драйверов фильтров могут быть присоединены к драйверу класса. В отличие от драйвера фильтра нижнего уровня, драйвер фильтра верхнего уровня перехватывает IRP, отправленные драйверу класса, и может изменить их перед перенаправлением в следующий нижний объект устройства. Драйвер фильтра может перехватывать любые запросы на чтение и запись и при необходимости преобразовывать данные, а также определять дополнительные коды управления вводом-выводом (IOCTLs), например, чтобы разрешить пользовательскому приложению предоставлять пароли или другую связанную информацию.

    На этом рисунке показан фильтр DO, созданный драйвером фильтра шифрования дисков и подключенный к PDO диска для раздела 1.