[wdmaudiodev] Writing an "unavoidable", "filter-like" audio driver

  • From: "learncyber" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "learncyber" for DMARC)
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Sun, 04 Oct 2020 11:29:23 +0000

Hi guys,
First post of mine, pretty exiting :)
I am an experienced application developer, but only recently started my journy 
in kernel drivers development. I found several posts regarding my question, but 
the (awsome and detailed) answers still left me with a desire to know more.
Since I am still a begginner, I'm aware that my question will contain 
abstractions that probably disagree with reality, so please allow me to 
apologize in advance.

I'm interested in writing a driver that will manipulate data coming from a 
microphone, in a way that will affect every user-mode application accessing it 
(for example, adding audio effects). Concretely, any user-mode app that will 
try to access the microphone (i.e recording app, webcam app etc.) will not be 
able to retrieve the original data, but only the data after modification by the 
driver.
The driver should be implemented in a way that will "unavoidable" by the 
applications, meanning applications will not be able to bypass it and gain 
direct access to data coming from a microphone.
An allegory from the networking world will be a proxy server, where outside 
entities cannot access machines that are "behind" the proxy server, but instead 
have to send requests to the server, which in turn will be able to manipulate 
responses from the machines it proxies.

Now, to my (limited) unserstanding, the current windows audio pipeline design 
is: microphone -> IHV driver -> Audio Engine -> application.
My question is, is it possible to interfere in the pipeline before the Audio 
Engine? for example, attach a "filter-like" driver between the IHV driver and 
the Audio Engine, or maybe between the microphone and the IHV driver?
I borrow the term "filter-like" from filter drivers, since to my understanding, 
this type of drivers are used to achieve results similar to what I'm looking 
for in I/O devices such as keyboards.

Thanks in advance.

Other related posts: