MSVAD虚拟驱动程序丢失audio数据包在MS Windows 10 1703呈现

我在WDK 8.0的MSVAD的基础上编写了一个虚拟audio驱动程序。 司机工作在MS Win XP,Vista,8.x和10。 但是在Windows Creators Update(1703)开始之后,我注意到一个声音开始丢失,并且落后于我的驱动程序。

我做了一些研究,并检测到以下内容:驱动程序复制的audio数据less于我的预期。 例如:

CMiniportWaveCyclicStreamMSVAD :: CopyTo()收到1920个字节,CMiniportWaveCyclicStreamMSVAD :: CopyFrom()在输出中发送较less的audio数据(1764)。 为什么????

请任何想法!

我只为我的项目写一个解决方案。 无论如何,这个发现的错误可以帮助你修复你的驱动程序。

原因:

我的音频通道总是有一个带WAVEFORMATEX参数的流:nSamplesPerSec = 44100和nAvgBytesPerSec = 176400.在MS Win10 1703中,MSVAD驱动程序更改流的输入参数:nSamplesPerSec = 48000和nAvgBytesPerSec = 192000.但输出参数保持不变: nSamplesPerSec = 44100和nAvgBytesPerSec = 176400.所以驱动程序接收到1920个字节并发出1764个字节。 因此,司机每10mS失去156个字节的声音。

解:

强制驱动程序选择源的参数:nSamplesPerSec = 44100和nAvgBytesPerSec = 176400。打开文件kshelper.cpp并找到函数GetWaveFormatEx()。 在return pWfx;之前return pWfx; 添加检查:

 if (pWfx->nSamplesPerSec != 44100) { DPF_ENTER(("[%s] - FAIL",__FUNCTION__)); return NULL; } else { DPF_ENTER(("[%s]-ok",__FUNCTION__)); return pWfx; } 

我希望MS修复下一个WDK中的错误。