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

Commenti

Questa opzione deve essere usata solo se è necessaria la memoria eseguibile. Per altre informazioni, vedere No-Execute (NX) Nonpaged Pool (NX ). Non sono disponibili 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 analisi 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 vietata Sostituzioni Razionale/Note
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() A seconda del tipo di cache, SpecifyCache può essere usato 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".