Funzione FltAllocatePoolAlignedWithTag (fltkernel.h)
FltAllocatePoolAlignedWithTag alloca un buffer allineato al dispositivo da usare 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 dell'istanza opaca 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. I tipi validi sono:
NonPagedPool
PagedPool
NonPagedPoolCacheAligned
PagedPoolCacheAligned
Per una descrizione dei tipi di memoria del pool disponibili , vedere POOL_TYPE .
[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.
Commenti
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 essere usati anche 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 più piccola 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 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.
Quando il buffer allocato da FltAllocatePoolAlignedWithTag non è più necessario, il chiamante è responsabile della liberazione chiamando FltFreePoolAlignedWithTag.
I chiamanti di FltAllocatePoolAlignedWithTag possono essere eseguiti in IRQL DISPATCH_LEVEL solo se è specificato unOggetto XxxPoolType nonPaged. In caso contrario, i chiamanti devono essere in esecuzione in IRQL <= APC_LEVEL.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | fltkernel.h (include Fltkernel.h) |
Libreria | FltMgr.lib |
IRQL | <= APC_LEVEL (vedere la sezione Osservazioni) |