IMiniport::D ataRangeIntersection 方法 (portcls.h)

DataRangeIntersection 方法确定两个数据范围的最高质量交集。

语法

NTSTATUS DataRangeIntersection(
  ULONG        PinId,
  PKSDATARANGE DataRange,
  PKSDATARANGE MatchingDataRange,
  ULONG        OutputBufferLength,
  PVOID        ResultantFormat,
  PULONG       ResultantFormatLength
);

参数

PinId

指定引脚 ID。 此参数标识要为其确定数据交集的引脚工厂。 如果筛选器包含 n 个引脚工厂,则有效的引脚 ID 范围为 0 到 n-1。

DataRange

指向 KSDATARANGE 结构的指针,该结构包含客户端在数据范围交集属性请求中提交的数据范围。

MatchingDataRange

指向 KSDATARANGE 结构的指针,该结构包含要与客户端的数据范围进行比较的微型端口驱动程序的数据范围。

OutputBufferLength

指定 ResultantFormat 参数指向的缓冲区的大小(以字节为单位)。 调用方可以将 OutputBufferLength 指定为零,以查询所需的缓冲区大小。 有关更多信息,请参见下面的“备注”部分。

ResultantFormat

指向方法写入结果格式的缓冲区的指针。 如果此参数为 NULL,则 OutputBufferLength 参数必须为零。 如果为非 NULL,则此参数必须指向足够大的缓冲区,以包含 OutputBufferLength 中指定的字节数。

ResultantFormatLength

结果格式长度的输出指针。 此参数指向调用方分配的 ULONG 变量,方法在该变量中写入结果格式的长度。 这是写入 ResultantFormat 指向的缓冲区的结果格式的大小(以字节为单位)。 此大小必须小于或等于 OutputBufferLength (,除非 OutputBufferLength 为零;请参阅以下“备注”部分) 。

返回值

如果调用成功,此方法返回包含STATUS_SUCCESS的 NTSTATUS。 如果将 OutputBufferLength 参数指定为零,该方法将返回STATUS_BUFFER_OVERFLOW。 否则,该方法将返回相应的错误代码。 下表显示了一些可能的返回状态代码。

返回代码 说明
STATUS_NO_MATCH 没有交集。
STATUS_NOT_IMPLEMENTED 将数据交集处理延迟到端口驱动程序的默认数据交集处理程序。
STATUS_BUFFER_TOO_SMALL OutputBufferLength 中指定的缓冲区长度为非零,但太小,无法容纳生成的格式。

注解

DataRangeIntersection 方法是微型端口驱动程序的数据交集处理程序。 端口驱动程序在收到数据范围交集属性请求时调用此方法, (查看KSPROPERTY_PIN_DATAINTERSECTION) ,并且请求的目标是微型端口驱动程序实现的筛选器实例上的引脚工厂。

ResultantFormat 参数指向以 KSDATAFORMAT_WAVEFORMATEX 结构开头的缓冲区。 请注意,可以扩展此结构的 WaveFormatEx 成员,以包含其他格式信息 (例如通道配置掩码) 。 有关详细信息,请参阅 WAVEFORMATEXTENSIBLE

ResultantFormat 参数是可选的,可以指定为 NULL,在这种情况下,OutputBufferLength 必须指定为零。 调用方可以通过对 DataRangeIntersection 进行初始调用来查询所需的缓冲区长度,其 OutputBufferLength 值为零。 方法通过将所需的缓冲区长度写入 ResultantFormatLength 指向的位置并返回状态代码STATUS_BUFFER_OVERFLOW进行响应。 然后,调用方可以分配所需大小的缓冲区,并在第二次调用 DataRangeIntersection 时指定此缓冲区。

如果驱动程序支持 KSPROPERTY_AUDIOSIGNALPROCESSING_MODES,则如果格式受任何音频信号处理模式支持,则此方法应返回 ResultantFormat

要求

要求
Header portcls.h
IRQL PASSIVE_LEVEL

另请参阅

IMiniPort