Condividi tramite


C30029

Avviso: Chiamata di una funzione di allocazione della memoria che richiede memoria eseguibile

Questo avviso indica che viene usata una funzione che è stata vietata e che ha una sostituzione più affidabile o sicura. Questo errore specifico indica l'uso di un'API che alloca solo il pool eseguibile non di paging.

Osservazioni:

Questa operazione deve essere usata solo se è necessaria la memoria eseguibile. Per altre informazioni, vedere No-Execute (NX) Nonpaged Pool (NX). Non è possibile specificare parametri che modificheranno questo comportamento. L'unico modo per risolvere questo problema consiste nell'usare una funzione alternativa che consente l'allocazione di memoria del pool non eseguibile non di paging. Un elenco di tutte le funzioni escluse coperte da questo errore e le sostituzioni consigliate sono disponibili dopo l'esempio seguente.

Nome dell'analisi del codice: BANNED_MEM_ALLOCATION_NOTYPE

Esempio

Il codice seguente genera questo avviso. Questo problema deriva dall'uso di MmMapIoSpace:

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

Il codice seguente evita questo avviso sostituendo MmMapIoSpace con MmMapIoSpace:

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

Funzioni escluse

API escluse Sostituzioni Razionale/Note
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() A seconda del tipo di cache, è possibile usare SpecifyCache in modo da limitarlo alla memoria non eseguibile. Tuttavia, l'uso di NodeMemory garantisce questo problema. Per altre informazioni, vedere C30030, sottosezione "Per i difetti relativi ai tipi di cache".