資料流程指標和 IRP 取消
如果框架有參考它的鎖定資料流程指標,則無法取消對應至此畫面的 IRP。 請參閱 鎖定和解除鎖定資料流程指標。
下表列出迷你驅動程式可用來支援 IRP 取消的技術。 取消策略應該以迷你驅動程式的串流存取需求為基礎,如最左邊的資料行所述。
如有需要。。 | 執行方式 | 註解 |
---|---|---|
在單一存取點簡短存取串流資料 |
呼叫 KsPinGetLeadingEdgeStreamPointer ,並將 State 參數設定為 KSSTREAM_POINTER_STATE_LOCKED。 然後在處理完成後立即呼叫 KsStreamPointerUnlock 或 KsStreamPointerAdvanceOffsetsAndUnlock 。 |
除非執行緒在取得指標和解除鎖定指標之間封鎖,否則提供快速的取消回應。 |
無限期的存取時間長度,但可以在取消回呼的內容中放棄宣告 |
呼叫 KsStreamPointerClone 以複製鎖定的資料流程指標, (通常是前置邊緣) 、解除鎖定,以及回應 CancelCallback。 回呼會與保留佇列的微調鎖定一起發生,因此DISPATCH_LEVEL。 因此,廠商提供的 CancelCallback 常式無法執行佇列操作或呼叫取得 mutex 的函式。 相反地,在回呼常式中,迷你驅動程式會驗證稍後不會存取相關聯的資料,然後呼叫 KsStreamPointerDelete。 |
可能更難以實作,但通常會在有效率的存取和快速回應取消之間提供最佳平衡。 |
定期存取框架,並可容許存取之間框架的距離 |
維護已解除鎖定的複製品,並呼叫 KsStreamPointerLock 以在存取時鎖定它。 如果取消框架,下一次嘗試鎖定資料流程指標會失敗,而迷你驅動程式可以呼叫 KsStreamPointerDelete。 |
如同第一個選項,取消回應是串流指標鎖定多久的函式。 |
無限期的存取時間長度,而且無法放棄宣告以回應回呼 |
維護鎖定的複製資料流程指標,以隨時防止取消。 若要建立複製資料流程指標,請呼叫 KsStreamPointerClone。 然後呼叫 KsStreamPointerLock 和 KsStreamPointerUnlock 來鎖定或解除鎖定複製品。 |
取消的回應性可能不佳。 請考慮搭配這項技術使用 資料流程指標逾 時。 |
如果框架有參考它的資料流程指標,迷你驅動程式可以呼叫 KsStreamPointerGetIrp 來存取對應至此畫面的 IRP。 若要擷取與框架相關聯的 MDL) (記憶體描述項清單,請呼叫 KsStreamPointerGetMdl。