PFLUSH_ADAPTER_BUFFERS回调函数 (wdm.h)
FlushAdapterBuffers 例程刷新系统 DMA 控制器的内部缓存或总线主适配器的内部缓存中剩余的任何数据(在 DMA 传输作结束时)。
语法
PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;
BOOLEAN PflushAdapterBuffers(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] PVOID MapRegisterBase,
[in] PVOID CurrentVa,
[in] ULONG Length,
[in] BOOLEAN WriteToDevice
)
{...}
参数
[in] DmaAdapter
指向 IoGetDmaAdapter 返回的 DMA_ADAPTER 结构的指针,该结构表示总线主适配器或 DMA 控制器。
[in] Mdl
指向描述之前在驱动程序调用中传递给 MapTransfer的缓冲区的 MDL 的指针。
[in] MapRegisterBase
指定为 DMA作分配的映射寄存器。 系统将此值传递给驱动程序的 AdapterControl 例程。
[in] CurrentVa
指向缓冲区中当前虚拟地址的指针,由 Mdl描述,其中发生了 I/O作。 此值必须与 传递给 mapTransfer的初始 CurrentVa 值相同。
[in] Length
指定缓冲区的长度(以字节为单位)。
[in] WriteToDevice
指定 DMA 传输作的方向:TRUE 从系统内存中的缓冲区传输到驱动程序的设备。
返回值
FlushAdapterBuffers 如果 DMA 控制器或总线主适配器的内部缓存中剩余的任何数据已成功刷新到系统内存或传出设备,则 返回 TRUE。
言论
FlushAdapterBuffers 不是可以直接按名称调用的系统例程。 此例程只能通过从 DMA_OPERATIONS 结构中返回的地址的指针进行调用。 驱动程序通过调用 IoGetDmaAdapter获取此例程的地址。
为了确保 DMA 传输已完成,执行 DMA作的每个驱动程序都必须调用 FlushAdapterBuffers,然后才能完成请求 DMA 传输的 IRP,然后释放映射寄存器。
驱动程序可以通过调用 mmGetMdlVirtualAddress来获取基于数据包的 DMA 传输的初始 CurrentVa。 但是,返回的值是 Mdl中的索引,而不是有效的虚拟地址。 如果驱动程序必须将大型传输请求拆分为多个 DMA作,则必须为每个 DMA作更新 CurrentVa 和 Length。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | IrqlDispatch(wdm) |