Терминология звука WDM

В этом разделе описываются различия в терминологии между архитектурой драйвера звука модели драйвера Microsoft Windows (WDM) и универсальной архитектурой многоуровневых драйверов Windows. Универсальная архитектура драйверов иллюстрируется драйверами портов или минипортов SCSI (см. раздел Архитектура драйвера хранилища).

Термины, определенные в универсальной архитектуре и архитектуре драйвера звука WDM, похожи, но они имеют некоторые важные различия, как описано ниже.

Драйвер miniport (универсальный)

Драйвер минипорта (универсальный) — это драйвер для конкретного оборудования для адаптера, который находится в системной шине (например, PCI или ISA). Этот драйвер имеет одну точку входа DriverEntry и регистрирует таблицу функций с драйвером порта. Эта таблица функций служит интерфейсом верхнего края драйвера мини-порта.

Драйвер мини-порта находится под драйвером порта в стеке драйверов. То есть все вызовы к драйверу минипорта выполняются из драйвера порта, а все вызовы из драйвера минипорта выполняются в интерфейс нижнего края драйвера порта.

На следующем рисунке показано значение терминов стек, интерфейс верхнего края и интерфейс нижнего края , которые используются в этом контексте. Блок, представляющий драйвер порта, расположен поверх блока, представляющего драйвер мини-порта. Таким образом, водитель минипорта находится под драйвером порта в "стеке".

Схема, иллюстрирующая стек драйверов с драйвером порта поверх и драйвером минипорта ниже, иллюстрирующая интерфейсы верхнего и нижнего краев.

Драйверы портов и минипортов взаимодействуют через программные интерфейсы, которые они предоставляют друг другу. На предыдущем рисунке эти интерфейсы связаны с нижним краем блока, представляющего драйвер порта, и верхним краем блока, представляющего драйвер мини-порта. Это представление является источником терминов "интерфейс нижнего края" и "интерфейс верхнего края".

Драйвер порта (универсальный)

Драйвер порта (универсальный) окружает драйвер мини-порта.

Драйвер порта:

  • Реализует фильтры потоковой передачи WDM.

  • Предоставляет общий интерфейс для остальной части операционной системы.

  • Обрабатывает запросы ввода-вывода из системы и переадресовывает эти запросы как вызовы в таблицу функций драйвера мини-порта.

  • Предоставляет драйверу мини-порта библиотеку вспомогательных функций (интерфейс нижнего края драйвера порта).

Драйвер порта скрывает многие сведения об операционной системе от драйвера мини-порта, а драйвер минипорта скрывает особенности базового оборудования от драйвера порта. Реализация драйвера порта может быть изменена для различных выпусков операционной системы, но интерфейс драйвера порта для драйвера мини-порта остается более или менее неизменным, что позволяет драйверу минипорта быть в значительной степени независимым от платформы.

Мини-диск (универсальный)

Мини-диск (универсальный) представляет аппаратный компонент в шине. Мини-драйвер использует водителя автобуса для связи с физическим устройством через шину и связывает водителя автобуса и одного или нескольких водителей класса.

Драйверы классов помогают мини-накопителю представлять физическое устройство клиентам как тип логического устройства. В средах WDM мини-драйвер обычно получает запросы в форме IRP от водителей класса и отправляет запросы в форме IRP водителю автобуса.

Кроме того, может потребоваться общаться с несколькими драйверами класса. Примером мини-драйвера, который привязывается к нескольким водителям класса, является мини-диск для компакт-дисков в шине IEEE 1394. Он может быть привязан к драйверу файловой системы, чтобы доступ к диску можно было получить из файловой системы. Однако он также привязывается к системным драйверу Redbook , чтобы можно было передавать звук с компакт-диска.

Драйвер шины (универсальный)

Водитель автобуса (универсальный) предоставляет мини-драйверам доступ к физической шине. Уровень абстракции оборудования Microsoft Windows (HAL) иногда называют драйвером системной шины, так как он предоставляет доступ к системной шине. Дополнительные сведения см. в разделе Драйверы шины.

Драйвер класса (универсальный)

Драйвер класса (универсальный) реализует поведение, которое является общим для класса похожих устройств.

Драйвер класса:

  • Исключает дублирование функциональных возможностей в драйверах оборудования.

  • Не зависит от шины.

  • Не знает о проблемах с ресурсами (например, DMA и прерываниях).

Miniport Driver (WDM Audio)

Драйвер минипорта (WDM audio) реализует интерфейс для конкретной функции на звуковом адаптере карта, который находится в системной шине. Драйвер мини-порта является компонентом драйвера адаптера. Операционная система не распознает его как драйвер. В связи с этим драйвер аудио минипорта отличается от универсального драйвера минипорта.

В отличие от универсальных драйверов минипорта, аудиодрайверы не реализуют DriverEntry, не регистрируются и не полностью полагаются на соответствующие драйверы портов для поддержки. Несколько аудиодрайверов минипорта, которые выполняют несколько функций, можно связать с одним драйвером адаптера (и связать с одним объектом устройства).

Драйвер адаптера (звук WDM)

Драйвер адаптера (аудио WDM) служит контейнером для всех драйверов минипорта, связанных с данным адаптером. Этот драйвер адаптера распознается операционной системой как драйвер и содержится в собственном файле .sys.

Драйвер аудиоадаптера состоит из набора драйверов miniport и дополнительного кода, который решает проблемы инициализации. Например, драйвер адаптера реализует точку входа DriverEntry .

Драйвер порта (звук WDM)

Драйвер порта (аудио WDM) реализует фильтр KS от имени драйвера мини-порта и работает в контексте драйвера класса портов. Драйвер порта предоставляет системе код конкретной функции драйвера минипорта в качестве фильтра KS и отвечает за реализацию независимых от адаптера функций.

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

Драйвер класса порта (звук WDM)

Драйвер класса порта (аудио WDM) служит контейнером для коллекции драйверов портов, каждый из которых обеспечивает поддержку различных типов аппаратной функции аудио. На следующем рисунке показаны связи между классом аудиопорта и драйверами адаптера.

Схема, показывающая связь между драйверами класса аудиопорта, драйверами адаптера и соответствующими драйверами минипорта.

Драйвер адаптера управляет карта адаптера, который может содержать несколько различных аппаратных функций. Как показано на предыдущем рисунке, драйвер адаптера содержит драйвер miniport для управления каждым типом аппаратной функции. Аналогичным образом драйвер класса портов предназначен для поддержки адаптерных карт с несколькими аппаратными функциями. Драйвер класса порта предоставляет драйвер порта для каждого из четко определенных типов функций, которые он поддерживает. Драйвер адаптера привязывает драйвер минипорта для конкретной функции к соответствующему драйверу порта для этого типа функции. Драйвер порта для каждой функции обрабатывает обмен данными с аудио-клиентами WDM, которые используют функцию. Драйвер мини-порта содержит весь аппаратный код для управления этой функцией.

Драйвер класса порта (аудио WDM) в основном функционирует как контейнер для нескольких вложенных служб, связанных с одним объектом устройства. Драйверы шины создают один объект физического устройства (PDO) для каждого узла Plug and Play (PnP), который они перечисляют.

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

Драйвер класса порта использует возможность драйвера потоковой передачи ядра для предоставления различных аспектов одного объекта устройства, чтобы операционная система распознала устройство как набор отдельных подустройств.

Строка ссылки добавляется к имени устройства для указания нужного подчиненного устройства. Драйвер потоковой передачи ядра отправляет создание IRP на основе этой ссылочной строки. После создания объекта файла драйвер потоковой передачи ядра обеспечивает диспетчеризацию irP, предназначенных для объекта файла, представляющего вложенную часть. Кроме того, драйвер класса портов реализует модель на основе COM для упаковки вложенных устройств.

Драйвер адаптера создает экземпляры драйвера порта и драйвера мини-порта и связывает их друг с другом, передав указатель на драйвер мини-порта в качестве параметра для функции инициализации драйвера порта (см. пример кода в разделе Создание subdevice). Результирующий стек драйвера порта или минипорта представляет собой фильтр KS, представляющий один из типов вложенных элементов, поддерживаемых драйвером класса портов.

Функция PcRegisterSubdevice драйвера класса порта регистрирует подсобное устройство, которое воспринимается остальной частью системы как устройство. Драйвер порта получает irP создания, предназначенные для объекта устройства, но только для тех, которые указаны в ссылочной строке, в которой зарегистрирован вложенный объект. Драйвер порта также получает irP, предназначенные для файловых объектов, связанных с вложенной. Драйвер порта отвечает за поведение дочерней части в качестве фильтра KS и за надлежащее взаимодействие с драйвером мини-порта.

Дополнительные сведения о разработке драйверов для многофункциональных звуковых карт см. в разделе Многофункциональные звуковые устройства.