IMiniportWaveRTOutputStream::GetPacketCount 方法 (portcls.h)

GetPacketCount 返回从 WaveRT 缓冲区完全传输到硬件的 (基于 1 的数据包计数) 计数。

语法

NTSTATUS GetPacketCount(
  [out] ULONG *pPacketCount
);

参数

[out] pPacketCount

pPacketCount 返回从 WaveRT 缓冲区完全传输到硬件的数据包数。

返回值

GetPacketCount 如果调用成功,则返回STATUS_SUCCESS。 否则,函数将返回相应的错误状态代码。

注解

从数据包计数中,OS 可以派生写入 WaveRT 缓冲区的数据包的流位置。 OS 还可以派生要在 WaveRT 缓冲区内写入的下一个数据包的 WaveRT 缓冲区位置。 对于 WaveRT 驱动程序,驱动程序在从 WaveRT 缓冲区的每个数据包传输数据时,向单个通知事件发出信号。 因此,事件本身无法指示要传输 WaveRT 缓冲区中的哪个数据包。 在正常操作中,这不是一个问题,但在下流情况下,通过查询 OS 可以确定接下来要写入哪个数据包的数据包计数,更容易实现更正。

返回的 PacketCount 指示从 WaveRT 缓冲区完全传输到硬件的 (1) 数据包计数。 由此,OS 可以确定当前正在传输的数据包的从 0 开始的数目,并确保它在该数据包之前写入。 例如,如果数据包计数为 5,则 5 个数据包已完全传输。 也就是说,数据包 0-4 已完全传输。 因此,数据包 5 正在进行中,操作系统应写入数据包 6。 如果 WaveRT 缓冲区的通知计数为 2,则数据包 6 在 WaveRT 缓冲区 (中的偏移量为 0,因为 6 模 2 为 0,数据包大小为 0) 。

OS 可能随时获取此属性。 但是,它通常只定期或在驱动程序返回数据流错误 (STATUS_DATA_LATE_ERROR 之后获取此属性,STATUS_DATA_OVERRUN) 从 SetWritePacket () ,以便与驱动程序重新同步。

当流处于KSSTATE_STOP时,驱动程序应将数据包计数重置为 0。

要求

要求
最低受支持的客户端 在 Windows 10 及更高版本中可用。
目标平台 Windows
标头 portcls.h
IRQL 被动级别

另请参阅

IMiniportWaveRTOutputStream