PFLUSH_ADAPTER_BUFFERS_EX回调函数 (wdm.h)

FlushAdapterBuffersEx 例程在系统 DMA 控制器或总线主设备执行的 DMA 传输操作结束时刷新数据缓存中保留的任何数据。

语法

PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;

NTSTATUS PflushAdapterBuffersEx(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] ULONGLONG Offset,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

参数

[in] DmaAdapter

指向 DMA_ADAPTER 结构的指针。 此结构是表示驱动程序的系统 DMA 通道或总线主设备的适配器对象。 调用方从对 IoGetDmaAdapter 例程的上一次调用中获取了此指针。

[in] Mdl

指向 MDL 链的指针,该链描述要刷新的内存页。 将此参数设置为指向用于 DMA 传输的 MDL 链。 有关详细信息,请参阅 GetScatterGatherListExBuildScatterGatherListExMapTransferExMdl 参数的说明。

[in] MapRegisterBase

以前为适配器对象分配的映射寄存器的句柄。

[in] Offset

相对于要用于刷新操作的 MDL 链的起始偏移量。 将此参数设置为用作 DMA 传输起始偏移量的值。 有关详细信息,请参阅 GetScatterGatherListExBuildScatterGatherListExMapTransferExOffset 参数的说明。

[in] Length

要刷新的数据的字节数。 将此参数设置为用作 DMA 传输的传输长度的值。 有关详细信息,请参阅 GetScatterGatherListExBuildScatterGatherListExMapTransferExLength 参数的说明。

[in] WriteToDevice

DMA 传输的方向。 将此参数设置为用作 DMA 传输的传输方向的值。 有关详细信息,请参阅 GetScatterGatherListEx、BuildScatterGatherListExMapTransferExWriteToDevice 参数的说明。

返回值

如果调用成功,FlushAdapterBuffersEx 将返回STATUS_SUCCESS。 可能的错误返回值包括以下状态代码。

返回代码 说明
STATUS_INVALID_PARAMETERS
由于调用方传递的参数值无效,例程失败。

注解

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

FlushAdapterBuffersEx 在未实现硬件强制缓存一致性的硬件平台中启用处理器缓存一致性, (总线窥探) 。 此外,对于系统 DMA 传输, FlushAdapterBuffersEx 会刷新系统 DMA 控制器的内部缓存中保留的任何数据。

启动散点/收集 DMA 传输的驱动程序必须确保传输完成后从缓存刷新所有传输的数据。 驱动程序应在驱动程序完成请求 DMA 传输的 IRP 之前以及驱动程序释放映射寄存器之前调用 FlushAdapterBuffersEx 。 有关详细信息,请参阅 在 DMA 操作期间刷新缓存数据

FlushAdapterBuffersExFlushAdapterBuffers 例程的扩展版本。 FlushAdapterBuffersEx 可以在一次调用中刷新整个散点/收集列表。 相比之下,若要使用 FlushAdapterBuffers 刷新散点/收集列表,需要对 MDL 链中的每个 MDL 单独调用。

FlushAdapterBuffersEx 可以代替 FlushAdapterBuffers 来刷新缓冲区,以便进行单数据包 DMA 传输。 在这种情况下,Mdl 参数指向的 MDL 链仅包含一个 MDL。 以这种方式使用 FlushAdapterBuffersEx 的好处是调用方可以指定 MDL 中的偏移量。

如果在 DMA 传输操作完成之前调用 FlushAdapterBuffersEx ,则此调用可能会在传输完成之前取消传输,或者可能导致未定义的行为。

要求

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

另请参阅

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

GetScatterGatherListEx

IoGetDmaAdapter

MapTransferEx