Bagikan melalui


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)

Lihat juga

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress