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


Общие сведения о классе портов

Большинство аппаратных драйверов для аудиоустройств на основе PCI и DMA основаны на библиотеке классов портов, которая доступна через системный драйвер PortCls (Portcls.sys). PortCls — это драйвер класса аудиопорта, который корпорация Майкрософт включает в состав операционной системы. PortCls предоставляет набор драйверов портов, реализующих большинство функций фильтра потоковой передачи ядра (KS). Таким образом, PortCls упрощает задачу разработчика звукового драйвера. Поставщик оборудования должен предоставить только набор драйверов минипорта для обработки аппаратных функций звукового адаптера.

Хотя у поставщиков оборудования есть возможность реализовать собственные фильтры KS для своих звуковых устройств, этот параметр является как трудным, так и ненужным для типичных звуковых устройств. Вы можете разработать фильтр KS, чтобы соответствовать Stream.sys, драйверу класса Stream или Avstream.sys, драйверу класса AVStream. Но фильтр KS, основанный на Stream.sys, не может воспользоваться преимуществами улучшений, доступных только в AVStream. Дополнительные сведения о фильтрах KS и PortCls см. в статье "Начало работы с драйверами аудио WDM".

Внутренняя реализация PortCls может развиваться, чтобы воспользоваться преимуществами потоковой передачи ядра в последующих выпусках Windows, сохраняя совместимость с существующими драйверами.

PortCls реализуется в Portcls.sys системном файле в качестве драйвера экспорта (dll в режиме ядра) и содержит следующие элементы:

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

  • Коллекция драйверов аудиопорта

Поставщик оборудования звукового устройства несет ответственность за предоставление драйвера адаптера. Драйвер адаптера включает инициализацию и код управления драйверами мини-порта (включая функцию DriverEntry ) и коллекцию драйверов аудиопорта .

Когда операционная система загружает драйвер адаптера, драйвер адаптера создает набор объектов драйвера miniport и запрашивает системный драйвер PortCls для создания соответствующего набора объектов драйвера портов. (Пример кода в создании Subdevice иллюстрирует этот процесс.) Эти драйверы портов обычно являются подмножеством тех, которые доступны в файле Portcls.sys. Каждый драйвер минипорта привязывает себя к соответствующему драйверу порта из Portcls.sys, чтобы сформировать полный драйвер subdevice . Драйвер подустройства для порта и минипорта, — это фильтр KS (см. Аудиофильтры). Например, типичный драйвер адаптера может содержать три драйвера минипорта: WaveRT, DMusUART и топологию (с интерфейсами IMiniportWaveRT, IMiniportDMus и IMiniportTopology ). Во время инициализации эти мини-драйверы привязаны к драйверам портов WaveRT, DMus и топологии (с интерфейсами IPortWaveRT, IPortDMus и IPortTopology ), содержащимися в файле Portcls.sys. Каждый из этих трех драйверов подустройств принимает форму KS фильтра. Три фильтра вместе предоставляют полную функциональность звукового адаптера.

Как правило, драйверы портов предоставляют большую часть функциональных возможностей для каждого класса аудиоподдевии. Например, драйвер порта WaveRT выполняет большую часть работы, необходимой для потоковой передачи звуковых данных на звуковое устройство на основе DMA, в то время как мини-драйвер предоставляет сведения об устройстве, например адрес DMA и имя устройства.

Драйверы аудиоадаптера и мини-порты обычно написаны в Microsoft C++ и используют интерфейсы COM. Архитектура драйвера порта-минипорта способствует модульной конструкции. Разработчики драйверов минипорта должны реализовать свой драйвер как класс C++, производный от интерфейса IMiniport, который определен в файле заголовка Portcls.h. Инициализация оборудования выполняется во время загрузки драйвера, как правило, в методе Init класса, производного от IMiniport (например, IMiniportWaveRT::Init). Дополнительные сведения о реализации COM-драйверов аудио минипорта см. в разделе COM в ядре.

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

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

На предыдущей схеме компонент KSEndpoint — это системный файл, предоставляемый Windows Vista и более поздних версий Windows. Этот компонент предоставляется в виде библиотеки DLL (Audiokse.dll). KSEndpoint абстрагирует конечную точку устройства в режиме ядра и предоставляет обработчик звука с доступом к абстрактной конечной точке. Дополнительные сведения об звуковом обработчике см. в статье "Изучение звукового модуля Windows Vista".

Условные обозначения на предыдущей схеме показывают поля, представляющие компоненты драйвера, которые предоставляет поставщик. Обратите внимание, что верхний уровень каждого драйвера мини-порта взаимодействует с нижним уровнем каждого драйвера порта. Например, драйвер порта WaveRT предоставляет интерфейс IPortWaveRT минипорту WaveRT, который предоставляет интерфейс IMiniportWaveRT драйверу порта. Эти интерфейсы иногда называются интерфейсами верхнего края и нижнего края .

Класс портов и драйверы классов AVStream аналогичны тем, что они являются драйверами WDM, и они оба поддерживают архитектуру потоковой передачи ядра WDM. Однако драйверы класса портов отличаются от драйверов класса AVStream в области многопроцессорной обработки и реентерабельности. Драйверы классов портов выполняют следующие действия:

  • Используйте трехуровневый подход, который объединяет драйвер класса, драйверы портов и драйверы минипорта, предоставляемые поставщиком.

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

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

  • Не поддерживают внешние шины (например, USB). Все драйверы портов поддерживают устройства, находящиеся на системных шинах (PCMCIA и PCI).

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

В этом разделе рассматриваются следующие разделы:

Реализация интерфейсов Function-Specific

Поддержка PortCls операционной системой