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

Lihat juga

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool