Windows驱动间互相调用的一些问题
各位大佬,最近我刚刚入门驱动,想要实现一个虚拟声卡,类似于mac上的Loopback,从扬声器输出的声音,可以和麦克风输入的声音结合在一起,被应用监听到。 我在做这个项目的时候,想要将声音从虚拟扬声器pass到真实扬声器,目前想到的策略是通过在虚拟扬声器驱动收到write的IRP的时候,调用ZwWritefile,给真实的扬声器驱动也发一个write的IRP。但是看官方文档又有一个驱动栈的概念,我想能不能直接把虚拟扬声器设置为真实扬声器的上级驱动,这样就不需要调用ZwWritefile来创建IRP。 请问有没有哪位大佬有这方面的经验可以解答一下,非常感激
首先,在Windows下通过IRP_MJ_WRITE是拦截不到音频流数据的.
音频架构
Windows下的音频包括2大部分实现:Windows的音频体系http://www.pnpon.com/article/detail-26.html
- 一类是PortClass类型的 http://www.pnpon.com/article/detail-25.html
- 另一类的UAC即USB AUDIO CLASS类型:https://www.usbzh.com/article/forum-1.html
这两类的公用部分是ks模块,来实现Windows的音频驱动模块
在上层来说,我们从Vista之后用的是coreapi,wasapi,这是COM类,是Windows音频应用层的最底层,其它的direct之类的都是基于它的上层。
实现
你说的这个功能,如果要从驱动实现,可以参考微软提供的源代码Windows-driver-samples下的sysvad,这会编译出虚拟声卡,可以自行安装测试。
另外,其实也可以通过e2esoft的虚拟声卡来实现(收费的)