Condividi tramite


funzione _RxAllocatePoolWithTag

_RxAllocatePoolWithTag alloca memoria da un pool con un tag a quattro byte all'inizio del blocco che può essere usato per rilevare le istanze del cestino della memoria.

Sintassi

VOID* _RxAllocatePoolWithTag(
   ULONG Type,
   ULONG Size,
   ULONG Tag,
   PSZ   FileName,
   ULONG LineNumber
);

Parametri

Tipo
Tipo del pool da allocare. Questo parametro può essere uno dei valori di enumerazione seguenti per POOL_TYPE:

NonPagedPool
Memoria di sistema non modificabile a cui è possibile accedere da qualsiasi IRQL. La memoria nonPagedPool è una risorsa scarsa e i driver devono allocarlo solo quando necessario. Il sistema può allocare buffer di dimensioni superiori a PAGE_SIZE da NonPagedPool in multipli di PAGE_SIZE. Richieste di buffer maggiori di PAGE_SIZE, ma non un PAGE_SIZE più memoria non di paging.

PagedPool
Memoria di sistema pagabile che può essere allocata e accessibile solo in IRQL < DISPATCH_LEVEL.

Size
Dimensione del blocco di memoria, in byte, da allocare.

Tag
Tag a quattro byte da usare per contrassegnare il buffer allocato. Per una descrizione dell'uso dei tag, vedere ExAllocatePoolWithTag. Il valore ASCII di ogni carattere nel tag deve essere compreso tra 0 e 127.

FileName
Puntatore al nome del file di origine in cui si è verificata l'allocazione della memoria. Questo parametro non è attualmente utilizzato.

LineNumber
Numero di riga nel file di origine in cui si è verificata l'allocazione della memoria. Questo parametro non è attualmente utilizzato.

Valore restituito

RxAllocatePoolWithTag 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

È consigliabile chiamare la macro RxAllocatePoolWithTag anziché usare direttamente questa routine. Nelle build di vendita al dettaglio questa macro viene definita per chiamare ExAllocatePoolWithTag. Nelle compilazioni controllate, questa macro viene definita per chiamare _RxAllocatePoolWithTag.

La routine _RxAllocatePoolWithTag chiama ExAllocatePoolWithTagPriority con la priorità (importanza della richiesta) impostata su LowPoolPriority. Il sistema potrebbe non riuscire a richiedere LowPoolPriority quando viene eseguito su risorse ridotte. Un driver deve essere preparato per il ripristino da un errore di allocazione quando si usa questa routine.

Quando il sistema alloca un buffer dalla memoria del pool di PAGE_SIZE o superiore, allinea il buffer in un limite di pagina. Le richieste di memoria inferiori a PAGE_SIZE non sono necessariamente allineate ai limiti di pagina, ma rientrano sempre all'interno di una singola pagina e sono allineate su un limite a 8 byte. Qualsiasi allocazione riuscita che richiede un blocco maggiore di PAGE_SIZE che non è un multiplo di PAGE_SIZE sprecare tutti i byte inutilizzati nell'ultima pagina allocata.

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 la memoria viene sottoposta a dump o quando si monitora l'utilizzo della memoria nel debugger.

La memoria allocata con _RxAllocatePoolWithTag deve essere rilasciata chiamando _RxFreePool.

I chiamanti di _RxAllocatePoolWithTag devono essere in esecuzione in IRQL <= DISPATCH_LEVEL. Un chiamante in esecuzione in DISPATCH_LEVEL deve specificare un valore NonPagedPool per il parametro Type . Un chiamante in esecuzione in IRQL <= APC_LEVEL può specificare qualsiasi valore POOL_TYPE per il parametro Type .

Requisiti

Piattaforma di destinazione

Desktop

Intestazione

Ntrxdef.h (include Ntrxdef.h)

IRQL

Vedere la sezione Osservazioni.

Vedi anche

ExAllocatePoolWithTag

_RxCheckMemoryBlock

_RxFreePool