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。
注解
驱动程序可以从在调用 WdfRequestMarkCancelableEx 时提供的 EvtRequestCancel 事件回调函数调用 WdfDmaTransactionCancel。 有关演示如何执行此操作的代码示例,请参阅 WdfDmaTransactionStopSystemTransfer。
驱动程序还可以从 EvtIoCanceledOnQueue 事件回调函数调用 WdfDmaTransactionCancel。
只有在 调用 WdfDmaTransactionExecute 之后,但在 WdfDmaTransactionExecute 方法启动 DMA 分配之前,才可成功调用 WdfDmaTransactionCancel 。 有关详细信息,请参阅 取消 DMA 事务。
驱动程序必须在调用 WdfDmaTransactionInitialize 之后调用 WdfDmaTransactionCancel,但在调用 WdfDmaTransactionRelease 或 WdfObjectDelete 之前才能删除事务对象。
在框架调用 EvtProgramDma 或 EvtReserveDma 后,请勿调用 WdfDmaTransactionCancel。
在调用 WdfDmaTransactionCancel 之前,驱动程序必须请求使用 DMA 版本 3。 若要选择 DMA 版本 3,请将 WDF_DMA_ENABLER_CONFIG 的 WdmDmaVersionOverride 成员设置为 3。
如果驱动程序在从 DMA 版本 2 启用程序分配的事务上调用 WdfDmaTransactionCancel ,框架将生成验证程序错误, WdfDmaTransactionCancel 返回 FALSE。 在这种情况下,不会尝试取消事务。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 |
目标平台 | 通用 |
最低 KMDF 版本 | 1.11 |
标头 | wdfdmatransaction.h (包括 Wdf.h) |
Library | Wdf01000.sys (请参阅框架库版本控制.) |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) |