IMiniportWaveRTInputStream::GetReadPacket 方法 (portcls.h)
傳回所擷取數據的相關信息。
語法
NTSTATUS GetReadPacket(
[out] ULONG *PacketNumber,
[out] DWORD *Flags,
[out] ULONG64 *PerformanceCounterValue,
[out] BOOL *MoreData
);
參數
[out] PacketNumber
傳回相對於擷取開始的封包編號。
[out] Flags
保留供未來使用。 必須設定為 0。
[out] PerformanceCounterValue
傳回性能計數器值,對應至封包中第一個樣本的取樣瞬間。
[out] MoreData
如果立即備妥更多數據,則會傳回 TRUE 。 OS 可以選擇性地在處理封包后再次呼叫此例程,以取得下一個封包資訊。 如果驅動程式傳回 FALSE,則擷取會實時運作。
傳回值
GetReadPacket
如果呼叫成功,會傳回STATUS_SUCCESS。 否則,函式會傳回適當的錯誤狀態代碼。
STATUS_DEVICE_NOT_READY - 如果沒有任何可用的新資料,驅動程式會傳回此錯誤。
備註
從 WaveRT 緩衝區讀取擷取的音訊數據之前,OS 會呼叫此例程以取得可用數據的相關信息。
封包編號會識別數據流內的封包。 當數據流處於KSSTATE_STOP時,這會重設為零。 數位會隨著每個擷取的緩衝區前進。 從封包編號中,OS 可以在 WaveRT 緩衝區內衍生封包位置,也可以衍生封包相對於數據流開頭的數據流位置。
封包大小是 WaveRT 緩衝區大小除以傳遞至 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 的 NotificationCount。 OS 可以隨時呼叫此例程。 在正常作業中,OS 會在驅動程式設定緩衝區通知事件或先前的呼叫針對MoreData傳回 true 之後呼叫這個例程。 當OS呼叫此例程時,驅動程式可能會假設操作系統已完成讀取所有先前的封包。 如果硬體已擷取足夠的數據,驅動程式可能會立即將下一個完整封包高載至 WaveRT 緩衝區,並再次設定緩衝區事件。在擷取溢位 (當OS未快速讀取數據時,) 音訊驅動程式可能會卸除或覆寫某些音訊數據。 音訊驅動程式會先卸除或覆寫最舊的數據,即使OS可能沒有讀取數據,音訊驅動程式仍可能會繼續前進其內部封包計數器。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows 10 和更新版本中使用。 |
目標平台 | Windows |
標頭 | portcls.h |
IRQL | 被動層級 |