Fungsi ExAllocatePoolZero (wdm.h)

Perhatian

Microsoft mengetahui masalah dengan ExAllocatePoolZero yang dapat menyebabkan alokasi tidak dinol pada Windows 10, versi 1909. Masalah ini telah diperbaiki dalam refresh keamanan WDK untuk Windows 10, versi 2004 dan Enterprise WDK (EWDK) untuk Windows 10, versi 2004 pada 16 Desember 2020. Untuk informasi tentang mengunduh WDK terbaru, lihat Mengunduh Windows Driver Kit (WDK).

Rutinitas ini adalah pembungkus untuk dan opsi penggantian yang direkomendasikan untuk ExAllocatePoolWithTag.

ExAllocatePoolZero mengalokasikan memori kumpulan dari jenis yang ditentukan dan mengembalikan pointer ke blok yang dialokasikan. Ini identik dengan ExAllocatePoolWithTag kecuali nol menginisialisasi memori yang dialokasikan.

Sintaks

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Parameter

PoolType

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

Anda dapat memodifikasi nilai enumerasi dengan melakukan bitwise-OR dengan bendera POOL_RAISE_IF_ALLOCATION_FAILURE yang ditentukan dalam wdm.h. Bendera ini menyebabkan pengecualian dinaikkan jika permintaan tidak dapat dipenuhi. Penggunaan bendera ini tidak disarankan karena mahal.

Demikian pula, Anda dapat memodifikasi nilai PoolType dengan bitwise-ORing nilai ini dengan bendera POOL_COLD_ALLOCATION (juga didefinisikan dalam wdm.h) 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.

NumberOfBytes

Jumlah byte yang akan dialokasikan.

Tag

Tag kumpulan yang digunakan untuk memori yang dialokasikan. Tentukan tag kumpulan sebagai literal karakter bukan nol dari satu hingga empat karakter yang dibatasi oleh tanda kutip tunggal (misalnya, Tag1). String biasanya ditentukan dalam urutan terbalik (misalnya, 1gaT). Setiap karakter ASCII dalam tag harus berupa nilai dalam rentang 0x20 (spasi) hingga 0x7E (tilde). Setiap jalur kode alokasi harus menggunakan tag kumpulan unik untuk membantu debugger dan verifier mengidentifikasi jalur kode.

Menampilkan nilai

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

Keterangan

Rutinitas ini digunakan untuk alokasi kumpulan umum memori.

Untuk menjalankan versi Windows sebelum Windows 10 versi 2004, driver harus menentukan POOL_ZERO_DOWN_LEVEL_SUPPORT dan memanggil ExInitializeDriverRuntime sebelum memanggil fungsi ini.

Satu-satunya perbedaan antara fungsi ini dan ExAllocatePoolWithTag adalah memori nol diinisialisasi. Jika ini tidak diinginkan, gunakan ExAllocatePoolUninitialized sebagai gantinya, yang merupakan pembungkus untuk ExAllocatePoolWithTag.

Driver hanya boleh mengakses memori dalam rentang byte yang dialokasikannya. Mengakses memori di luar rentang ini dapat merusak kumpulan dan menyebabkan sistem lumpuh.

Lihat bagian Keterangan dari ExAllocatePoolWithTag untuk panduan tambahan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Memerlukan WDK untuk Windows 10, versi 2004. Menargetkan Windows 7 dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan)
Aturan kepatuhan DDI CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

Lihat juga

ExAllocatePoolUninitialized