WdfDmaTransactionCancel 函式 (wdfdmatransaction.h)
[僅適用於 KMDF]
WdfDmaTransactionCancel 方法會嘗試取消正在等候地圖緩存器配置的 DMA 交易。
語法
BOOLEAN WdfDmaTransactionCancel(
[in] WDFDMATRANSACTION DmaTransaction
);
參數
[in] DmaTransaction
DMA 交易物件的句柄,表示正在取消的交易。 此交易必須由驅動程式初始化。
傳回值
如果架構成功取消對應緩存器配置,WdfDmaTransactionCancel 會傳回 TRUE。 在此情況下,不會完成傳輸,而且架構在重新初始化之前,不會對交易進行額外的 DMA 回呼。
如果另一個線程已經處理此交易,或者驅動程式尚未呼叫 WdfDmaTransactionExecute,則此方法會傳回 FALSE。 在第一個案例中,架構目前正在呼叫或呼叫 EvtProgramDma 或 EvtReserveDma。 此時,指定系統模式 DMA 配置檔的驅動程式可能會呼叫 WdfDmaTransactionStopSystemTransfer。
如果使用從 DMA 第 2 版啟用程式設定的交易呼叫,此方法也會傳回 FALSE。
備註
驅動程式可能會從 EvtRequestCancel 事件回呼函式呼叫 WdfDmaTransactionCancel,該函式會在呼叫 WdfRequestMarkCancelableEx 中提供。 如需示範如何執行此動作的程式代碼範例,請參閱 WdfDmaTransactionStopSystemTransfer。
驅動程式也可能從 EvtIoCanceledOnQueue 事件回呼函式呼叫 WdfDmaTransactionCancel。
只有在呼叫 WdfDmaTransactionCancel 之後呼叫 WdfDmaTransactionExecute,但在 WdfDmaTransactionExecute 方法啟動 DMA 配置之前,才會成功取消。 如需詳細資訊,請參閱 取消 DMA 交易。
驅動程式必須在呼叫 WdfDmaTransactionInitialize 之後呼叫 WdfDmaTransactionCancel,但在呼叫 WdfDmaTransactionRelease 或 WdfObjectDelete 以刪除交易物件之前。
在架構呼叫 EvtProgramDma 或 EvtReserveDma 之後,請勿呼叫 WdfDmaTransactionCancel。
驅動程序必須先要求使用 DMA 第 3 版,才能呼叫 WdfDmaTransactionCancel。 若要選取 DMA 第 3 版,請將 WDF_DMA_ENABLER_CONFIG 的 WdmDmaVersionOverride 成員設定為 3。
如果驅動程式在從 DMA 第 2 版啟用程式配置的交易上呼叫 WdfDmaTransactionCancel ,架構會產生驗證器錯誤, 而 WdfDmaTransactionCancel 會傳回 FALSE。 在此情況下,不會嘗試取消交易。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 |
目標平台 | Universal |
最小 KMDF 版本 | 1.11 |
標頭 | wdfdmatransaction.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱 Framework Library Versioning.) |
IRQL | <=DISPATCH_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) |