[仅适用于 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。
驱动程序必须在调用 WdfDmaTransactionCancel之前请求使用 DMA 版本 3。 若要选择 DMA 版本 3,请将 WdmDmaVersionOverrideWDF_DMA_ENABLER_CONFIG 成员设置为 3。
如果驱动程序对从 DMA 版本 2 启用器分配的事务调用 WdfDmaTransactionCancel,则框架将生成验证程序错误,WdfDmaTransactionCancel 返回 FALSE。 在这种情况下,不会尝试取消事务。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8 |
目标平台 | 普遍 |
最低 KMDF 版本 | 1.11 |
标头 | wdfdmatransaction.h (包括 Wdf.h) |
图书馆 | Wdf01000.sys(请参阅框架库版本控制。 |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate(kmdf) |