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

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

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

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

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

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

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

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

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

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

Драйвер порта (общий) окружает минипорт-драйвер.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Miniport Driver (WDM Audio)

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

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

Драйвер адаптера (аудио WDM)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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