PBUILD_MDL_FROM_SCATTER_GATHER_LIST fungsi panggilan balik (wdm.h)
BuildMdlFromScatterGatherList rutin membangun MDL dari daftar sebar/kumpulkan yang dialokasikan oleh sistem.
Rutinitas ini dicadangkan untuk penggunaan sistem.
PBUILD_MDL_FROM_SCATTER_GATHER_LIST PbuildMdlFromScatterGatherList;
NTSTATUS PbuildMdlFromScatterGatherList(
[in] PDMA_ADAPTER DmaAdapter,
[in] PSCATTER_GATHER_LIST ScatterGather,
[in] PMDL OriginalMdl,
[out] PMDL *TargetMdl
)
{...}
[in] DmaAdapter
Penunjuk ke struktur DMA_ADAPTER yang dikembalikan oleh IoGetDmaAdapter yang mewakili adaptor bus-master atau pengontrol DMA.
[in] ScatterGather
Penunjuk ke struktur SCATTER_GATHER_LIST yang diteruskan ke rutinitas AdapterListControl driver.
[in] OriginalMdl
Arahkan ke MDL asli yang digunakan driver untuk membuat daftar sebar/kumpulkan.
[out] TargetMdl
Penunjuk ke variabel yang digunakan rutin untuk mengembalikan MDL yang dibuat untuk menahan buffer yang dijelaskan oleh daftar sebar/kumpulkan. Nilai yang dikembalikan bisa sama dengan OriginalMdl.
BuildMdlFromScatterGatherList mengembalikan salah satu kode status berikut:
Mengembalikan kode | Deskripsi |
---|---|
STATUS_SUCCESS | Operasi berhasil. |
STATUS_INVALID_PARAMETER | Parameter OriginalMdl NULL. |
STATUS_INSUFFICIENT_RESOURCES | Tidak tersedia cukup memori untuk mengalokasikan MDL baru. |
STATUS_NONE_MAPPED | Sistem telah membuat MDL baru untuk lokasi memori dalam daftar sebar/kumpulkan. (Ini hanya terjadi jika rutinitas dipanggil dua kali pada daftar sebar/kumpulkan yang sama.) |
BuildMdlFromScatterGatherList bukanlah rutinitas sistem yang dapat dipanggil langsung berdasarkan nama. Rutinitas ini hanya dapat dipanggil oleh pointer dari alamat yang dikembalikan dalam struktur DMA_OPERATIONS. Driver mendapatkan alamat rutinitas ini dengan memanggil IoGetDmaAdapter dengan anggota Versi dari parameter DeviceDescription diatur ke DEVICE_DESCRIPTION_VERSION2. Jika IoGetDmaAdapter mengembalikan NULL, rutinitas tidak tersedia di platform Anda.
Ketika driver membuat daftar sebar/kumpulkan untuk menulis ke perangkat, sistem dapat membuat salinan data yang akan ditulis, dan menggunakan salinan tersebut untuk melakukan operasi DMA. Gunakan rutinitas ini untuk mengakses lokasi memori dalam daftar sebar/kumpulkan, terlepas dari apakah lokasi tersebut adalah salinan.