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