Compartilhar via


Função FltAllocatePoolAlignedWithTag (fltkernel.h)

FltAllocatePoolAlignedWithTag aloca um buffer alinhado ao dispositivo para uso em uma operação de E/S não armazenada em cache.

Sintaxe

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

Parâmetros

[in] Instance

Ponteiro de instância opaco para uma instância de driver de minifiltro de propriedade do chamador que está anexada ao volume. Esse parâmetro é necessário e não pode ser NULL.

[in] PoolType

Tipo de pool a ser alocado. Um dos seguintes:

NonPagedPool

PagedPool

NonPagedPoolCacheAligned

PagedPoolCacheAligned

Consulte POOL_TYPE para obter uma descrição dos tipos de memória do pool disponíveis.

[in] NumberOfBytes

Número de bytes a serem alocados. Esse parâmetro é necessário e pode ser zero.

[in] Tag

Especifica a marca de pool para a memória alocada. Os drivers normalmente especificam a marca de pool como uma cadeia de caracteres de um a quatro caracteres ASCII de 7 bits, delimitadas por aspas simples (por exemplo, 'abcd'). Esse parâmetro é necessário e não pode ser zero.

Retornar valor

Se não houver pool livre suficiente disponível para atender à solicitação, FltAllocatePoolAlignedWithTag retornará um ponteiro NULL . Caso contrário, FltAllocatePoolAlignedWithTag retornará um ponteiro para o buffer recém-alocado.

Comentários

FltAllocatePoolAlignedWithTag aloca um buffer alinhado de acordo com o dispositivo subjacente para o volume fornecido. Esses buffers alinhados ao dispositivo são necessários para E/S não armazenada em cache. (Eles também podem ser usados para E/S armazenada em cache.) Assim, ao chamar rotinas que executam E/S não cache, como FltReadFile e FltWriteFile, os drivers de minifiltro devem chamar FltAllocatePoolAlignedWithTag em vez de ExAllocatePoolWithTag.

Se o chamador especificar um valor zero para o parâmetro NumberOfBytes , FltAllocatePoolAlignedWithTag alocará a menor quantidade de memória que atende ao requisito de alinhamento.

O sistema associa a marca de pool especificada pelo parâmetro Tag ao buffer alocado. Ferramentas de programação, como o WinDbg (Depurador do Windows), podem exibir a marca de pool associada a cada buffer alocado. O valor da marca de pool normalmente é exibido em ordem invertida. Por exemplo, se um chamador passar 'Fred' como o valor do parâmetro Tag , esse valor aparecerá como 'derF' se o pool for despejado ou ao rastrear o uso do pool no depurador.

Para obter mais informações sobre o gerenciamento de memória, consulte Gerenciamento de memória.

Quando o buffer alocado por FltAllocatePoolAlignedWithTag não é mais necessário, o chamador é responsável por liberá-lo chamando FltFreePoolAlignedWithTag.

Os chamadores de FltAllocatePoolAlignedWithTag só poderão ser executados no IRQL DISPATCH_LEVEL se umXxxPoolType NãoPaged for especificado. Caso contrário, os chamadores devem estar em execução em IRQL <= APC_LEVEL.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
IRQL <= APC_LEVEL (consulte a seção Comentários)

Confira também

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

FltReadFile

FltWriteFile