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

另請參閱

IMiniportWaveRTOutputStream