PFLUSH_ADAPTER_BUFFERS fungsi panggilan balik (wdm.h)
FlushAdapterBuffers rutin membersihkan data apa pun yang tersisa di cache internal pengontrol DMA sistem atau dalam cache internal adaptor master bus di akhir operasi transfer DMA.
Sintaks
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
)
{...}
Parameter
[in] DmaAdapter
Penunjuk ke struktur DMA_ADAPTER yang dikembalikan oleh IoGetDmaAdapter yang mewakili adaptor bus-master atau pengontrol DMA.
[in] Mdl
Arahkan ke MDL yang menjelaskan buffer yang sebelumnya diteruskan dalam panggilan driver ke MapTransfer.
[in] MapRegisterBase
Menentukan daftar peta yang dialokasikan untuk operasi DMA. Sistem meneruskan nilai ini ke rutinitas AdapterControl driver.
[in] CurrentVa
Penunjuk ke alamat virtual saat ini di buffer, yang dijelaskan oleh Mdl, tempat operasi I/O terjadi. Nilai ini harus sama dengan nilai CurrentVa awal yang diteruskan ke MapTransfer.
[in] Length
Menentukan panjang, dalam byte, dari buffer.
[in] WriteToDevice
Menentukan arah operasi transfer DMA: TRUE untuk transfer dari buffer dalam memori sistem ke perangkat driver.
Nilai kembali
FlushAdapterBuffers mengembalikan TRUE jika ada data yang tersisa di cache internal adaptor master bus atau pengontrol DMA telah berhasil dibersihkan ke memori sistem atau keluar ke perangkat.
Keterangan
FlushAdapterBuffers bukanlah rutinitas sistem yang dapat dipanggil langsung berdasarkan nama. Rutinitas ini hanya dapat dipanggil oleh penunjuk dari alamat yang dikembalikan dalam struktur DMA_OPERATIONS . Driver mendapatkan alamat rutinitas ini dengan memanggil IoGetDmaAdapter.
Untuk memastikan bahwa transfer DMA selesai, setiap driver yang melakukan operasi DMA harus memanggil FlushAdapterBuffers sebelum menyelesaikan IRP yang meminta transfer DMA dan sebelum membebaskan daftar peta.
Driver bisa mendapatkan CurrentVa awal untuk awal transfer DMA berbasis paket dengan memanggil MmGetMdlVirtualAddress. Namun, nilai yang dikembalikan adalah indeks ke dalam Mdl, bukan alamat virtual yang valid. Jika driver harus membagi permintaan transfer besar menjadi lebih dari satu operasi DMA, driver harus memperbarui CurrentVa dan Length untuk setiap operasi DMA.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Desktop |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
Aturan kepatuhan DDI | IrqlDispatch(wdm) |