Please correct me if I'm wrong, but I've been watching some videos from past Microsoft conferences on sound development. On the latest one from Larry Osterman, he mentions new sound features in [I believe] Windows 7 that his team worked on.
One of the features was [the name is my interpretation] "device hot swap". Let's say your application is playing back using the "windows default sound playback" endpoint, and that at this moment is a set of USB Headphones. Suddenly you disconnect the headphones. Up to Windows 7, your application would crash [if you didn't foresee that test scenario]. In Windows 7 [and here's the hook to the original subject], IF you're using the Windows default playback device, Windows will gracefully and automatically swap the output stream to the new default, which could be the speakers.
What I'm trying to get to, is that I'm trying to fit the WAVE_MAPPER device into a class where it is not supposed to be. Maybe, conceptually speaking, the WAVE_MAPPER despite having the same capability of audio stream input and output, should be treated as an exception.
I'll try to be more concrete. In my application, I have a list of audio devices, and each audio device has a list of audio lines. Audio devices have properties such as VID and PID that are easily discoverable through the SetupAPI and can be related to audio lines via winmm's waveInMessage. WAVE_MAPPER doesn't follow that logic and I was trying to make it do.
So instead of trying to relate the WAVE_MAPPER with its underlying audio device, I will just treat it as what it is: the default audio device.