动态音频子设备
某些音频适配器可以在运行时动态更改其内部拓扑。 通过使用 PortCls 系统驱动程序 (Portcls.sys) 中系统提供的功能,适配器驱动程序可以为动态可配置的音频硬件提供软件支持。
例如,Intel 高清音频规范使用音频编解码器这个术语来引用通过 HD 音频链接接口连接到高清音频(HD 音频)控制器的集成音频适配器。 典型的音频编解码器支持插孔状态检测:当插头被插入或拔出插孔时,硬件会生成中断,以通知驱动程序硬件配置的变化。 例如,驱动程序通过创建 KS 筛选器来表示耳机的音频子设备,从而响应插入耳机插孔的操作。 驱动程序将硬件资源分配给筛选器(例如,耳机可能需要音量控件和数模转换器,即 DAC),并将筛选器注册为音频设备。 当用户拔下耳机时,驱动程序会通过释放资源、删除筛选器并将其从注册表中移除来做出响应。
此行为可确保当音频应用程序检查以了解注册了哪些音频设备时,它仅会查找当前插入的设备。 如果设备已拔出,它将不会显示在注册表中。
在 Windows Vista、Windows Server 2003 Service Pack 1 (SP1) 和 Windows XP Service Pack 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 支持 Windows 2000 及更高版本中的 PcRegisterXxx 例程。
本节中的以下主题介绍如何实现对具有动态拓扑的适配器的驱动程序支持: