Попробуйте использовать WAVE_MAPPER:
#include <windows.h>
#include <stdio.h>
void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) {
printf("Device opened for recording!\n");
}
int main(void) {
HWAVEIN hwi;
WAVEFORMATEX wfx;
WAVEINCAPS wic;
int sampleRate = 44100;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 2;
wfx.nSamplesPerSec = sampleRate;
wfx.nAvgBytesPerSec = sampleRate * 2;
wfx.wBitsPerSample = 16;
wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
wfx.cbSize = 0;
//Get capabilities using WAVE_MAPPER (ID for Microsoft default assigned device)
waveInOpen(&hwi, WAVE_MAPPER, &wfx, (DWORD) &waveInProc, 0, CALLBACK_FUNCTION);
waveInGetDevCaps(WAVE_MAPPER, &wic, sizeof(wic));
//Use the received manufacturer id to get the device's real name
waveInGetDevCaps(wic.wMid, &wic, sizeof(wic));
printf("%s\n", wic.szPname);
return 1;
}