[wdmaudiodev] Re: APO, filter driver, virtual audio device and certification

  • From: Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 19 Nov 2015 16:16:50 +0000

There is no supported way to add audio effects to all applications and
hardware. You can tie yourself to particular hardware by writing a driver, or
you can tie yourself to a particular app by writing a custom audio effect and
using the MediaExtensions API.

manipulating FxProperties

Don't do this. The internal structure of the effects property store is not
documented, and manipulating it directly is not supported. When we change the
internal implementation of the IPropertyStore interface, your solution will


Don't disable protected AudioDg - you'll break apps which rely on PlayReady DRM.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Arthur Lepp
Sent: Thursday, November 19, 2015 5:33 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] APO, filter driver, virtual audio device and

Hi all,

I'm trying to add effects to the captured data of a microphone before the data
reaches any user mode application, i.e. removing certain noise.
This shall work independently of the underlying hardware and drivers on Windows
7 and above. If there is a microphone device enabled, then it shall work for it.

I think there are three approaches:
1. writing an APO and installing it by manipulating certain FxProperties
entries of the microphone device in the Windows registry.
2. writing a pass through filter driver somewhere around ksthunk, attach to
microphone device and intercept certain IoDeviceControl calls containing
IOCTL_KS_* control codes.
3. writing a virtual audio device driver, probably based on msvad or sysvad,
with only one microphone device. The user has to configure this one as the
default capture device. On opening the virtual device with whichever
application the driver calls the real hardware microphone device, captures its
data and adds the effects.

I accomplished the first approach with the APO, which is the easiest and most
reliable one. The second approach is working for CyclicWave drivers, but fails
with WaveRT based drivers because of virtual addresses in user mode. Maybe I'm
just doing something wrong, but it also somehow feels wrong.

The third approach seems very well possible, but is a lot of work, because of
the gigantic msvad and sysvad samples and the way of calling the real hardware
microphone device, which presumably has to be done by kernel streaming. The
benefit of this approach is, that the driver can be WHQL certified.

So my questions to this subject:
1. What do you consider the best approach? - Are there other approaches?
2. As of what I saw in the HCK and read about WHQL certification it is not
possible to certify a standalone APO and there aren't any audio filter driver
tests. Is this correct, or is it somehow possible to certify one of these? -
Probably by submitting them as a package with the general Microsoft HD Audio
driver class?

And my last question in case it is not possible to certify the APO:
If I circumvent the DRM related restrictions by setting
"DisableProtectedAudioDG=0" on installation of the APO, users would be able to
install this APO as Administrator and benefit of the effects after reboot. In
the Microsoft support forum someone asked a similar question and got the
response, that it is neither the intended nor the supported way of doing it.

What if I still release my APO to the public with a notice, that DRM related
content cannot be accessed while the APO is active. Am I somehow defying any
laws and can be accused or charged by Microsoft or is it the responsibility of
the user?

Thanks for your help,

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx


Other related posts: