Fungsi IoAllocateMdl (wdm.h)
Rutinitas IoAllocateMdl mengalokasikan daftar deskriptor memori (MDL) yang cukup besar untuk memetakan buffer, mengingat alamat dan panjang awal buffer. Secara opsional, rutinitas ini mengaitkan MDL dengan IRP.
Sintaks
PMDL IoAllocateMdl(
[in, optional] __drv_aliasesMem PVOID VirtualAddress,
[in] ULONG Length,
[in] BOOLEAN SecondaryBuffer,
[in] BOOLEAN ChargeQuota,
[in, out, optional] PIRP Irp
);
Parameter
[in, optional] VirtualAddress
Penunjuk ke alamat virtual dasar buffer yang akan dijelaskan MDL.
[in] Length
Menentukan panjang, dalam byte, dari buffer yang akan dijelaskan MDL. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
[in] SecondaryBuffer
Menunjukkan apakah buffer adalah buffer primer atau sekunder. Parameter ini menentukan bagaimana MDL akan ditautkan ke IRP. Semua buffer kecuali buffer pertama yang dijelaskan oleh MDL dalam IRP dianggap sebagai buffer sekunder. Bidang ini harus FALSE jika tidak ada IRP yang terkait dengan MDL. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
[in] ChargeQuota
Dicadangkan untuk penggunaan sistem. Driver harus mengatur parameter ini ke FALSE.
[in, out, optional] Irp
Penunjuk ke IRP yang akan dikaitkan dengan MDL. Jika penunjuk Irp bukan NULL, MDL yang dialokasikan dikaitkan dengan daftar MDL IRP yang ditentukan, sesuai dengan nilai SecondaryBuffer.
Mengembalikan nilai
IoAllocateMdl mengembalikan pointer ke MDL, atau, jika MDL tidak dapat dialokasikan, MDL mengembalikan NULL.
Keterangan
IoAllocateMdl dapat digunakan oleh driver yang perlu memecah buffer menjadi beberapa bagian, masing-masing dipetakan oleh MDL terpisah, atau untuk memetakan buffer yang dialokasikan driver. Driver harus memanggil MmBuildMdlForNonPagedPool dengan MDL yang dialokasikan oleh panggilan ini untuk menyiapkan MDL yang menjelaskan buffer yang dialokasikan driver di kumpulan yang tidak di-patahkan.
Parameter Panjang menentukan ukuran buffer yang akan dijelaskan oleh MDL. Di Windows Server 2003, Windows XP, dan Windows 2000, ukuran buffer maksimum, dalam byte, yang dapat dialokasikan rutinitas ini adalah PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR). Di Windows Vista dan Windows Server 2008, ukuran buffer maksimum adalah (2 gigabyte - PAGE_SIZE). Mulai Windows 7 dan Windows Server 2008 R2, ukuran buffer maksimum adalah (4 gigabyte - PAGE_SIZE).
Jika parameter SecondaryBufferfalse, rutin memperbarui Irp-MdlAddress > untuk menunjuk ke MDL baru. Jika SecondaryBufferTRUE, rutinitas menambahkan MDL ke akhir rantai MDL yang dirujuk Irp-MdlAddress>.
Untuk informasi selengkapnya tentang MDL, lihat Menggunakan MDL.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |