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