[wdmaudiodev] LoadLibrary failed inside of APO

  • From: Michelle Zhou <mzhou2@xxxxxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Wed, 3 Feb 2021 14:38:23 -0800


I am new to APO development. Recently I am trying to create a capture APO
to denoise the input stream for my headset. In my APO, I called a third
party API to do the audio data processing. This third party library is a
DLL which also has dependencies of a bunch of other third party DLLs from
different authors.

In my INF file, I included all those DLLs in section [SourceDisksFiles] and
[CopySysList]. And on installation, those DLLs were copied to a subfolder
called "my_denoiser" under "C:/Windows/System32". The driver passed
Microsoft Test Signing and I noticed that all the DLLs in my package now
have a digital signature from Microsoft.

I can successfully install the driver for my headset, but the microphone
didn't work when I used it in Voice Recorder. It popped up a message box
saying "Your microphone didn't work".

I then made a debug version of my APO and watched the debug output/log in
the debugview. In my code, I have printed out debugging messages before and
after the LoadLibrary call, but only the log before LoadLibrary showed up,
not the one after LoadLibrary. It stopped right there.

Then I thought that since all those third party DLLs had the Microsoft
signature, their size increased about 10Kb. I stopped the audiodg process,
manually replaced all the dependency DLLs in Windows/system32/my_denoiser
with the original DLLs without the signatures. Restart audiodg.exe, voila!
It works now.

Now my question is: Why does LoadLibrary fail with the test signed DLLs? If
I want to install all the DLLs using an INF file, I have to include all of
them in, and when I sign my driver, they will all get the signatures. I
cannot avoid that. Did I miss something fundamental here?

Thanks a lot for any help I can get here.


Other related posts:

  • » [wdmaudiodev] LoadLibrary failed inside of APO - Michelle Zhou