Condividi tramite


Funzione ExAllocatePoolZero (wdm.h)

Attenzione

Microsoft è a conoscenza di un problema con ExAllocatePoolZero che può causare un'allocazione che non viene azzerato in Windows 10, versione 1909. Questo problema è stato risolto in un aggiornamento della sicurezza di WDK per Windows 10, versione 2004 e Enterprise WDK (EWDK) per Windows 10, versione 2004 il 16 dicembre 2020. Per informazioni sul download della versione più recente di WDK, vedere Scaricare Windows Driver Kit (WDK).For information on download the latest WDK, see Download the Windows Driver Kit (WDK).

Questa routine è un wrapper per e un'opzione di sostituzione consigliata per ExAllocatePoolWithTag.

ExAllocatePoolZero alloca la memoria del pool del tipo specificato e restituisce un puntatore al blocco allocato. È identico a ExAllocatePoolWithTag , ad eccezione del fatto che zero inizializza la memoria allocata.

Sintassi

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Parametri

PoolType

Tipo di memoria del pool da allocare. Per una descrizione dei tipi di memoria del pool disponibili, vedere POOL_TYPE.

È possibile modificare il valore di enumerazione eseguendo un or bit per bit con il flag POOL_RAISE_IF_ALLOCATION_FAILURE definito in wdm.h. Questo flag causa la generazione di un'eccezione se la richiesta non può essere soddisfatta. L'uso di questo flag non è consigliato perché è costoso.

Analogamente, è possibile modificare il valore PoolType in bit per bit-ORing con il flag POOL_COLD_ALLOCATION (definito anche in wdm.h) come suggerimento al kernel per allocare la memoria dalle pagine che probabilmente verranno visualizzate rapidamente. Per ridurre la quantità di memoria del pool residente il più possibile, non è consigliabile fare riferimento a queste allocazioni di frequente. Il flag POOL_COLD_ALLOCATION è solo consultivo.

NumberOfBytes

Numero di byte da allocare.

Tag

Tag del pool da usare per la memoria allocata. Specificare il tag del pool come valore letterale carattere diverso da zero da uno a quattro caratteri delimitati da virgolette singole (ad esempio, Tag1). La stringa viene in genere specificata in ordine inverso , ad esempio 1gaT. Ogni carattere ASCII nel tag deve essere un valore nell'intervallo 0x20 (spazio) per 0x7E (tilde). Ogni percorso del codice di allocazione deve usare un tag di pool univoco per consentire ai debugger e ai verificatori di identificare il percorso del codice.

Valore restituito

ExAllocatePoolZero restituisce NULL se nel pool libero non è presente memoria sufficiente per soddisfare la richiesta. In caso contrario, la routine restituisce un puntatore alla memoria allocata.

Commenti

Questa routine viene utilizzata per l'allocazione generale della memoria del pool.

Per eseguire nelle versioni di Windows precedenti a Windows 10 versione 2004, il driver deve definire POOL_ZERO_DOWN_LEVEL_SUPPORT e chiamare ExInitializeDriverRuntime prima di chiamare questa funzione.

L'unica differenza tra questa funzione e ExAllocatePoolWithTag è che la memoria è zero inizializzata. Se non lo si desidera, usare invece ExAllocatePoolUninitialized , che è un wrapper per ExAllocatePoolWithTag.

Un driver deve accedere alla memoria solo all'interno dell'intervallo di byte allocato. L'accesso alla memoria all'esterno di questo intervallo può danneggiare il pool e causare l'arresto anomalo del sistema.

Per altre indicazioni, vedere la sezione Osservazioni di ExAllocatePoolWithTag .

Requisiti

Requisito Valore
Client minimo supportato Richiede WDK per Windows 10 versione 2004. È destinato a Windows 7 e versioni successive del sistema operativo Windows.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

Vedi anche

ExAllocatePoolUninitialized