C30029
Avertissement : Appel à une fonction d’allocation de mémoire qui demande de la mémoire exécutable.
Cet avertissement indique qu’une fonction est utilisée alors qu’elle a été interdite et qu’il existe une version plus robuste ou plus sécurisée. Cette erreur spécifique indique l’utilisation d’une API qui alloue uniquement de la mémoire non paginée exécutable.
Notes
Cela ne devrait être utilisé que si de la mémoire exécutable est nécessaire. Veuillez consulter No-Execute (NX) Nonpaged Pool pour plus d’informations à ce sujet. Il n’existe aucun paramètre que vous pouvez fournir pour changer ce comportement. La seule façon de corriger ce problème est d’utiliser une fonction alternative qui permet l’allocation de mémoire non paginée non exécutable. Une liste de toutes les fonctions interdites couvertes par cette erreur et les remplacements recommandés se trouve après l’exemple suivant.
Nom de l’analyse de code : BANNED_MEM_ALLOCATION_NOTYPE
Exemple
Le code suivant génère cet avertissement. Ce problème provient de l’utilisation de MmMapIoSpace
:
MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);
Le code suivant évite cet avertissement en remplaçant MmMapIoSpace
par MmMapIoSpace
:
MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);
Fonctions interdites
API interdite | Remplacement(s) | Justification / Notes |
---|---|---|
MmMapIoSpace() |
MmMapIoSpaceEx() |
|
MmAllocateContiguousMemorySpecifyCache() |
MmAllocateContiguousNodeMemory() |
En fonction du type de cache, SpecifyCache peut être utilisé de manière à le limiter à de la mémoire non exécutable. Cependant, l’utilisation de NodeMemory assurera cela. Veuillez consulter C30030, sous-section « Pour les défauts impliquant des types de cache » pour plus d’informations à ce sujet. |