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 | 被動層級 |