Запросы элементов свойств драйвера miniport
Этот раздел содержит краткое введение в запросы элементов свойств DirectMusic. Полный обзор этой и других концепций потоковой передачи ядра можно найти в разделе Потоковая передача ядра.
Драйверы directMusic miniport должны обрабатывать наборы свойств аудиодрайверов. Запрос свойства появляется в двух частях. Первая часть — это набор свойств, определенный структурой KSPROPERTY . Второй — это буфер данных, содержащий данные экземпляра, относящиеся к элементу свойства.
Структура KSPROPERTY содержит следующее:
Предопределенный ИДЕНТИФИКАТОР GUID, указывающий набор (например , KSPROPSETID_Synth_Dls).
Идентификатор элемента, указывающий элемент свойства в наборе (например , KSPROPERTY_SYNTH_DLS_DOWNLOAD).
Флаги, указывающие запрошенную операцию.
Элемент Flags в KSPROPERTY может содержать только один из следующих флагов, чтобы указать операцию, запрошенную драйвером мини-порта:
KSPROPERTY_TYPE_GET
Для получения значения заданного элемента свойства.
KSPROPERTY_TYPE_SET
Установка значения заданного элемента свойства.
KSPROPERTY_TYPE_BASICSUPPORT
Определение типа поддержки, доступной для набора свойств. Данные, возвращаемые в *pvPropertyData , представляют собой DWORD, содержащие один или оба KSPROPERTY_TYPE_GET и KSPROPERTY_TYPE_SET, указывающие, какие операции возможны.
Вторая часть запроса элемента свойства — это данные экземпляра, который представляет собой буфер, который можно использовать для передачи данных в драйвер мини-порта или из нее. Способ использования этого буфера зависит от того, является ли запрос set или GET:
Если запрос является KSPROPERTY_TYPE_SET, данные экземпляра отправляются драйверу мини-порта, но не возвращаются инициатору запроса.
Если запрос является KSPROPERTY_TYPE_GET, данные экземпляра заполняются в драйвере мини-порта и возвращаются инициатору запроса.
Запрос элемента свойства можно направить на определенный узел в топологии драйвера мини-порта. Топология драйвера мини-порта описывает структуру драйвера и базовое оборудование. В топологии могут быть узлы, куда можно отправлять элементы свойств, независимо от наличия экземпляров контактов, доступных во время запроса.
Для воспроизведения DirectMusic необходимо создать экземпляр закрепления. Данные DirectMusic отправляются на узел типа KSNODETYPE_DMSYNTH. Ниже приведен пример подключения к драйверу мини-порта.
Подключите поток в к синтезатору:
PCFILTER_NODE закрепление 0 (с выходом) —> узел 0 Закрепление 1 (вход)
Подключение синтезатора к выходу звука:
Node 0 Pin 0 (out) —> PCFILTER_NODE Pin 1 (in)
Поддерживаемые форматы данных — это диапазон данных, который указывает, в каком формате пин-код может получать данные.
Формат DirectMusic (STATIC_KSDATAFORMAT_SUBTYPE_DIRECTMUSIC) должен быть определен в топологии драйвера мини-порта, чтобы DirectMusic могли отправлять свои данные драйверу мини-порта. Этот формат определяется структурой DMUS_EVENTHEADER (см. документацию по Microsoft Windows SDK) в dmusbuff.h. Если драйвер мини-порта указывает, что он поддерживает этот конкретный диапазон данных, DirectMusic может предоставить этот диапазон данных пользователю (через закрепление на самом порте).