Função ExAllocatePoolZero (wdm.h)

Cuidado

A Microsoft está ciente de um problema com ExAllocatePoolZero que pode levar a uma alocação não ser zerado no Windows 10 versão 1909. Esse problema foi corrigido em uma atualização de segurança do WDK para Windows 10, versão 2004 e do Enterprise WDK (EWDK) para Windows 10, versão 2004, em 16 de dezembro de 2020. Para obter informações sobre como baixar o WDK mais recente, consulte Baixar o WDK (Kit de Driver do Windows).

Essa rotina é um wrapper para e uma opção de substituição recomendada para ExAllocatePoolWithTag.

ExAllocatePoolZero aloca memória de pool do tipo especificado e retorna um ponteiro para o bloco alocado. Ela é idêntica a ExAllocatePoolWithTag , exceto que zero inicializa a memória alocada.

Sintaxe

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Parâmetros

PoolType

O tipo de memória do pool a ser alocada. Para obter uma descrição dos tipos de memória do pool disponíveis, consulte POOL_TYPE.

Você pode modificar o valor de enumeração executando um OR bit a bit com o sinalizador POOL_RAISE_IF_ALLOCATION_FAILURE definido em wdm.h. Esse sinalizador fará com que uma exceção seja gerada se a solicitação não puder ser atendida. O uso desse sinalizador não é recomendado porque ele é caro.

Da mesma forma, você pode modificar o valor poolType bit a bit ORing esse valor com o sinalizador POOL_COLD_ALLOCATION (também definido em wdm.h) como uma dica para o kernel para alocar a memória de páginas que provavelmente serão paginada rapidamente. Para reduzir a quantidade de memória do pool residente o máximo possível, você não deve referenciar essas alocações com frequência. O sinalizador POOL_COLD_ALLOCATION é apenas aviso.

NumberOfBytes

O número de bytes a serem alocados.

Tag

A marca de pool a ser usada para a memória alocada. Especifique a marca de pool como um literal de caractere diferente de zero de um a quatro caracteres delimitado por aspas simples (por exemplo, Tag1). A cadeia de caracteres geralmente é especificada em ordem inversa (por exemplo, 1gaT). Cada caractere ASCII na marca deve ser um valor no intervalo 0x20 (espaço) para 0x7E (til). Cada caminho de código de alocação deve usar uma marca de pool exclusiva para ajudar os depuradores e verificadores a identificar o caminho do código.

Retornar valor

ExAllocatePoolZero retornará NULL se não houver memória suficiente no pool livre para atender à solicitação. Caso contrário, a rotina retornará um ponteiro para a memória alocada.

Comentários

Essa rotina é usada para a alocação geral de memória do pool.

Para ser executado em versões do Windows antes de Windows 10 versão 2004, o driver deve definir POOL_ZERO_DOWN_LEVEL_SUPPORT e chamar ExInitializeDriverRuntime antes de chamar essa função.

A única diferença entre essa função e ExAllocatePoolWithTag é que a memória é zero inicializada. Se isso não for desejado, use ExAllocatePoolUninitialized , que é um wrapper para ExAllocatePoolWithTag.

Um driver só deve acessar a memória dentro do intervalo de bytes alocado. Acessar a memória fora desse intervalo pode corromper o pool e fazer com que o sistema falhe.

Consulte a seção Comentários de ExAllocatePoolWithTag para obter diretrizes adicionais.

Requisitos

Requisito Valor
Cliente mínimo com suporte Requer o WDK para Windows 10, versão 2004. Tem como destino o Windows 7 e versões posteriores do sistema operacional Windows.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)
Regras de conformidade da DDI CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

Confira também

ExAllocatePoolUninitialized