WdfDmaTransactionDmaCompletedFinal 函数 (wdfdmatransaction.h)

[仅适用于 KMDF]

WdfDmaTransactionDmaCompletedFinal 方法通知框架设备的 DMA 传输操作已完成且运行不足,并提供已完成传输的长度。

语法

BOOLEAN WdfDmaTransactionDmaCompletedFinal(
  [in]  WDFDMATRANSACTION DmaTransaction,
  [in]  size_t            FinalTransferredLength,
  [out] NTSTATUS          *Status
);

参数

[in] DmaTransaction

驱动程序从上一次调用 WdfDmaTransactionCreate 获取的 DMA 事务对象的句柄。

[in] FinalTransferredLength

设备传输的字节数。

[out] Status

指向接收 DMA 传输状态的位置的指针。 有关详细信息,请参阅 WdfDmaTransactionDmaCompleted 的“备注”部分。

返回值

如果驱动程序提供无效的输入参数,则 WdfDmaTransactionDmaCompletedFinal 返回 FALSE。 否则, WdfDmaTransactionDmaCompletedFinal 始终返回 TRUE,指示框架不会尝试为 DmaTransaction 参数指定的 DMA 事务传输更多字节。

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

驱动程序通常从其 EvtInterruptDpc 回调中调用 WdfDmaTransactionDmaCompletedFinal。 系统模式 DMA 设备的驱动程序可以从 EvtDmaTransactionDmaTransferComplete 事件回调函数中调用 WdfDmaTransactionDmaCompletedFinal

PLX9x5x 示例中,驱动程序从其 EvtProgramDma 回调函数调用 WdfDmaTransactionDmaCompletedFinal

WdfDmaTransactionDmaCompletedFinal 方法的行为与 WdfDmaTransactionDmaCompleted 相同,不同之处在于,如果硬件报告运行不足的情况,驱动程序通常会调用 WdfDmaTransactionDmaCompletedFinal。 运行不足的情况意味着硬件无法传输为上次 DMA 传输指定的所有字节。 调用 WdfDmaTransactionDmaCompletedFinal 会阻止框架为指定的 DMA 事务启动任何其他 DMA 传输。

当驱动程序调用 WdfDmaTransactionDmaCompletedFinal 时,驱动程序将提供已传输的字节数。 返回值始终为 TRUE,因为框架不会尝试为指定的事务再传输任何字节。

有关完成 DMA 传输的详细信息,请参阅 完成 DMA 传输

示例

下面的代码示例通知框架设备的 DMA 传输操作已完成,但条件不足。

BOOLEAN  success;
NTSTATUS  status;

success = WdfDmaTransactionDmaCompletedFinal(
                                             DmaTransaction,
                                             transferLength,
                                             &status
                                             );

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
标头 wdfdmatransaction.h (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库 Versioning.)
IRQL <=DISPATCH_LEVEL
DDI 符合性规则 DriverCreate (kmdf) KmdfIrql (kmdf) KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf)

另请参阅

WdfDmaTransactionCreate

WdfDmaTransactionDmaCompleted

WdfDmaTransactionDmaCompletedWithLength