共用方式為


資料流程指標和 IRP 取消

如果框架有參考它的鎖定資料流程指標,則無法取消對應至此畫面的 IRP。 請參閱 鎖定和解除鎖定資料流程指標

下表列出迷你驅動程式可用來支援 IRP 取消的技術。 取消策略應該以迷你驅動程式的串流存取需求為基礎,如最左邊的資料行所述。

如有需要。。 執行方式 註解

在單一存取點簡短存取串流資料

呼叫 KsPinGetLeadingEdgeStreamPointer ,並將 State 參數設定為 KSSTREAM_POINTER_STATE_LOCKED。 然後在處理完成後立即呼叫 KsStreamPointerUnlockKsStreamPointerAdvanceOffsetsAndUnlock

除非執行緒在取得指標和解除鎖定指標之間封鎖,否則提供快速的取消回應。

無限期的存取時間長度,但可以在取消回呼的內容中放棄宣告

呼叫 KsStreamPointerClone 以複製鎖定的資料流程指標, (通常是前置邊緣) 、解除鎖定,以及回應 CancelCallback。 回呼會與保留佇列的微調鎖定一起發生,因此DISPATCH_LEVEL。 因此,廠商提供的 CancelCallback 常式無法執行佇列操作或呼叫取得 mutex 的函式。 相反地,在回呼常式中,迷你驅動程式會驗證稍後不會存取相關聯的資料,然後呼叫 KsStreamPointerDelete

可能更難以實作,但通常會在有效率的存取和快速回應取消之間提供最佳平衡。

定期存取框架,並可容許存取之間框架的距離

維護已解除鎖定的複製品,並呼叫 KsStreamPointerLock 以在存取時鎖定它。 如果取消框架,下一次嘗試鎖定資料流程指標會失敗,而迷你驅動程式可以呼叫 KsStreamPointerDelete

如同第一個選項,取消回應是串流指標鎖定多久的函式。

無限期的存取時間長度,而且無法放棄宣告以回應回呼

維護鎖定的複製資料流程指標,以隨時防止取消。 若要建立複製資料流程指標,請呼叫 KsStreamPointerClone。 然後呼叫 KsStreamPointerLockKsStreamPointerUnlock 來鎖定或解除鎖定複製品。

取消的回應性可能不佳。 請考慮搭配這項技術使用 資料流程指標逾 時。

如果框架有參考它的資料流程指標,迷你驅動程式可以呼叫 KsStreamPointerGetIrp 來存取對應至此畫面的 IRP。 若要擷取與框架相關聯的 MDL) (記憶體描述項清單,請呼叫 KsStreamPointerGetMdl