Fungsi ExAllocatePoolWithQuotaTag (wdm.h)
Rutinitas ExAllocatePoolWithQuotaTag mengalokasikan memori kumpulan, mengisi daya kuota terhadap proses saat ini.
Peringatan
ExAllocatePoolWithQuotaTag tidak digunakan lagi di Windows 10, versi 2004 dan telah digantikan oleh ExAllocatePool2. Untuk informasi selengkapnya, lihat Memperbarui panggilan ExAllocatePool yang tidak digunakan lagi ke ExAllocatePool2 dan ExAllocatePool3.
Sintaks
PVOID ExAllocatePoolWithQuotaTag(
[in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes,
[in] ULONG Tag
);
Parameter
[in] PoolType
Menentukan jenis memori kumpulan yang akan dialokasikan. Untuk deskripsi jenis memori kumpulan yang tersedia, lihat POOL_TYPE.
Anda dapat mengubah nilai PoolType dengan bitwise-ORing nilai ini dengan bendera POOL_QUOTA_FAIL_INSTEAD_OF_RAISE. Bendera ini menyebabkan rutinitas mengembalikan nilai NULL jika permintaan tidak dapat dipenuhi.
Demikian pula, Anda dapat memodifikasi nilai PoolType dengan bitwise-ORing nilai ini 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 didukung di Windows XP dan versi sistem operasi Windows yang lebih baru.
[in] NumberOfBytes
Menentukan jumlah byte yang akan dialokasikan.
[in] Tag
Menentukan tag kumpulan untuk memori yang dialokasikan. Untuk informasi selengkapnya, lihat parameter TagExAllocatePoolWithTag.
Nilai kembali
ExAllocatePoolWithQuotaTag mengembalikan pointer ke kumpulan yang dialokasikan.
Jika permintaan tidak dapat dipenuhi, ExAllocatePoolWithQuotaTag menimbulkan pengecualian kecuali POOL_QUOTA_FAIL_INSTEAD_OF_RAISE ditentukan. Menggunakan POOL_QUOTA_FAIL_INSTEAD_OF_RAISE lebih disukai karena alasan performa.
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. Alokasi memori PAGE_SIZE atau kurang dialokasikan dalam halaman dan 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.
Sistem mengaitkan tag kumpulan dengan memori yang dialokasikan. Alat pemrograman, seperti WinDbg, dapat menampilkan tag kumpulan yang terkait dengan setiap buffer yang dialokasikan. Nilai Tag biasanya ditampilkan dalam urutan terbalik. Misalnya, jika penelepon meneruskan 'Fred' sebagai Tag, itu akan muncul sebagai 'derF' jika kumpulan dicadangkan atau saat melacak penggunaan kumpulan di debugger.
Buffer yang dialokasikan dapat dikosongkan dengan ExFreePool atau ExFreePoolWithTag.
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.
Dalam arsitektur multiprosesor akses memori non-seragam (NUMA), ExAllocatePoolWithQuotaTag mencoba mengalokasikan memori yang lokal untuk prosesor yang memanggil ExAllocatePoolWithQuotaTag. Jika tidak ada memori lokal yang tersedia, ExAllocatePoolWithQuotaTag mengalokasikan memori terdekat yang tersedia.
Memori yang dialokasikan ExAllocatePoolWithQuotaTag 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 ExAllocatePoolWithQuotaTag 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 |
---|---|
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (lihat bagian Keterangan) |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf) |