Funzione ExAllocatePool (wdm.h)

Avviso

ExAllocatePool è obsoleto ed è stato deprecato in Windows 10 versione 2004. È stato sostituito da ExAllocatePool2. Per altre informazioni, vedere Aggiornamento delle chiamate ExAllocatePool deprecatePool2 e ExAllocatePool3.

Quando si sviluppano driver per la versione di Windows prima di Windows 10, versione 2004, usare ExAllocatePoolZero.

ExAllocatePool alloca la memoria del pool del tipo specificato e restituisce un puntatore al blocco allocato.

Sintassi

PVOID ExAllocatePool(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

Parametri

[in] PoolType

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

È possibile modificare PoolType usando un or bit per bit con il flag di POOL_COLD_ALLOCATION come suggerimento al kernel per allocare la memoria dalle pagine che potrebbero essere 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 avviso ed è disponibile per Windows XP e versioni successive del sistema operativo Windows.

[in] NumberOfBytes

Specifica il numero di byte da allocare.

Valore restituito

ExAllocatePool restituisce NULL se nel pool gratuito è presente memoria insufficiente per soddisfare la richiesta. In caso contrario, la routine restituisce un puntatore alla memoria allocata.

Commenti

Questa routine viene usata per l'allocazione generale del pool di memoria.

Se NumberOfBytes è PAGE_SIZE o versione successiva, viene allocato un buffer allineato alla pagina. Le allocazioni di memoria di PAGE_SIZE o meno non superano i limiti di pagina. Le allocazioni di memoria di meno di PAGE_SIZE non sono necessariamente allineate a pagine, ma sono allineate ai limiti a 8 byte nei sistemi a 32 bit e ai limiti a 16 byte nei sistemi a 64 bit.

Un'allocazione corretta che richiede NumberOfByte PAGE_SIZE di pool non con pagine fornisce al chiamante esattamente il numero di byte < richiesti di memoria. Se una richiesta di allocazione per NumberOfBytes PAGE_SIZE ha esito positivo e NumberOfBytes> non è un multiplo esatto di PAGE_SIZE, l'ultima pagina nell'allocazione contiene byte che non fanno parte dell'allocazione del chiamante. Se possibile, l'allocatore del pool usa questi byte. Per evitare di danneggiare i dati appartenenti ad altri componenti in modalità kernel, i driver devono accedere solo agli indirizzi di archiviazione assegnati in modo esplicito.

Se ExAllocatePool restituisce NULL, il chiamante deve restituire il valore NTSTATUS STATUS_INSUFFICIENT_RESOURCES o deve ritardare l'elaborazione in un altro momento.

I chiamanti di ExAllocatePool devono essere eseguiti in IRQL <= DISPATCH_LEVEL. Un chiamante in esecuzione in DISPATCH_LEVEL deve specificare un valore XxxnonPaged per PoolType. Un chiamante in esecuzione in IRQL = APC_LEVEL può specificare qualsiasi valore POOL_TYPE, ma l'ambiente e IRQL <deve essere considerato anche per determinare il tipo di pagina.

Non impostare NumberOfBytes = 0. Evitare allocazioni a lunghezza zero perché rifiutino spazio di intestazione del pool e, in molti casi, indicano un potenziale problema di convalida nel codice chiamante. Per questo motivo, driver verifier contrassegna tali allocazioni come possibili errori.

Il sistema imposta automaticamente determinati oggetti evento standard quando la quantità di pool (paginata o non paginata) è elevata o bassa. I driver possono attendere che questi eventi ottimizzano l'utilizzo del pool. Per altre informazioni, vedere Oggetti evento Standard.

Memoria allocata da ExAllocatePool non inizializzata. Un driver in modalità kernel deve prima zero questa memoria se lo rende visibile al software in modalità utente (per evitare la perdita di contenuti potenzialmente privilegiati).

Requisiti

Requisito Valore
Client minimo supportato Obsoleta. Questa routine viene esportata solo per i file binari esistenti. Usare invece ExAllocatePoolWithTag.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h, Smcnt.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI CheckDeviceObjectFlags(wdm), HwStorPortProhibitedDDIs(storport), IrqlExAllocatePool(wdm), PowerDownAllocate(wdm), PowerUpFail(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm)

Vedi anche

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE