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 | 被动级别 |