Динамические звуковые подразделы
Некоторые аудиоадаптеры могут динамически изменять свои внутренние топологии во время выполнения. Используя предоставляемые системой возможности системного драйвера 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 . При удалении подчиненного устройства из топологии адаптера драйвер должен отменить регистрацию физических подключений подсети к этой части топологии. Сбой при отмене регистрации физических подключений подчиненного устройства может привести к утечке памяти. PortCls поддерживает процедуры PcRegisterXxx в Windows 2000 и более поздних версиях.
В следующих разделах этого раздела описывается реализация поддержки драйверов для адаптеров с динамическими топологиями.
Управление динамическими топологиями