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 正在进行中,OS 应写入数据包 6。 如果 WaveRT 缓冲区的通知计数为 2,则数据包 6 将位于 WaveRT 缓冲区中的偏移量 0(因为 6 模 2 为 0,数据包大小为 0 的 0 倍)。

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

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

要求

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

另请参阅

IMiniportWaveRTOutputStream