Fungsi ExAllocatePoolWithQuota (wdm.h)
Peringatan
Rutinitas ExAllocatePoolWithQuota sudah usang dan tidak digunakan lagi dalam Windows 10, versi 2004 dan 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 ExAllocatePoolQuotaZero.
ExAllocatePoolWithQuota mengalokasikan memori kumpulan, mengisi kuota terhadap proses saat ini.
Sintaks
PVOID ExAllocatePoolWithQuota(
[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 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
ExAllocatePoolWithQuota mengembalikan pointer ke kumpulan yang dialokasikan.
Jika permintaan tidak dapat dipenuhi, ExAllocatePoolWithQuota menimbulkan pengecualian.
Keterangan
Rutinitas ini disebut oleh driver tingkat tertinggi yang mengalokasikan memori untuk memenuhi permintaan dalam konteks proses yang awalnya membuat permintaan I/O. Driver tingkat bawah memanggil ExAllocatePoolWithTag sebagai gantinya.
Jika NumberOfBytes PAGE_SIZE atau lebih besar, buffer yang diratakan halaman dialokasikan. Kuota tidak dibebankan ke proses untuk alokasi PAGE_SIZE atau lebih besar.
Alokasi memori kurang dari PAGE_SIZE dialokasikan dalam halaman dan tidak melewati batas halaman. Alokasi memori PAGE_SIZE atau kurang belum tentu selaras dengan halaman tetapi selaras dengan batas 8-byte dalam sistem 32-bit dan ke batas 16-byte dalam sistem 64-bit.
Jangan atur NumberOfBytes = 0. Hindari alokasi panjang nol karena mereka membuang ruang header kumpulan 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 mengatur 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 ExAllocatePoolWithQuota tidak diinisialisasi. Driver mode-kernel harus terlebih dahulu nol memori ini jika akan membuatnya terlihat oleh perangkat lunak mode pengguna (untuk menghindari bocornya konten yang berpotensi istimewa).
Penelepon ExAllocatePoolWithQuota harus dijalankan di IRQL <= DISPATCH_LEVEL. Penelepon yang dijalankan 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 kumpulan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Kedaluwarsa. Rutinitas ini hanya diekspor untuk biner driver yang ada. Gunakan ExAllocatePoolWithQuotaTag sebagai gantinya. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (lihat bagian Keterangan) |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf) |