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
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.