Hi! Let me begin this by saying that this is my first foray into NT drivers and kernel land. Please forgive any ignorance I may present in the following.
The problem to solve is the following:
I want to connect a Windows application to a Windows-native (but fake) Audio Device. From its perspective, it should look like it is connecting to any plain old set of speakers & microphone. This application can not be modified for this purpose.
In a different application in user-space (the “bridge” app) I want to copy data to the microphone WAVE and copy data from the speaker WAVE used by that application. In other words, the bridge (in conjunction with a VAD driver) is supposed to mock a real audio device to play data from and record data to user space. This is supposed to happen at regular intervals, dictated by the bridge (i.e. it it supposed to be the clock source).
Now all my research and tinkering has led me to the conclusion that this will most likely require a KMDF driver. I have looked at the official Microsoft SYSVAD example and tried to implement the data exchange with IOCTL, sent from the bridge.
Is going with WaveRT the right choice here? It does DMA transfers with the ToneGenerator and SaveData, but I can not figure out how to trigger these DMAs with IOCTL to buffers in user-space. Is that even possible? Do I register IoDeviceControl in the WaveRTStream and then RtlCopyMemory between the kernel and user buffers?
Any guide would be very welcome.
Best,
Fabian