Condividi tramite


Macro ExAllocatePoolWithQuota (classpnp.h)

La routine ExAllocatePoolWithQuota è obsoleta e viene esportata solo per i file binari del driver esistenti. Usare invece ExAllocatePoolWithQuotaTag .

ExAllocatePoolWithQuota alloca la memoria del pool e la quota di ricarica rispetto al processo corrente.

Sintassi

PVOID ExAllocatePoolWithQuota(
  _In_ POOL_TYPE a,
  _In_ SIZE_T b
);

Parametri

a

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

È possibile modificare un oggetto (PoolType) usando un OR bit per bit con il flag POOL_COLD_ALLOCATION come suggerimento per il 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 avviso ed è disponibile per Windows XP e versioni successive del sistema operativo Windows.

b

Specifica il numero di byte da allocare.

Valore restituito

nessuno

Osservazioni

Questa routine viene chiamata dai driver di livello più alto che allocano memoria per soddisfare una richiesta nel contesto del processo che ha originariamente effettuato la richiesta di I/O. I driver di livello inferiore chiamano invece ExAllocatePoolWithTag .

Se b (NumberOfBytes) è PAGE_SIZE o superiore, viene allocato un buffer allineato alla pagina. La quota non viene addebitata al processo di allocazione di PAGE_SIZE o superiore.

Le allocazioni di memoria di meno di PAGE_SIZE vengono allocate all'interno di una pagina e non superano i limiti di pagina. Le allocazioni di memoria di PAGE_SIZE o meno 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.

Nota

Non impostare NumberOfBytes = 0. Evitare allocazioni di lunghezza zero perché sprecano 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 (paging o non di paging) è elevata o bassa. I driver possono attendere che questi eventi ottimizzano l'utilizzo del pool. Per altre informazioni, vedere Oggetti evento standard.

Nota

La memoria allocata da ExAllocatePoolWithQuota 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).

I chiamanti di ExAllocatePoolWithQuota devono essere in esecuzione in IRQL <= DISPATCH_LEVEL. Un chiamante in esecuzione in DISPATCH_LEVEL deve specificare un valore NonPagedXxx per PoolType. Un chiamante in esecuzione in IRQL <= APC_LEVEL può specificare qualsiasi valore POOL_TYPE, ma irQL e ambiente devono essere considerati anche per determinare il tipo di pool.

Requisiti

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

Vedi anche

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE