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) |