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. I tipi validi sono:

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned

I tipi di pool NonPagedPoolMustSucceed e NonPagedPoolCacheAlignedMustS 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'istruzione try-except o try-finally .

Il sistema associa il tag del pool specificato dal parametro Tag al buffer allocato. Gli strumenti di programmazione, ad esempio Il debugger di Windows (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 verifica l'utilizzo del pool nel debugger.

Per altre informazioni sulla gestione della memoria, vedere Gestione della memoria.

La memoria allocata da FsRtlAllocatePoolWithTag 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 oggetto NonPagedXxxPoolType. In caso contrario, il chiamante deve essere in esecuzione in IRQL <= APC_LEVEL.

Requisiti

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)

Vedi anche

ExAllocatePoolWithTag

ExFreePool