Windows音频体系UAA
+ -

WDM-UAA音频驱动简介

2022-08-10 107 0

UAA全称Microsoft Universal Audio Architecture.

Windows内核音频体系包括两大部分,分别为WDM和KS(kernel stream)组件。并且其支持的操作系统从Windows 98至现在最新的Windows 11.

Windows对支持符合UAA规范的PCI,USB,IEEE1394总线提供免驱动的支持,故不需要开发额外的驱动。

如果硬件厂商需要提供其自定义的驱动支持,可以根据需要选择为PortCls系统驱动程序(PortCls.sys)或AVStream(Ks.sys)类系统驱动程序。

PortClass

一般传统的音频设备驱动使用PortClas驱动类实现。驱动开发者为了实现应用程序与驱动程序的通讯,其必须选择合适的端口驱动程序。PortClass提供的端口驱动程序类如:WaveCyclic, WavePci, and WaveRT.

AVStream

AVStream是微软提供的另一类驱动程序。其不仅支持音频,也支持视频。其驱动主体是ks.sys。

各相驱动之间的层次关系

微软虽然在驱动层次架构等方面严格区分了各个驱动模块之间的界限,不过在驱动文件上并没有做到了完全的划分,其主要表现在ks.sys上。
ks.sys的内容包括了通用的音视频驱动通用代码和avstream的全部代码。而portclass又因和avstream并列,又得对上使用ks.sys中的通用音频驱动代码。

ks.sys

而在逻辑上的区分应为:
105553541016

更详尽的驱动程序架构为:
UAA
可以看到,USB的UAC驱动也属于AVStream驱动程序架构。

0 篇笔记 写笔记

PortClass中的COM
一般的Windows驱动我们采用的是WDM驱动架构,最近的Windows驱动架构WDF也是建立在WDM基础上的。这些基于WDM的一般设备驱动可以应付大部分的设备驱动,如串口,PCI,USB等通用设备驱动。但是微软的关于流的处理的一些服务及驱动采用的面向对象的设计方法,是基于COM进行开发的,典型的像......
PortClass流式音频架构
在Windows操作系统中,PortClass仅用于纯音频设备驱动的开发,其配合内核流式驱动模块ks.sys实现音频设备驱动的开发。内核流式驱动模块ks.sys包含两部分内容,一部分是提供内核通用的流式驱动模块,另一部分是avstream模块。avstream模块即可用于开发音频设备驱动,也可用......
PortClass音频驱动程序架构
音频适配器驱动程序是最低层的音频驱动,对下实现对硬件的操作,以上提供端口驱动的函数回调。所以音频适配器驱动的代码来自两部分,一部分是厂商提供的硬件驱动代码,一般是由portclass提供的通用音频驱动模块。入口函数因为适配器驱动程序是作为内核模式驱动程序服务安装的,所以和其它驱动一样,由操作系统加......
PortClass提供的音频MINI端口驱动
PortClass提供了以下几种MiniPort驱动类型。Cyclic DMA wave input and output:此类Mini端口驱动程序支持访问ISA和其他声卡的基于DMA的wave I/O功能。接口专门处理循环(autoinit)DMA缓冲区,流问题由端口驱动程序解决。Scatt......
PortClass InitializeAdapterDriver函数
InitializeAdapterDriver函数是PortClass驱动DriverEntry调用的第一个函数,也是惟一的函数。该函数的功能和其它的MINI小端口驱动一样,都是初始化相应的MIN小端口驱动框架的“结构体”,并使用系统提供的类驱动的回调函数来初始化相应的IRP回调函数,而我们函数的第......
PortClass PcAddAdapterDevice函数
PcAddAdapterDevice函数在WDK中声名如下:PORTCLASSAPI NTSTATUS NTAPI PcAddAdapterDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalD......
PortClass 自定义启动函数StartDevice
通过上一节知道,IPR_MN_START_DEVICE的回调函数其实是PnpStartDevice,不过兜兜转转,最终执行的是我们在通过在PcAddAdapterDevcie函数的第三参数StartDevice。当然在执行我们自定义的这个StartDevice函数之前,PortClass框架类已经通......
PortClass 电源管理
电源管理实现的COM是AdapterPowerMgr,继承于IAdapterPowerManagement和CUnknown,用于电源的管理。class AdapterPowerMgr: public IAdapterPowerManagement, public CUnkn......
PortClass 拓扑结构实现原理
在PortClass音频设备驱动中,除了设计电源管理之外,另一些重要的结构就是实现音频设备的MiniPort驱动。我们知道,PortClass提供了多种MiniPort端口驱动,我们只需要继承,并实例化并生成设备拓扑结构就行了。但多种MiniPort端口驱动的类型很多,我们一般选择Topology端......
PortClass IMiniportTopology拓扑结构的实现
需要实现IMiniportTopology的为:class Topology: public IMiniportTopology, public CUnknown{};当然Topology和WaveCyclic类为了实现上图的拓结构图,需要返回相应的拓结连接关系图,系统会调......
PortClass IMiniportWaveCyclic拓扑结构的实现
需要实现IMiniportWaveCyclic的类分别为:class WaveCyclic: public IMiniportWaveCyclic, public CUnknown{};当然WaveCyclic类为了实现上图的拓结构图,需要返回相应的拓结连接关系图,系统......
PortClass IMiniportWaveCyclicStream
IMiniportWaveCyclicStream接口表示流经WaveCyclicFilter上引脚的音频流。该过滤器包装了WaveCycle渲染或捕获设备,并通过将WaveCycle端口驱动程序与WaveCycle微型端口驱动程序配对来实现。需要实现IMiniportWaveCyclicStre......
WDM-UAA音频驱动简介
UAA全称Microsoft Universal Audio Architecture.Windows内核音频体系包括两大部分,分别为WDM和KS(kernel stream)组件。并且其支持的操作系统从Windows 98至现在最新的Windows 11.Windows对支持符合UAA规范的P......
PortClass电源管理回调函数及调用时机
PortClass电源管理使用IAdapterPowerManagement类实例来回调。class AdapterPowerMgr: public IAdapterPowerManagement, public CUnknown其三个回调函数分别为:PowerChan......
CUnknown和INonDelegatingUnknown
CUnknown继承于INonDelegatingUnknown,并且CUnknown是所有COM的基类。class CUnknown : public INonDelegatingUnknown而INonDelegatingUnknown是一个虚基结构体。INonDelegatingUnkn......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!