动态音频子项

某些音频适配器可以在运行时动态更改其内部拓扑。 通过使用 PortCls 系统驱动程序(Portcls.sys)中系统提供的功能,适配器驱动程序可以为动态可配置的音频硬件提供软件支持。

例如,Intel 高清音频规范 使用术语音频编解码器来指代通过 HD 音频链接接口连接到高清音频(HD 音频)控制器的集成音频适配器。 典型的音频编解码器支持插孔状态检测:当插入或从插孔中删除插孔时,硬件将生成中断,以通知驱动程序硬件配置中的更改。 例如,驱动程序通过创建 KS 筛选器 来表示耳机的音频子设备,从而响应耳机插入插孔。 驱动程序将硬件资源分配给筛选器(例如,耳机可能需要音量控制和数字到模拟转换器或 DAC),并将筛选器注册为音频设备。 当用户拔下耳机时,驱动程序会释放资源、删除筛选器并从注册表中删除它来响应。

此行为可确保当音频应用程序检查以查看已注册的音频设备时,它仅查找当前插入的设备。 如果设备未拔出,则它不会出现在注册表中。

在 Windows Vista、具有 Service Pack 1(SP1)的 Windows Server 2003 和具有 Service Pack 2(SP2)的 Windows XP 中,PortCls 支持 IUnregisterSubdeviceIUnregisterPhysicalConnection 接口。 音频适配器驱动程序使用这两个接口删除不再使用的音频子项。 早期版本的 Windows(包括 Windows Server 2003 和 Windows XP)不支持这些接口。 在这些早期版本的 Windows 中,可以创建子对象,但不能将其删除-一旦创建子资源,它就存在于适配器驱动程序对象的生存期内。

IUnregisterSubdevice 接口包含一个单一方法,适配器驱动程序可以借此“注销”之前通过调用 PcRegisterSubdevice 例程注册的子设备。

IUnregisterSubdevice::UnregisterSubdevice

IUnregisterPhysicalConnection 接口包含三种方法,适配器驱动程序可用于取消注册子项之间的物理连接:

IUnregisterPhysicalConnection::UnregisterPhysicalConnection

IUnregisterPhysicalConnection::UnregisterPhysicalConnectionFromExternal

IUnregisterPhysicalConnection::UnregisterPhysicalConnectionToExternal

这些方法删除驱动程序在之前调用 PcRegisterPhysicalConnectionPcRegisterPhysicalConnectionFromExternalPcRegisterPhysicalConnectionToExternal 例程时注册的连接。 PortCls 会存储来自 PcRegisterPhysicalConnectionXxx 调用的信息,以便端口驱动程序随后可以使用这些信息来响应 KSPROPERTY_PIN_PHYSICALCONNECTION 属性请求。 从适配器的拓扑中删除子应用程序时,驱动程序必须取消注册子网络与该部分拓扑的物理连接。 未能注销子设备的物理连接可能会导致内存泄漏。 PortCls 支持 Windows 2000 及更高版本中的 PcRegisterXxx 例程。

本节中的以下主题介绍如何实现对具有动态拓扑的适配器的驱动程序支持:

管理动态拓扑

动态子对象的驱动程序支持

动态音频子设备的插孔描述