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 鏈結。 如需詳細資訊,請參閱 GetScatterGatherListEx、BuildScatterGatherListEx 或 MapTransferEx 中的 Mdl 參數描述。
[in] MapRegisterBase
先前為配接器物件配置的對應緩存器句柄。
[in] Offset
相對於要用於排清作業之 MDL 鏈結開頭的起始位移。 將此參數設定為做為 DMA 傳輸起始位移的值。 如需詳細資訊,請參閱 GetScatterGatherListEx、BuildScatterGatherListEx 或 MapTransferEx 中的 Offset 參數描述。
[in] Length
要排清的數據位元組數目。 將此參數設定為做為 DMA 傳輸之傳輸長度的值。 如需詳細資訊,請參閱 GetScatterGatherListEx、BuildScatterGatherListEx 或 MapTransferEx 中的 Length 參數描述。
[in] WriteToDevice
DMA 傳輸的方向。 將此參數設定為做為 DMA 傳輸之傳輸方向的值。 如需詳細資訊,請參閱 GetScatterGatherListEx、BuildScatterGatherListEx 或 MapTransferEx 中的 WriteToDevice 參數描述。
傳回值
FlushAdapterBuffersEx 如果呼叫成功,則會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列狀態代碼。
傳回碼 | Description |
---|---|
|
例程失敗,因為呼叫端所傳遞的參數值無效。 |
備註
FlushAdapterBuffersEx 不是可直接依名稱呼叫的系統例程。此例程只能由DMA_OPERATIONS結構中傳回之位址的指標呼叫 驅動程式會呼叫IoGetDmaAdapter,並將DeviceDescription參數的Version成員設定為 DEVICE_DESCRIPTION_VERSION3,以取得此例程的位址。 如果 IoGetDmaAdapter 傳回 NULL,您的平台上無法使用例程。
FlushAdapterBuffersEx 可在未實作硬體強制快取共通的硬體平臺中啟用處理器快取共通, (總線探查) 。 此外,針對系統 DMA 傳輸, FlushAdapterBuffersEx 會排清任何保留在系統 DMA 控制器內部快取中的數據。
起始散佈/收集 DMA 傳輸的驅動程式,必須確保傳輸完成之後,所有傳輸的數據都會從快取排清。 在驅動程式完成要求 DMA 傳輸的 IRP 之前,驅動程式應該呼叫 FlushAdapterBuffersEx,並在驅動程式釋放地圖緩存器之前呼叫 FlushAdapterBuffersEx 。 如需詳細資訊,請參閱 在 DMA 作業期間排清快取的數據。
FlushAdapterBuffersEx 是 FlushAdapterBuffers 例程的擴充版本。 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 |