Condividi tramite


Funzione ExAllocatePoolWithQuota (wdm.h)

Avviso

La routine ExAllocatePoolWithQuota è obsoleta ed è stata deprecata in Windows 10, versione 2004 ed è stata sostituita 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 ExAllocatePoolQuotaZero.

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

Sintassi

PVOID ExAllocatePoolWithQuota(
  [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

ExAllocatePoolWithQuota restituisce un puntatore al pool allocato.

Se la richiesta non può essere soddisfatta, ExAllocatePoolWithQuota genera un'eccezione.

Commenti

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 NumberOfBytes è PAGE_SIZE o versione successiva, viene allocato un buffer allineato alla pagina. La quota non viene addebitata al processo per le allocazioni di PAGE_SIZE o maggiore.

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.

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 che ExAllocatePoolWithQuota alloca è 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 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 pool.

Requisiti

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

Vedi anche

ExAllocatePoolWithQuotaTag

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE