Compartir a través de


C30029

Advertencia: Llamada a una función de asignación de memoria que solicita memoria ejecutable.

Esta advertencia indica que se está usando una función que se ha prohibido y tiene un reemplazo más sólido o seguro. Este error específico indica el uso de una API que asigna solo un grupo no paginado ejecutable.

Comentarios

Esto solo debe usarse si se requiere memoria ejecutable. Consulte Grupo no paginado no ejecutable (NX) para obtener más información. No hay parámetros que pueda proporcionar para cambiar este comportamiento. La única manera de corregir este problema es usar una función alternativa que permita la asignación de memoria del grupo no paginado no ejecutable. Una lista de todas las funciones prohibidas que cubre este error y los reemplazos recomendados se pueden encontrar después del ejemplo siguiente.

Nombre del análisis de código: BANNED_MEM_ALLOCATION_NOTYPE

Ejemplo

El código siguiente genera esta advertencia. Este problema se deriva del uso de MmMapIoSpace:

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

El código siguiente evita esta advertencia reemplazando MmMapIoSpace por MmMapIoSpace:

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

Funciones prohibidas

API prohibida Sustituciones Justificación y notas
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() Según el tipo de caché, SpecifyCache se puede usar de una manera que la limite a la memoria no ejecutable. Sin embargo, el uso de NodeMemory lo garantizará. Consulte C30030, subsección "Para ver defectos relacionados con tipos de caché" para obtener más información.