IMiniportWaveRTOutputStream::GetPacketCount 方法 (portcls.h)
GetPacketCount 會傳回 (1 個型) 完全從 WaveRT 緩衝區傳輸至硬體的封包計數。
語法
NTSTATUS GetPacketCount(
[out] ULONG *pPacketCount
);
參數
[out] pPacketCount
pPacketCount 會傳回從 WaveRT 緩衝區完全傳送到硬體的封包數目。
傳回值
GetPacketCount
如果呼叫成功,則會傳回STATUS_SUCCESS。 否則,函式會傳回適當的錯誤狀態代碼。
備註
從封包計數中,OS 可以衍生寫入 WaveRT 緩衝區之封包的數據流位置。 OS 也可以衍生下一個封包的 WaveRT 緩衝區位置,以在 WaveRT 緩衝區內寫入。 針對 WaveRT 驅動程式,驅動程式會發出單一通知事件,因為它會從 WaveRT 緩衝區的每個封包傳輸數據。 因此,事件本身無法指出正在傳輸 WaveRT 緩衝區內的封包。 在正常作業中,這不是問題,但在流向案例中,藉由查詢 OS 可以判斷下一個要寫入的封包計數,更容易達成錯誤。
傳回的 PacketCount 表示 (1 個型) 完全從 WaveRT 緩衝區傳輸至硬體的封包計數。 如此一來,OS 就可以判斷目前正在傳輸之封包的 0 個數目,並確保它會在封包前面寫入。 例如,如果封包計數是5,則5個封包已完全傳輸。 也就是說,封包 0-4 已完全傳輸。 因此,封包 5 正在進行中,而且 OS 應該寫入封包 6。 如果 WaveRT 緩衝區的通知計數為 2,則封包 6 會在 WaveRT 緩衝區內的位移 0 (,因為 6 模數 2 為 0,封包大小為 0) 。
OS 可以隨時取得這個屬性。 不過,它通常只會定期取得這個屬性,或在驅動程式傳回數據流錯誤 (STATUS_DATA_LATE_ERROR 之後,從 SetWritePacket () STATUS_DATA_OVERRUN) ,以便與驅動程式重新同步處理。
當數據流處於KSSTATE_STOP時,驅動程式應該將封包計數重設為 0。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows 10 和更新版本中使用。 |
目標平台 | Windows |
標頭 | portcls.h |
IRQL | 被動層級 |