Bagikan melalui


Fungsi ExAllocatePool (wdm.h)

Peringatan

ExAllocatePool sudah usang dan tidak digunakan lagi dalam Windows 10, versi 2004. Ini telah digantikan oleh ExAllocatePool2. Untuk informasi selengkapnya, lihat Memperbarui panggilan ExAllocatePool yang tidak digunakan lagi ke ExAllocatePool2 dan ExAllocatePool3.

Saat mengembangkan driver untuk versi Windows sebelum Windows 10, versi 2004, gunakan ExAllocatePoolZero.

ExAllocatePool mengalokasikan memori kumpulan dari jenis yang ditentukan dan mengembalikan pointer ke blok yang dialokasikan.

Sintaks

PVOID ExAllocatePool(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

Parameter

[in] PoolType

Menentukan jenis memori kumpulan yang akan dialokasikan. Untuk deskripsi jenis memori kumpulan yang tersedia, lihat POOL_TYPE.

Anda dapat memodifikasi PoolType dengan menggunakan bitwise ATAU dengan bendera POOL_COLD_ALLOCATION sebagai petunjuk ke kernel untuk mengalokasikan memori dari halaman yang kemungkinan akan di-page out dengan cepat. Untuk mengurangi jumlah memori kumpulan penduduk sebanyak mungkin, Anda tidak boleh sering mereferensikan alokasi ini. Bendera POOL_COLD_ALLOCATION hanya nasihat dan tersedia untuk Windows XP dan versi sistem operasi Windows yang lebih baru.

[in] NumberOfBytes

Menentukan jumlah byte yang akan dialokasikan.

Nilai kembali

ExAllocatePool mengembalikan NULL jika tidak ada cukup memori di kumpulan gratis untuk memenuhi permintaan. Jika tidak, rutinitas mengembalikan pointer ke memori yang dialokasikan.

Keterangan

Rutinitas ini digunakan untuk alokasi kumpulan umum memori.

Jika NumberOfBytes PAGE_SIZE atau lebih besar, buffer yang selaras dengan halaman dialokasikan. Alokasi memori PAGE_SIZE atau kurang tidak melewati batas halaman. Alokasi memori kurang dari PAGE_SIZE belum tentu selaras dengan halaman tetapi selaras dengan batas 8-byte dalam sistem 32-bit dan ke batas 16-byte dalam sistem 64-bit.

Alokasi yang berhasil meminta NumberOfBytes< PAGE_SIZE kumpulan yang tidak di-halaman memberi pemanggil jumlah byte memori yang diminta. Jika permintaan alokasi untuk NumberOfBytes> PAGE_SIZE berhasil dan NumberOfBytes bukan kelipatan PAGE_SIZE yang tepat, halaman terakhir dalam alokasi berisi byte yang bukan bagian dari alokasi pemanggil. Jika memungkinkan, alokator kumpulan menggunakan byte ini. Untuk menghindari data rusak milik komponen mode kernel lainnya, driver hanya boleh mengakses alamat penyimpanan yang telah dialokasikan secara eksplisit.

Jika ExAllocatePool mengembalikan NULL, pemanggil harus mengembalikan nilai NTSTATUS STATUS_INSUFFICIENT_RESOURCES atau harus menunda pemrosesan ke titik waktu lain.

Pemanggil ExAllocatePool harus dieksekusi di IRQL <= DISPATCH_LEVEL. Penelepon yang mengeksekusi di DISPATCH_LEVEL harus menentukan nilai XxxNonPaged untuk PoolType. Penelepon yang mengeksekusi di IRQL <= APC_LEVEL dapat menentukan nilai POOL_TYPE apa pun, tetapi IRQL dan lingkungan juga harus dipertimbangkan untuk menentukan jenis halaman.

Jangan atur NumberOfBytes = 0. Hindari alokasi panjang nol karena ruang header kumpulan pemborosan dan, dalam banyak kasus, menunjukkan potensi masalah validasi dalam kode panggilan. Untuk alasan ini, Driver Verifier menandai alokasi tersebut sebagai kemungkinan kesalahan.

Sistem secara otomatis menetapkan objek peristiwa standar tertentu ketika jumlah kumpulan (paged atau nonpaged) tinggi atau rendah. Driver dapat menunggu peristiwa ini untuk menyempurnakan penggunaan kumpulan mereka. Untuk informasi selengkapnya, lihat Objek Peristiwa Standar.

Memori yang dialokasikan ExAllocatePool tidak diinisialisasi. Driver mode kernel harus terlebih dahulu nol memori ini jika akan membuatnya terlihat oleh perangkat lunak mode pengguna (untuk menghindari kebocoran konten yang berpotensi istimewa).

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Kedaluwarsa. Rutinitas ini hanya diekspor untuk biner yang ada. Gunakan ExAllocatePoolWithTag sebagai gantinya.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h, Smcnt.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan)
Aturan kepatuhan DDI CheckDeviceObjectFlags(wdm), HwStorPortProhibitedDDIs(storport), IrqlExAllocatePool(wdm), PowerDownAllocate(wdm), PowerUpFail(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm)

Lihat juga

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE