Запросы свойств аудио

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

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

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

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

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

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

  • Флаги, указывающие тип запроса свойства (get, set или basic-support)

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

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

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

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

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

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

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