端口类简介

PCI 和基于 DMA 的音频设备的大多数硬件驱动程序都基于端口类库,该库可通过 PortCls 系统驱动程序(Portcls.sys)进行访问。 PortCls 是 Microsoft 作为操作系统的一部分包括的音频端口类驱动程序。 PortCls 提供一组端口驱动程序,用于实现大多数通用内核流式处理 (KS) 筛选器功能。 因此,PortCls 简化了音频驱动程序开发人员的任务。 硬件供应商只需提供一组微型端口驱动程序来处理音频适配器的硬件特定功能。

尽管硬件供应商可以选择为其音频设备实现自己的 KS 筛选器,但对于典型的音频设备来说,此选项既困难又不必要。 可以开发 KS 筛选器,使其符合 Stream.sys、Stream 类驱动程序或 AVStream 类驱动程序Avstream.sys。 但是,基于Stream.sys的 KS 筛选器不能利用仅在 AVStream 中提供的改进。 有关 KS 筛选器和 PortCls 的详细信息,请参阅 WDM 音频驱动程序入门。

PortCls 的内部实现可以改进,以利用后续 Windows 版本中的内核流式处理改进,同时保持与现有驱动程序的兼容性。

PortCls 作为导出驱动程序(内核模式 DLL)在Portcls.sys系统文件中实现,包含以下项:

  • 适配器驱动程序可以调用的一组帮助程序函数

  • 音频端口驱动程序的集合

音频设备的硬件供应商负责提供 适配器驱动程序。 适配器驱动程序包括初始化和微型端口驱动程序管理代码(包括 DriverEntry 函数)和音频微型端口驱动程序的集合。

当操作系统加载适配器驱动程序时,适配器驱动程序将创建一组微型端口驱动程序对象,并提示 PortCls 系统驱动程序创建相应的端口驱动程序对象集。 (代码示例 Subdevice Creation 说明了此过程。这些端口驱动程序通常是Portcls.sys文件中可用的端口驱动程序的子集。 每个微型端口驱动程序将自身绑定到匹配的端口驱动程序,从Portcls.sys形成完整的 子驱动程序 。 端口和微型端口驱动程序的组合是 KS 筛选器(请参阅 音频筛选器)。 例如,典型的适配器驱动程序可能包含三个微型端口驱动程序:WaveRT、DMusUART 和拓扑(使用 IMiniportWaveRTIMiniportDMusIMiniportTopology 接口)。 在初始化期间,这些微型端口驱动程序绑定到包含在Portcls.sys文件中的 WaveRT、DMus 和拓扑端口驱动程序(使用 IPortWaveRTIPortDMusIPortTopology 接口)。 这三个子驱动程序中的每一个都采用 KS 筛选器的形式。 这三个筛选器一起公开音频适配器的完整功能。

通常,端口驱动程序为每个音频子程序提供大部分功能。 例如,WaveRT 端口驱动程序执行了将音频数据流式传输到基于 DMA 的音频设备所需的大部分工作,而微型端口驱动程序提供特定于设备的详细信息,例如 DMA 地址和设备名称。

音频适配器驱动程序和微型端口驱动程序通常以 Microsoft C++ 编写,并广泛使用 COM 接口。 端口微型端口驱动程序体系结构可促进模块化设计。 微型端口驱动程序编写器应将其驱动程序实现为派生自 IMiniport 接口的 C++ 类,该接口在头文件 Portcls.h 中定义。 硬件初始化发生在驱动程序加载时间(通常在 IMiniport 派生类的 Init 方法中)(例如 IMiniportWaveRT::Init)。 有关音频微型端口驱动程序的 COM 实现的详细信息,请参阅 内核中的 COM。

下图说明了端口和微型端口驱动程序与其在音频堆栈中的位置之间的关系。

Diagram illustrating the relationship between port and miniport drivers in the audio stack.

在上图中,K标准版ndpoint 组件是随 Windows Vista 和更高版本的 Windows 一起提供的系统提供的文件。 此组件以 DLL 的形式提供(Audiokse.dll)。 K标准版ndpoint 提取内核模式设备终结点,并为音频引擎提供对抽象终结点的访问权限。 有关音频引擎的详细信息,请参阅 探索 Windows Vista 音频引擎

上图中的图例显示了表示供应商提供的驱动程序组件的框。 请注意,每个微型端口驱动程序的上边缘都连接到每个端口驱动程序的下边缘。 例如,WaveRT 端口驱动程序向 WaveRT 微型端口驱动程序公开 IPortWaveRT 接口,该接口向端口驱动程序公开 IMiniportWaveRT 接口。 这些接口有时称为 上边缘 接口和 下边缘 接口。

端口类和 AVStream 类驱动程序相似,因为它们都是 WDM 驱动程序,它们都支持 WDM 内核流式处理体系结构。 但是,端口类驱动程序与 AVStream 类驱动程序在多处理器处理和重新进入方面有所不同。 端口类驱动程序执行以下操作:

  • 使用三层方法,该方法结合了类驱动程序、端口驱动程序和供应商提供的微型端口驱动程序。

  • 具有受限数量的音频功能,允许微型端口驱动程序更接近音频硬件。

  • 允许为特定设备链接多个端口或微型端口驱动程序。 此功能允许更好地支持多功能卡。

  • 不支持外部总线(例如 USB)。 所有端口驱动程序都支持驻留在系统总线(PCMCIA 和 PCI)上的设备。

描述 WDM 音频端口和微型端口驱动程序的术语在某些方面与用于其他 Windows 驱动程序类的术语不同。 WDM 音频术语介绍了这些差异。

本部分讨论了以下主题:

特定于函数的接口的实现

操作系统支持的 PortCls