IMiniportWaveRTOutputStream::SetWritePacket 方法 (portcls.h)

SetWritePacket 會通知驅動程式 OS 已將有效的數據寫入 WaveRT 緩衝區。

語法

NTSTATUS SetWritePacket(
  [in] ULONG PacketNumber,
  [in] DWORD Flags,
  [in] ULONG EosPacketLength
);

參數

[in] PacketNumber

OS 寫入 WaveRT 緩衝區的封包數目。

[in] Flags

與封包或數據流相關的其他屬性。

KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM - 此旗標表示此封包代表數據流的結尾。

[in] EosPacketLength

如果在 Flags 中指定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM,則為 EOS 封包的長度。 零是有效的值。 如果未在 Flags 中指定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM,則會忽略此參數。

傳回值

SetWritePacket 如果呼叫成功,則會傳回STATUS_SUCCESS。 否則,函式會傳回適當的錯誤狀態代碼。

STATUS_DATA_LATE_ERROR – 如果 OS 通過已傳輸或目前正在傳輸的封包號碼,驅動程式會傳回此錯誤。 在此情況下,發生問題狀況。 驅動程式可以選擇性地使用封包的某些數據,或繼續播放先前寫入此封包號碼的數據。

STATUS_DATA_OVERRUN – 如果 OS 通過大於可以儲存在 WaveRT 緩衝區中的封包編號,驅動程式會傳回此錯誤。 在此情況下,發生問題狀況。 驅動程式可以選擇性地忽略封包中的數據。

STATUS_INVALID_DEVICE_STATE – 如果 OS 在先前設定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM旗標之後呼叫此例程,驅動程式會傳回此錯誤。

STATUS_INVALID_PARAMETER – 如果驅動程序發現任何其他參數無效,除了其他錯誤狀態的特定案例之外,驅動程式會傳回此錯誤。 這包括上述未特別定義的旗標值。

備註

OS 呼叫此例程之後,驅動程式可以選擇性地使用提供的資訊來優化硬體傳輸。 例如,驅動程式可能會優化 DMA 傳輸,或程式硬體停止在指定封包結尾的傳輸,以防 OS 不會再次呼叫此例程,通知驅動程式另一個封包。 這可以減輕下溢的可聽見效果,例如引進可聽見的間距,而不是重複迴圈緩衝區。 不過,驅動程式仍然必須以實際率增加其內部封包計數器和訊號通知事件。

除了 OS 指定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM旗標時,封包大小是 WaveRT 緩衝區大小除以傳遞至 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 的 NotificationCount。

視硬體功能而定,如果指定了KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM旗標,則驅動程式可能會無聲填滿一部分的 WaveRT 緩衝區,以在硬體傳輸超過 EOS 位置的數據時,於 EOS 封包之後填滿部分。

規格需求

需求
最低支援的用戶端 可在 Windows 10 和更新版本中使用。
目標平台 Windows
標頭 portcls.h
IRQL 被動層級

另請參閱

IMiniportWaveRTOutputStream