流指针简介

在较旧的流类模型中,微型驱动程序负责维护自己的数据流请求块 (SRB) 队列。 AVStream 通过流指针抽象提供此功能。 流指针是对特定 AVStream 数据帧的引用。

使用 以引脚为中心的处理 (大多数硬件驱动程序) 的微型驱动程序使用流指针来管理引脚队列。 每个引脚都有一个独立的数据缓冲区队列。 当数据包到达引脚 (读取或写入请求) 时,AVStream 会将数据包添加到队列,并可能调用引脚的进程调度。

使用以筛选器为中心的处理的微型驱动程序不应直接使用流指针。 有关详细信息 ,请参阅以筛选器为中心的处理

默认情况下,每个队列都有一个前导流指针。 (可选)如果指定了尾边标志,它可以具有尾随边缘流指针。 微型驱动程序可以通过调用 KsStreamPointerClone 创建新的流指针。

只能将流指针向一个方向移动:移动到较新的帧。 这称为推进流指针。

推进流指针

推进流指针时,可将其移动到较新的帧,或在其当前帧内向前推进一些字节数。 例如,微型驱动程序可以将流指针从第一帧到达推进到第二帧到达。

若要推进流指针,以引脚为中心的筛选器可以调用 KsStreamPointerAdvanceKsStreamPointerUnlock并将弹出 参数设置为 TRUE

帧引用计数

具有指向它们的流指针的帧将进行引用计数,前边缘和尾边之间的窗口中的帧也进行引用计数。

当微型驱动程序使用流指针完成时,它可以有选择地调用 KsStreamPointerSetStatusCode 来指定用于完成给定 I/O 请求数据包 (IRP) 的错误代码。 然后,微型驱动程序必须调用 KsStreamPointerDelete。 然后,AVStream 会递减已删除的流指针之前引用的帧上的引用计数。 无法删除前导流指针和尾边流指针。