Condividi tramite


Funzione FltAllocatePoolAlignedWithTag (fltkernel.h)

FltAllocatePoolAlignedWithTag alloca un buffer allineato al dispositivo per l'uso in un'operazione di I/O non memorizzata nella cache.

Sintassi

PVOID FLTAPI FltAllocatePoolAlignedWithTag(
  [in] PFLT_INSTANCE Instance,
  [in] POOL_TYPE     PoolType,
  [in] SIZE_T        NumberOfBytes,
  [in] ULONG         Tag
);

Parametri

[in] Instance

Puntatore a istanze opache per un'istanza del driver minifilter di proprietà del chiamante collegata al volume. Questo parametro è obbligatorio e non può essere NULL.

[in] PoolType

Tipo di pool da allocare. Uno dei seguenti:

NonPagedPool

PagedPool

NonPagedPoolCacheAligned

pagedPoolCacheAligned

Vedere POOL_TYPE per una descrizione dei tipi di memoria del pool disponibili.

[in] NumberOfBytes

Numero di byte da allocare. Questo parametro è obbligatorio e 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

Se non è disponibile un pool gratuito sufficiente per soddisfare la richiesta, FltAllocatePoolAlignedWithTag restituisce un puntatore NULL. In caso contrario, FltAllocatePoolAlignedWithTag restituisce un puntatore al buffer appena allocato.

Osservazioni

FltAllocatePoolAlignedWithTag alloca un buffer allineato in base al dispositivo sottostante per il volume specificato. Tali buffer allineati al dispositivo sono necessari per le operazioni di I/O non memorizzate nella cache. Possono anche essere usati per le operazioni di I/O memorizzate nella cache. Pertanto, quando si chiamano routine che eseguono operazioni di I/O non memorizzate nella cache, ad esempio FltReadFile e FltWriteFile, i driver minifilter devono chiamare FltAllocatePoolAlignedWithTag anziché ExAllocatePoolWithTag.

Se il chiamante specifica un valore pari a zero per il parametro NumberOfBytes, FltAllocatePoolAlignedWithTag alloca la quantità di memoria minima che soddisfa il requisito di allineamento.

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.

Quando il buffer che FltAllocatePoolAlignedWithTag alloca non è più necessario, il chiamante è responsabile della liberazione chiamando FltFreePoolAlignedWithTag.

I chiamanti di FltAllocatePoolAlignedWithTag possono essere eseguiti in IRQL DISPATCH_LEVEL solo se viene specificato unNonPaged XxxPoolType. In caso contrario, i chiamanti devono essere in esecuzione in IRQL <= APC_LEVEL.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione fltkernel.h (include Fltkernel.h)
libreria FltMgr.lib
IRQL <= APC_LEVEL (vedere la sezione Osservazioni)

Vedere anche

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

fltReadFile

FltWriteFile