WDM 音频术语

本部分介绍 Microsoft Windows 驱动程序模型 (WDM) 音频驱动程序体系结构与通用 Windows 分层驱动程序体系结构之间的术语差异。 通用驱动程序体系结构以 SCSI 端口/微型端口驱动程序(请参阅存储驱动程序体系结构)为例。

如下所述,通用和 WDM 音频驱动程序体系结构定义的术语相似,但它们确实存在一些重要差异。

微型端口驱动程序(通用)

微型端口驱动程序(通用)是驻留在系统总线(例如 PCI 或 ISA)上的适配器的硬件特定驱动程序。 此驱动程序具有单个入口点 DriverEntry,并向端口驱动程序注册函数表。 此函数表充当微型端口驱动程序的上边缘接口。

微型端口驱动程序位于驱动程序堆栈中的端口驱动程序下方。 也就是说,所有对微型端口驱动程序的调用都是从端口驱动程序发出的,传出微型端口驱动程序的所有调用都指向端口驱动程序的下边缘接口。

下图说明了术语堆栈上边缘接口下边缘接口在此上下文中使用时的含义。 表示端口驱动程序的块堆叠在表示微型端口驱动程序的块的上面。 因此,微型端口驱动程序位于“堆栈”中的端口驱动程序下方。

Diagram illustrating driver stack with port driver on top and miniport driver below, showing upper and lower-edge interfaces.

端口和微型端口驱动程序通过向彼此公开的软件接口进行通信。 在上图中,这些接口与表示端口驱动程序的块的下边缘和表示微型端口驱动程序的块的上边缘相关联。 此表示形式是术语“下边缘接口”和“上边缘接口”的来源。

端口驱动程序(通用)

端口驱动程序(通用)环绕微型端口驱动程序。

端口驱动程序:

  • 实现 WDM 流式处理筛选器。

  • 为操作系统的其余部分提供一个通用接口。

  • 处理来自系统的 I/O 请求,并将这些请求强制转换为微型端口驱动程序函数表调用。

  • 为微型端口驱动程序提供一个支持函数库(端口驱动程序的下边缘接口)。

端口驱动程序会隐藏来自微型端口驱动程序的许多操作系统详细信息,微型端口驱动程序会隐藏来自端口驱动程序的基础硬件详细信息。 端口驱动程序的实现可能会对不同的操作系统版本进行更改,但微型端口驱动程序的接口或多或少保持不变,从而使微型端口驱动程序在很大程度上独立于平台。

微型驱动程序(通用)

微型驱动程序(通用)表示总线上的硬件组件。 微型驱动程序使用总线驱动程序通过总线与物理设备通信,并将总线驱动程序和一个或多个类驱动程序绑定在一起。

类驱动程序可帮助微型驱动程序将物理设备作为逻辑设备类型呈现给客户端。 在 WDM 环境中,微型驱动程序通常从类驱动程序接收 IRP 形式的请求,并将 IRP 形式的请求发送到总线驱动程序。

微型驱动程序可能还必须与多个类驱动程序进行通信。 绑定到多个类驱动程序的微型驱动程序示例是 IEEE 1394 总线上 CD-ROM 驱动器的微型驱动程序。 它可能会绑定到文件系统驱动程序,以便可以从文件系统访问驱动器。 但是,它还绑定到 Redbook 系统驱动程序,以便可以从 CD 流式传输音频。

总线驱动程序(通用)

总线驱动程序(通用)允许微型驱动程序访问物理总线。 Microsoft Windows 硬件抽象层 (HAL) 有时称为系统总线驱动程序,因为它提供对系统总线的访问权限。 有关详细信息,请参阅总线驱动程序

类驱动程序(通用)

类驱动程序(通用)实现在类似设备类中通用的行为。

类驱动程序:

  • 消除硬件特定驱动程序中的功能重复。

  • 不特定于总线。

  • 不知道资源问题(例如 DMA 和中断)。

微型端口驱动程序(WDM 音频)

微型端口驱动程序(WDM 音频)为位于系统总线的音频适配器卡上的函数实现特定于函数的接口。 微型端口驱动程序是适配器驱动程序的一个组件。 操作系统无法将其识别为驱动程序。 在这方面,音频微型端口驱动程序不同于通用微型端口驱动程序。

与通用微型端口驱动程序不同,音频微型端口驱动程序不实现 DriverEntry,未注册,并且不完全依赖相应的端口驱动程序来提供支持。 应对多个函数的多个音频微型端口驱动程序可以链接到单个适配器驱动程序(并与单个设备对象关联)。

适配器驱动程序(WDM 音频)

适配器驱动程序(WDM 音频)充当与给定适配器关联的所有微型端口驱动程序的容器。 此适配器驱动程序被操作系统识别为驱动程序,并包含在其自己的 .sys 文件中。

音频适配器驱动程序由一组微型端口驱动程序和解决初始化问题的附加代码组成。 例如,适配器驱动程序实现 DriverEntry 入口点。

端口驱动程序(WDM 音频)

端口驱动程序(WDM 音频)代表微型端口驱动程序实现 KS 筛选器,并在端口类驱动程序的上下文中运行。 端口驱动程序会将微型端口驱动程序的函数特定代码作为 KS 筛选器向系统公开,并负责实现与适配器无关的功能。

与通用端口驱动程序不同,音频端口驱动程序共享设备对象,因此将采用不同的方式实例化。 相比通用端口驱动程序,音频端口驱动程序也更类似于通用类驱动程序,因为它实现某个设备类的预期行为(它与总线无关)。

端口类驱动程序(WDM 音频)

端口类驱动程序(WDM 音频)充当端口驱动程序集合的容器,每个驱动程序都为不同类型的音频硬件函数提供支持。 下图显示了音频端口类驱动程序和适配器驱动程序之间的关系。

Diagram showing the relationship between audio port class drivers, adapter drivers, and their respective miniport drivers.

适配器驱动程序管理可能包含多个不同硬件函数的适配器卡。 如上图所示,适配器驱动程序包含用于管理每种类型的硬件函数的微型端口驱动程序。 同样,端口类驱动程序旨在为具有多个硬件函数的适配器卡提供支持。 端口类驱动程序为它支持的每个定义完善的函数类型提供端口驱动程序。 适配器驱动程序将其面向特定函数的微型端口驱动程序绑定到该函数类型的相应端口驱动程序。 每个函数的端口驱动程序都处理与使用该函数的 WDM 音频客户端的通信。 微型端口驱动程序包含用于管理该函数的所有硬件特定代码。

端口类驱动程序(WDM 音频)主要充当与单个设备对象关联的多个子设备的容器。 总线驱动程序会为它们枚举的每个即插即用 (PnP) 节点创建单个物理设备对象 (PDO)

对于音频适配器,单个 PnP 节点经常包含多个音频函数。 若要将与节点关联的各种函数作为不同的设备公开,通常需要为适配器编写总线驱动程序。 总线驱动程序会枚举硬件函数并创建相应的 PDO。 在此方案中,一个或多个函数特定驱动程序需要绑定到 PDO,并与总线驱动程序协商,以便访问适配器上的共享资源。

端口类驱动程序使用内核流式处理驱动程序公开单个设备对象的各个方面的功能,以便操作系统将设备识别为一组不同的子设备。

会将引用字符串追加到设备名称,以指定所需的子设备。 内核流式处理驱动程序根据此引用字符串调度创建 IRP。 创建文件对象后,内核流式处理驱动程序提供针对表示子设备的文件对象的 IRP 的调度。 此外,端口类驱动程序还实现用于打包子设备的基于 COM 的模型。

适配器驱动程序会实例化端口驱动程序和微型端口驱动程序,并将指向微型端口驱动程序的指针作为参数传递给端口驱动程序的初始化函数,从而将它们绑定在一起(请参阅子设备创建中的代码示例)。 生成的端口/微型端口驱动程序堆栈构成 KS 筛选器,该筛选器表示端口类驱动程序支持的子设备类型之一。

端口类驱动程序的 PcRegisterSubdevice 函数会注册子设备,该子设备会被系统其余部分视为设备。 端口驱动程序接收以设备对象为目标的创建 IRP,但仅接收由用于注册子设备的引用字符串指定的 IRP。 端口驱动程序还会接收以与子设备关联的文件对象为目标的 IRP。 端口驱动程序负责子设备作为 KS 筛选器的行为,并负责与微型端口驱动程序进行相应通信。

有关设计多功能音频卡驱动程序的详细信息,请参阅多功能音频设备