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结构中返回的地址中的指针调用 。 驱动程序通过调用 IoGetDmaAdapter(DeviceDescription 参数的 Version 成员设置为 DEVICE_DESCRIPTION_VERSION3)来获取此例程的地址。 如果 IoGetDmaAdapter 返回 NULL,则例程在平台上不可用。
此例程将关联的传输上下文标记为已取消,从而阻止在此上下文下进行任何进一步的传输。 取消传输后,会调用其完成例程,但传输状态可能设置为 DmaCancelled。
无论系统 DMA 传输是取消还是完成,都必须始终调用 FlushAdapterBuffers 或 FlushAdapterBuffersEx 例程,以刷新在 DMA 传输操作结束时保留在系统 DMA 控制器内部缓存中的任何数据。 取消或完成传输后, 必须先进行 FlushAdapterBuffersXxx 调用,然后才能释放 DMA 通道或调用 MapTransferEx 例程,以便为新的 DMA 传输设置映射寄存器。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |