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. |