PCANCEL_MAPPED_TRANSFER回调函数 (wdm.h)

CancelMappedTransfer 例程取消当前映射到适配器的系统 DMA 传输。

语法

PCANCEL_MAPPED_TRANSFER PcancelMappedTransfer;

NTSTATUS PcancelMappedTransfer(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PVOID DmaTransferContext
)
{...}

参数

[in] DmaAdapter

指向 DMA_ADAPTER 结构的指针。 此结构是等待挂起的 DMA 传输完成的适配器对象。 调用方从对 IoGetDmaAdapter 例程的上一次调用中获取了此指针,调用方将此指针传递给为 DMA 传输设置映射寄存器的 MapTransferEx 调用。

[in] DmaTransferContext

指向 DMA 传输上下文的指针。 此参数值必须是传递给请求适配器通道分配的 AllocateAdapterChannelEx 调用的同一 DMA 传输上下文。

返回值

如果调用成功,CancelMappedTransfer 将返回STATUS_SUCCESS。 否则,它将返回相应的错误代码。

注解

CancelMappedTransfer 不是可直接按名称调用的系统例程。此例程只能由DMA_OPERATIONS结构中返回的地址中的指针调用 驱动程序通过调用 IoGetDmaAdapterDeviceDescription 参数的 Version 成员设置为 DEVICE_DESCRIPTION_VERSION3)来获取此例程的地址。 如果 IoGetDmaAdapter 返回 NULL,则例程在平台上不可用。

此例程将关联的传输上下文标记为已取消,从而阻止在此上下文下进行任何进一步的传输。 取消传输后,会调用其完成例程,但传输状态可能设置为 DmaCancelled

无论系统 DMA 传输是取消还是完成,都必须始终调用 FlushAdapterBuffersFlushAdapterBuffersEx 例程,以刷新在 DMA 传输操作结束时保留在系统 DMA 控制器内部缓存中的任何数据。 取消或完成传输后, 必须先进行 FlushAdapterBuffersXxx 调用,然后才能释放 DMA 通道或调用 MapTransferEx 例程,以便为新的 DMA 传输设置映射寄存器。

要求

要求
最低受支持的客户端 从Windows 8开始可用。
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL <= DISPATCH_LEVEL

另请参阅

AllocateAdapterChannelEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

FlushAdapterBuffersEx

InitializeDmaTransferContext

IoGetDmaAdapter

MapTransferEx