默认数据交集处理程序

适配器的专有数据交集处理程序(微型端口驱动程序对象的 IMiniport::DataRangeIntersection 方法)可以通过返回 STATUS_NOT_IMPLEMENTED 状态代码来拒绝执行数据交集检查。 在这种情况下,端口驱动程序的默认数据交集处理程序代表适配器执行检查。

可以将适配器驱动程序的最小数据交集处理程序实现为 DataRangeIntersection 方法,该方法通过返回 STATUS_NOT_IMPLEMENTED 来拒绝所有数据交集请求。

端口驱动程序默认处理程序的当前实现在可以处理的数据范围类型方面受到限制:

  • 仅 PCM 数据格式

  • 仅单声道和立体声音频流

支持非 PCM 或多声道格式的适配器驱动程序应实现专有数据交集处理程序,而不是依赖端口驱动程序来处理这些格式的数据交集。

此外,默认处理程序仅支持可由 KSDATAFORMAT_DSOUNDKSDATAFORMAT_WAVEFORMATEX 结构指定的音频格式。 它不支持包含 WAVEFORMATEXTENSIBLE 结构的任何格式,例如,为某种格式指定具有不止两个声道的声道掩码时就需要该结构。

从两个数据范围的交集中选择通用格式时,端口驱动程序的默认处理程序会始终在每个参数的交集区域中选择最高值:

  • 例如,如果交集跨越多个有效的采样频率(例如 11、22 和 44 kHz),则默认处理程序将选取最高频率。

  • 例如,如果交集跨越多个有效每样本位数值(例如 8、16 和 32 位),则默认处理程序会选取最大值。

  • 如果交集同时跨越单声道和立体声格式,则默认处理程序会选取立体声。

如果默认处理程序选择的格式不尽如人意,当 SysAudio 尝试采用该格式创建接收器引脚时,适配器驱动程序可以选择通过使 NewStream 调用失败来拒绝该格式(例如,请参阅 IMiniportWavePci::NewStream)。 如果调用失败,SysAudio 将不会继续查找数据交集。 相反,它将尝试通过循环访问系统筛选器(如 KMixer)支持的 PCM 格式列表来创建连接,直到找到适配器的接收器引脚也支持的格式为止。 格式的质量越高,在列表中的排序位置越靠上。 和以前一样,适配器通过使这些格式的 NewStream 调用失败来拒绝列表中不令人满意的格式。