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