拓扑微型端口驱动程序

拓扑微型端口驱动程序管理音频适配器混音器线路中的各种硬件控制(例如音量和静音)。 此驱动程序将控件枚举为 混音器拓扑中的节点 ,使客户端能够发现节点之间的互连,并在每个节点上查询和设置控制参数。

SysAudio 系统驱动程序在生成音频筛选器图时查看适配器的拓扑。 混音器 API(在 Microsoft Windows SDK 文档的 Windows 多媒体部分中介绍)将拓扑节点表示为混音器线控件,并将其公开给用户模式应用程序(如 SndVol32)。 有关详细信息,请参阅 SysTray 和 SndVol32

拓扑微型端口驱动程序应实现拓扑微型端口接口,端口驱动程序使用该接口初始化微型端口驱动程序。 微型端口接口 IMiniportTopology 继承 IMiniport 接口中的方法;它不提供其他方法。 音频适配器驱动程序通过将微型端口对象的 IMiniportTopology 接口绑定到端口对象的 IPortTopology 接口来形成拓扑筛选器

通常,拓扑筛选器包含适配器的大部分拓扑节点,尽管适配器中的其他设备可能包含其他拓扑节点。 例如,表示为波形筛选器的波形设备可能包含 DAC (KSNODETYPE_DAC) 和 ADC (KSNODETYPE_ADC) 节点。

在拓扑节点上查询和设置控制参数是通过属性请求完成的。 每个节点类型都与特定的属性或一组属性相关联。 节点可能仅支持一个控件值。 例如,卷节点(KSNODETYPE_VOLUME)具有指示其当前卷设置的值。 其他节点可能支持多个控制值。 例如,3D 节点(KSNODETYPE_3D_EFFECTS)支持多个 3D 缓冲区和 3D 侦听器属性。 另一方面,总和节点(KSNODETYPE_SUM)没有控制值。

拓扑微型端口驱动程序使用 连接描述符PCCONNECTION_DESCRIPTOR)来描述两个拓扑节点之间的连接。 每个连接都定向,并同时指定从节点和节点到节点。 节点可能有多个引脚,一个引脚执行的函数可能与其他引脚不同。 为了区分一个引脚与另一个引脚,微型端口驱动程序为节点上的引脚编号。 这些引脚编号显示在连接描述符中。 例如,状态变量筛选器可能具有三个输出引脚-一个用于高、中、低频率-编号为 1、2 和 3。 引脚编号允许微型端口驱动程序的客户端确定哪些连接与哪个引脚相关联。

连接描述符使用可分辨节点标识符(PCFILTER_NODE)将筛选器上的引脚与筛选器中的节点上的引脚区分开来。 每个混音器线路与音频适配器中的音频呈现和捕获设备的硬连接都表示为拓扑筛选器上的引脚。 其他拓扑筛选器引脚表示外部物理连接,例如适配器上的换行插孔卡。 拓扑筛选器上的引脚表示适配器硬件的物理硬连接。 因此,引脚无法对连接是否进行显式控制,并且它们不能用于管理该连接上的数据流。

单个连接描述符可以描述拓扑中任意两种引脚类型之间的连接。 连接两侧的引脚既可以是筛选器上的引脚,也可以是筛选器中的节点上的引脚,或者连接可以在一侧有一个筛选器引脚,另一端可以有一个节点引脚。 微型端口驱动程序将其拓扑指定为连接描述符数组。 单个引脚可以有多个连接,这意味着同一个引脚可以出现在数组中的多个连接描述符中。

客户端从微型端口驱动程序获取的拓扑说明并非旨在支持如何解释客户端未知的节点类型的开放式发现。 仅节点引脚编号不会向客户端提供发现引脚函数所需的信息。 尽管微型端口驱动程序标识节点的类型(通过 GUID),但它不提供用于描述节点类型或节点类型支持的引脚的任何标准化参数列表。

例如,如果客户端枚举了使用节点类型 GUID KSNODETYPE_VOLUME 来标识自己的节点,则客户端仅当知道处理卷节点的约定时,客户端才能使用该节点。 按照约定,卷节点支持 KSPROPERTY_AUDIO_VOLUMELEVEL 属性,并将节点引脚号 0 和 1 分别分配给输出(源)引脚和输入(接收器)引脚。 此外,能够控制卷节点的客户端通常执行定向搜索,将浏览限制为相对较少的节点类型(例如卷和静音节点)。 客户端通常只浏览可能包含卷节点(例如混音器线)的筛选器图的某些部分。

微型端口接口支持将未经请求的控制值从微型端口驱动程序传送到端口驱动程序。 此功能适用于具有可由用户物理操作的控制旋钮、滑块或开关的设备。 每次用户更改节点的控制值时,硬件中断都会通知端口驱动程序 硬件事件 已发生。