Condividi tramite


Macro FsRtlAllocatePoolWithTag (ntifs.h)

La routine fsRtlAllocatePoolWithTag alloca la memoria del pool.

Sintassi

void FsRtlAllocatePoolWithTag(
  [in]  PoolType,
  [in]  NumberOfBytes,
  [in]  Tag
);

Parametri

[in] PoolType

Tipo di pool da allocare. Uno dei seguenti:

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • pagedPoolCacheAligned

I nonPagedPoolMustSucceed e nonPagedPoolCacheAlignedMustS tipi di pool sono obsoleti e non devono più essere usati.

[in] NumberOfBytes

Numero di byte da allocare. Questo parametro è obbligatorio e non può essere zero.

[in] Tag

Specifica il tag del pool per la memoria allocata. I driver specificano in genere il tag del pool come stringa da uno a quattro caratteri ASCII a 7 bit, delimitati da virgolette singole ,ad esempio 'abcd'. Questo parametro è obbligatorio e non può essere zero.

Valore restituito

Nessuno

Osservazioni

Se si verifica un errore di allocazione del pool, FsRtlAllocatePoolWithTag genera un'eccezione STATUS_INSUFFICIENT_RESOURCES. Per controllare se si verifica questo errore di allocazione del pool, il driver deve eseguire il wrapping della chiamata a FsRtlAllocatePoolWithTag in un try-except o istruzione try-finally.

Il sistema associa il tag del pool specificato dal parametro tag al buffer allocato. Gli strumenti di programmazione, ad esempio Windows Debugger (WinDbg), possono visualizzare il tag del pool associato a ogni buffer allocato. Il valore del tag del pool viene in genere visualizzato in ordine inverso. Ad esempio, se un chiamante passa "Fred" come valore del parametro Tag, questo valore viene visualizzato come "derF" se il pool viene sottoposto a dump o quando si monitora l'utilizzo del pool nel debugger.

Per altre informazioni sulla gestione della memoria, vedere Memory Management.

La memoria che FsRtlAllocatePoolWithTag 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 FsRtlAllocatePoolWithTag devono essere in esecuzione in IRQL <= DISPATCH_LEVEL. Un chiamante in DISPATCH_LEVEL deve specificare un NonPagedXxxPoolType. In caso contrario, il chiamante deve essere in esecuzione in IRQL <= APC_LEVEL.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione ntifs.h (include Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (vedere la sezione Osservazioni)

Vedere anche

exAllocatePoolWithTag

exFreePool