共用方式為


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