Запросы звуковых свойств

Клиенты звукового драйвера Microsoft Windows (WDM) могут отправлять запросы к свойствам KS фильтров и штифтов, созданных драйвером. Например, клиент пользовательского режима может отправить запрос на свойство KS, вызвав функцию DeviceIoControl (см. документацию по пакету SDK Для Microsoft Windows) с кодом управления ввода-вывода IOCTL_KS_PROPERTY. Эта функция отправляет IRP, содержащий запрос свойства, в указанный фильтр или объект пин.

Звуковые драйверы поддерживают получение, настройку и базовые запросы на поддержку свойств (KSPROPERTY_TYPE_GET, KSPROPERTY_TYPE_SET и KSPROPERTY_TYPE_BASICSUPPORT). Дополнительные сведения см. в разделе "Наборы свойств звуковых драйверов".

Клиент может отправлять запросы для трех видов свойств: свойства фильтра, свойства закрепления и свойства узла. Дополнительные сведения см. в разделе Filter, Pin и Node Properties.

При отправке запроса на свойство фильтра объекту фильтра клиент указывает целевой фильтр дескриптором экземпляра (см. раздел "Фабрики фильтров"). Аналогичным образом при отправке запроса пин-свойства в объект пин-кода целевой пин-код указывается дескриптором экземпляра (см. раздел " Фабрики пин-кода"). Любой тип запроса содержит структуру KSPROPERTY , указывающую следующее:

  • ИДЕНТИФИКАТОР GUID, определяющий набор свойств

  • Индекс, определяющий элемент свойства в указанном наборе свойств

  • Флаги, указывающие тип запроса на свойство (получение, установка или базовая поддержка)

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

Запрос свойства узла содержит структуру KSNODEPROPERTY, которая объединяет структуру KSPROPERTY и идентификатор узла. В зависимости от свойства узла целевой объект для запроса свойства — это экземпляр фильтра или экземпляр пин-кода.

Если фильтр может создать несколько экземпляров определенного типа узла, целевой объект для запроса указывается дескриптором пин-кода. Дескриптор определяет экземпляр пина в начале или конце канала передачи данных, на котором находится экземпляр узла. В случае фильтра, содержащего узел SUM или MUX (см. KSNODETYPE_SUM и KSNODETYPE_MUX), применяются следующие правила:

  • Если свойство принадлежит узлу, который находится ниже по потоку от приемного контакта (входных данных) и выше по потоку от узла SUM или MUX, запрос свойства отправляется в приемный контакт.

  • Если свойство принадлежит узлу, который находится ниже по потоку от узла SUM или MUX и выше по потоку от исходного (выходного) пина, запрос свойства отправляется на этот пин. (Кроме того, запрос свойства для узла SUM или MUX отправляется в исходный пин-код.)

С помощью этих соглашений определенный узел на определенном пути к данным можно однозначно определить.

Сведения об использовании API микшера для обхода узлов в пути к данным см. в Преобразовании топологии потоковой передачи ядра в API аудиомикшера.