C30029

Peringatan: Memanggil fungsi alokasi memori yang meminta memori yang dapat dieksekusi

Peringatan ini menunjukkan bahwa fungsi sedang digunakan yang telah dilarang dan memiliki penggantian yang lebih kuat atau aman. Kesalahan spesifik ini menunjukkan penggunaan API yang hanya mengalokasikan kumpulan yang tidak dapat dieksekusi.

Keterangan

Ini hanya boleh digunakan jika memori yang dapat dieksekusi diperlukan. Lihat Kumpulan Tanpa Eksekusi (NX) Nonpaged untuk informasi selengkapnya tentang hal ini. Tidak ada parameter yang dapat Anda berikan yang akan mengubah perilaku ini. Satu-satunya cara untuk memperbaiki masalah ini adalah dengan menggunakan fungsi alternatif yang memungkinkan alokasi memori kumpulan yang tidak dapat dieksekusi. Daftar semua fungsi terlarang yang dicakup oleh kesalahan ini dan penggantian yang direkomendasikan dapat ditemukan setelah contoh berikut.

Nama analisis kode: BANNED_MEM_ALLOCATION_NOTYPE

Contoh

Kode berikut menghasilkan peringatan ini. Masalah ini berasal dari penggunaan MmMapIoSpace:

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

Kode berikut menghindari peringatan ini dengan mengganti MmMapIoSpace dengan MmMapIoSpace:

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

Fungsi Terlarang

API Terlarang Penggantian Alasan / Catatan
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() Bergantung pada jenis cache, SpecifyCache dapat digunakan dengan cara yang membatasinya ke memori yang tidak dapat dieksekusi. Namun, menggunakan NodeMemory akan memastikan hal ini. Lihat C30030, sub bagian 'Untuk cacat yang melibatkan jenis cache' untuk informasi selengkapnya tentang hal ini.