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 为零;请参阅以下备注部分)。

返回值

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

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

言论

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

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

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

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

要求

要求 价值
标头 portcls.h
IRQL PASSIVE_LEVEL

另请参阅

IMiniPort