Partilhar via


Macro FsRtlAllocatePoolWithTag (ntifs.h)

A rotina de FsRtlAllocatePoolWithTag aloca memória do pool.

Sintaxe

void FsRtlAllocatePoolWithTag(
  [in]  PoolType,
  [in]  NumberOfBytes,
  [in]  Tag
);

Parâmetros

[in] PoolType

Tipo de pool a ser alocado. Um dos seguintes:

  • NonPagedPool
  • do PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned

Os nonPagedPoolMustSucceed e nonPagedPoolCacheAlignedMustS tipos de pool são obsoletos e não devem mais ser usados.

[in] NumberOfBytes

Número de bytes a serem alocados. Esse parâmetro é necessário e não 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.

Valor de retorno

Nenhum

Observações

Se ocorrer uma falha de alocação de pool, FsRtlAllocatePoolWithTag gera uma exceção STATUS_INSUFFICIENT_RESOURCES. Para obter controle se essa falha de alocação de pool ocorrer, o driver deverá encapsular a chamada para FsRtlAllocatePoolWithTag em uma instrução try-except ou try-finally.

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 do pool normalmente é exibido em ordem invertida. Por exemplo, se um chamador passar 'Fred' como o valor do parâmetro Marca, esse valor aparecerá como 'derF' se o pool for despejado ou ao acompanhar o uso do pool no depurador.

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

A memória que aloca FsRtlAllocatePoolWithTag não está inicializada. Um driver de modo kernel deve primeiro zero essa memória se ele for torná-la visível para o software no modo de usuário (para evitar o vazamento de conteúdo potencialmente privilegiado).

Os chamadores de FsRtlAllocatePoolWithTag devem estar em execução no IRQL <= DISPATCH_LEVEL. Um chamador no DISPATCH_LEVEL deve especificar um PoolTypexxx. Caso contrário, o chamador deverá estar em execução no IRQL <= APC_LEVEL.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)

Consulte também

ExAllocatePoolWithTag

ExFreePool