Funzione ExAllocatePoolWithQuotaTag (wdm.h)

La routine ExAllocatePoolWithQuotaTag alloca la memoria del pool, caricando la quota sul processo corrente.

Avviso

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

Sintassi

PVOID ExAllocatePoolWithQuotaTag(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes,
  [in] ULONG                                          Tag
);

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 il valore PoolType in bit per bit-ORing con il flag POOL_QUOTA_FAIL_INSTEAD_OF_RAISE. Questo flag determina che la routine restituisce un valore NULL se la richiesta non può essere soddisfatta.

Analogamente, è possibile modificare il valore PoolType in bit per bit-ORing con il flag POOL_COLD_ALLOCATION come suggerimento al kernel per allocare la memoria dalle pagine che potrebbero essere impaginate 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 ed è supportato in Windows XP e versioni successive del sistema operativo Windows.

[in] NumberOfBytes

Specifica il numero di byte da allocare.

[in] Tag

Specifica il tag del pool per la memoria allocata. Per altre informazioni, vedere il parametro Tag di ExAllocatePoolWithTag.

Valore restituito

ExAllocatePoolWithQuotaTag restituisce un puntatore al pool allocato.

Se la richiesta non può essere soddisfatta, ExAllocatePoolWithQuotaTag genera un'eccezione a meno che non sia specificata POOL_QUOTA_FAIL_INSTEAD_OF_RAISE. L'uso di POOL_QUOTA_FAIL_INSTEAD_OF_RAISE è preferibile per motivi di prestazioni.

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. Le allocazioni di memoria di PAGE_SIZE o minore vengono allocate all'interno di una pagina e 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.

Il sistema associa il tag del pool alla memoria allocata. Gli strumenti di programmazione, ad esempio WinDbg, possono visualizzare il tag del pool associato a ogni buffer allocato. Il valore di Tag viene in genere visualizzato in ordine inverso. Ad esempio, se un chiamante passa "Fred" come tag, viene visualizzato come "derF" se il pool viene scaricato o quando si tiene traccia dell'utilizzo del pool nel debugger.

Il buffer allocato può essere liberato con ExFreePool o ExFreePoolWithTag.

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.

In un'architettura multiprocessore (NUMA) non uniforme, ExAllocatePoolWithQuotaTag tenta di allocare memoria locale al processore che chiama ExAllocatePoolWithQuotaTag. Se non è disponibile alcuna memoria locale, ExAllocatePoolWithQuotaTag alloca la memoria disponibile più vicina.

Memoria non inizializzata ExAllocatePoolWithQuotaTag . 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 ExAllocatePoolWithQuotaTag 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
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.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

ExAllocatePoolWithTag

ExFreePool

ExFreePoolWithTag

POOL_TYPE