Динамические аудиоподустройства

Некоторые звуковые адаптеры могут динамически изменять внутренние топологии во время выполнения. Используя возможности, предоставляемые системой в системном драйвере PortCls (Portcls.sys), драйверы адаптеров могут обеспечить поддержку программного обеспечения динамически настраиваемого звукового оборудования.

Например, спецификация intel High Definition Audio использует термин аудиокодека для ссылки на интегрированный аудиоадаптер, который подключается к контроллеру аудио высокой четкости (HD Audio) через интерфейс HD Audio Link. Типичный звуковой кодек поддерживает обнаружение присутствия джека: когда подключаемый модуль вставляется или удаляется из разъема, оборудование создает прерывание для уведомления драйвера об изменении конфигурации оборудования. Например, драйвер реагирует на вставку разъема в разъем для наушников, создав фильтр KS для представления аудиоподсистемы для наушников. Драйвер назначает аппаратные ресурсы фильтру (например, для наушников может потребоваться управление громкостями и цифровой аналоговый преобразователь или DAC) и регистрирует фильтр в качестве звукового устройства. Когда пользователь отключает наушники, драйвер отвечает, освобождая ресурсы, удаляя фильтр и удаляя его из реестра.

Поведение этой системы гарантирует, что когда аудиоприложение проверяет, какие звуковые устройства зарегистрированы, оно обнаруживает только те устройства, которые в данный момент подключены. Если устройство отключено, оно не отображается в реестре.

В Windows Vista Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2) PortCls поддерживает интерфейсы IUnregisterSubdevice и IUnregisterPhysicalConnection . Драйверы аудиоадаптера используют эти два интерфейса для удаления вложенных аудиоданных, которые больше не используются. Более ранние версии Windows, включая Windows Server 2003 и Windows XP, не поддерживают эти интерфейсы. В этих более ранних версиях Windows подустройства можно создать, но нельзя удалить — после создания подустройство существует в течение всего времени существования объекта драйвера адаптера.

Интерфейс IUnregisterSubdevice содержит один метод, который драйвер адаптера может использовать для "отмены регистрации" подраздела, зарегистрированного драйвером с помощью предыдущего вызова подпрограммы PcRegisterSubdevice :

IUnregisterSubdevice::UnregisterSubdevice

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

IUnregisterPhysicalConnection::UnregisterPhysicalConnection

IUnregisterPhysicalConnection::UnregisterPhysicalConnectionFromExternal (Разрегистрация физического соединения из внешнего источника)

IUnregisterPhysicalConnection::UnregisterPhysicalConnectionToExternal

Эти методы удаляют подключения, зарегистрированные драйвером с помощью предыдущих вызовов pcRegisterPhysicalConnection, PcRegisterPhysicalConnectionFromExternal и PcRegisterPhysicalConnectionToExternal . PortCls сохраняет сведения из вызова PcRegisterPhysicalConnectionXxx , чтобы драйвер порта впоследствии использовал сведения для реагирования на запросы свойств KSPROPERTY_PIN_PHYSICALCONNECTION . При удалении вложенных значений из топологии адаптера драйвер должен отменить регистрацию физических подключений subdevice к этой части топологии. Сбой при отмене регистрации физических подключений subdevice может привести к утечкам памяти. PortCls поддерживает подпрограммы PcRegisterXxx в Windows 2000 и более поздних версиях.

В следующих разделах этого раздела описывается реализация поддержки драйверов для адаптеров с динамическими топологиями:

Управление динамическими топологиями

Поддержка драйверов для динамических подустройств

Описания разъемов для динамических аудиоподсистем