端口类简介

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

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

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

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

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

  • audio port 驱动程序的集合

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

当操作系统加载适配器驱动程序时,适配器驱动程序将创建一组微型端口驱动程序对象,并提示 PortCls 系统驱动程序创建相应的端口驱动程序对象集。 (创建子设备中的代码示例说明了此过程。)这些端口驱动程序通常是 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.

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

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

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

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

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

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

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

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

本部分讨论了以下主题:

实现特定于功能的接口

操作系统提供的 PortCls 支持