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) |