C30029
Aviso: Chamado de uma função de alocação de memória que solicita memória executável
O aviso indica que está sendo usada uma função que foi banida e que tem uma substituição mais robusta ou segura. Esse erro específico indica o uso de uma API que aloca somente o pool executável não paginado.
Comentários
Ele só deverá ser usado se a memória executável for necessária. Consulte Pool executável (NX) não paginado para obter mais informações sobre isso. Não há parâmetros que você possa fornecer que vão alterar esse comportamento. A única maneira de corrigir esse problema é usar uma função alternativa que permita a alocação de memória de pool não executável não paginado. Uma lista de todas as funções proibidas cobertas por esse erro e as substituições recomendadas está disponível após o exemplo a seguir.
Nome da análise de código: BANNED_MEM_ALLOCATION_NOTYPE
Exemplo
O código a seguir gera esse aviso. O problema decorre do uso de MmMapIoSpace
:
MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);
O código a seguir evita esse aviso substituindo MmMapIoSpace
por MmMapIoSpace
:
MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);
Funções proibidas
API proibida | Substituição(ões) | Justificativa/Notas |
---|---|---|
MmMapIoSpace() |
MmMapIoSpaceEx() |
|
MmAllocateContiguousMemorySpecifyCache() |
MmAllocateContiguousNodeMemory() |
Dependendo do tipo de cache, SpecifyCache pode ser usado de uma forma que o limite à memória não executável. No entanto, o uso de NodeMemory garantirá isso. Consulte C30030, subseção "Para defeitos envolvendo tipos de cache" para obter mais informações sobre isso. |