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 ejecutado (NX) para obtener más información sobre esto. No hay parámetros que pueda proporcionar que cambien 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 cubiertas por 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 Reemplazos Racionalización/Notas
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() En función del tipo de caché, SpecifyCache se puede usar de forma que lo limite a la memoria no ejecutable. Sin embargo, el uso de NodeMemory garantizará esto. Consulte C30030, subsección "Para ver defectos relacionados con tipos de caché" para obtener más información sobre esto.