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。

注解

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

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

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

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

在框架调用 EvtProgramDmaEvtReserveDma后,请勿调用 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)

另请参阅

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer