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


Общие сведения о драйвере miniport для синтезатора

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

Если вы реализуете поддержку оборудования, единственным выбором является написание драйвера в режиме ядра. В режиме ядра приемник волн предоставляется драйвером порта DMus в PortCls и не должен заменяться для пользовательских реализаций (как это иногда делается в пользовательском режиме).

Для драйверов DirectMusic в режиме ядра наиболее важным файлом заголовка является dmusicks.h. Он содержит main интерфейсы режима ядра, необходимые для реализации драйвера мини-порта. Ниже перечислены следующие интерфейсы:

IMiniportDMus

ISynthSinkdMus

IMXF

IAllocatorMXF

IMasterClock

IPortDMus

Последние три из этих интерфейсов реализованы в PortCls.sys.

Два других файла заголовков, которые представляют интерес: dmusprop.h, который содержит элементы свойств DirectMusic, и dmusbuff.h, который содержит структуру IRP main, DMUS_EVENTHEADER.

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

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

На самом верхнем уровне драйвер предоставляется через драйвер порта DirectMusic (экземпляр интерфейса IDirectMusicPort ). Вот как приложение взаимодействует с DirectMusic. Этот драйвер порта взаимодействует вниз с экземпляром контактов через стандартные вызовы потоковой передачи ядра через функцию DeviceIoControl (описанную в документации по Microsoft Windows SDK).

Обратите внимание, что термин "порт" имеет два противоречивых значения на рисунке выше. Избегайте путаницы при использовании термина порт API DirectMusic в пользовательском режиме выше с драйвером порта DMus в режиме ядра. Термины имеют схожие, но немного разные значения в двух контекстах. В частности, обратите внимание, что интерфейс IDirectMusicPort в верхней части рисунка представляет абстракцию одного экземпляра контакта, который драйвер порта DMus реализует в нижней половине рисунка.

Каждый объект драйвера минипорта подключается к соответствующему объекту драйвера порта. Объект драйвера порта предоставляет базовые службы для драйвера мини-порта. Каждый экземпляр закрепления, который сопоставляется с одним открытым экземпляром устройства, имеет такие службы, как преобразование формата, последовательность и "регулирование" (обсуждение регулирования см. в описании интерфейса IDirectMusicThru в документации windows SDK). Контакты могут быть целевыми объектами или источниками и поддерживать несколько форматов и диапазонов данных. Каждый экземпляр закрепления указывает целевой объект или источник, а также указывает, какой формат данных и диапазон поддерживается.

Объект драйвера минипорта создается драйвером адаптера IHV. Хотя для каждого открытого экземпляра драйвера существует один экземпляр pin и sequencer, на каждый элемент оборудования (или загруженный синтезатор программного обеспечения ядра) существует только одна пара драйверов порта и минипорта. Взаимодействие с драйвером минипорта осуществляется через поток событий, передаваемых драйверу мини-порта, и через элементы свойств, поддерживаемые драйвером минипорта.

В разделе Интерфейс драйвера DirectMusic miniport представлены сведения о реализации драйвера мини-порта DirectMusic.