Compartilhar via


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.