WdfDmaTransactionCancel 函数 (wdfdmatransaction.h)

[仅适用于 KMDF]

WdfDmaTransactionCancel 方法尝试取消正在等待映射寄存器分配的 DMA 事务。

语法

BOOLEAN WdfDmaTransactionCancel(
  [in] WDFDMATRANSACTION DmaTransaction
);

参数

[in] DmaTransaction

表示正在取消的事务的 DMA 事务对象的句柄。 此事务必须已由驱动程序初始化。

返回值

如果框架成功取消映射寄存器分配,WdfDmaTransactionCancel 将返回 TRUE。 在这种情况下,不会完成任何传输,在重新初始化事务之前,框架不会对事务执行额外的 DMA 回调。

如果另一个线程已在处理此事务,或者驱动程序尚未调用 WdfDmaTransactionExecute,则该方法返回 FALSE。 在第一种情况下,框架当前正在调用或将调用 EvtProgramDmaEvtReserveDma。 此时,指定系统模式 DMA 配置文件的驱动程序可能会调用 WdfDmaTransactionStopSystemTransfer

如果使用从 DMA 版本 2 启用程序分配的事务调用,则方法也会返回 FALSE。

注解

驱动程序可以从在调用 WdfRequestMarkCancelableEx 时提供的 EvtRequestCancel 事件回调函数调用 WdfDmaTransactionCancel 有关演示如何执行此操作的代码示例,请参阅 WdfDmaTransactionStopSystemTransfer

驱动程序还可以从 EvtIoCanceledOnQueue 事件回调函数调用 WdfDmaTransactionCancel

只有在 调用 WdfDmaTransactionExecute 之后,但在 WdfDmaTransactionExecute 方法启动 DMA 分配之前,才可成功调用 WdfDmaTransactionCancel 。 有关详细信息,请参阅 取消 DMA 事务

驱动程序必须在调用 WdfDmaTransactionInitialize 之后调用 WdfDmaTransactionCancel,但在调用 WdfDmaTransactionReleaseWdfObjectDelete 之前才能删除事务对象。

在框架调用 EvtProgramDmaEvtReserveDma 后,请勿调用 WdfDmaTransactionCancel

在调用 WdfDmaTransactionCancel 之前,驱动程序必须请求使用 DMA 版本 3。 若要选择 DMA 版本 3,请将 WDF_DMA_ENABLER_CONFIGWdmDmaVersionOverride 成员设置为 3。

如果驱动程序在从 DMA 版本 2 启用程序分配的事务上调用 WdfDmaTransactionCancel ,框架将生成验证程序错误, WdfDmaTransactionCancel 返回 FALSE。 在这种情况下,不会尝试取消事务。

要求

要求
最低受支持的客户端 Windows 8
目标平台 通用
最低 KMDF 版本 1.11
标头 wdfdmatransaction.h (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库版本控制.)
IRQL <=DISPATCH_LEVEL
DDI 符合性规则 DriverCreate (kmdf)

另请参阅

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer