Compartilhar via


Função ExFreePool2 (wdm.h)

A rotina ExFreePool2 desaloca um bloco alocado anteriormente de memória do pool. Ele estende o ExFreePool aceitando parâmetros estendidos opcionais para alocações gratuitas associadas a um pool seguro criado via ExCreatePool.

Sintaxe

VOID ExFreePool2(
  [in]           PVOID                     P,
  [in]           ULONG                     Tag,
  [in, optional] PCPOOL_EXTENDED_PARAMETER ExtendedParameters,
  [in]           ULONG                     ExtendedParametersCount
);

Parâmetros

[in] P

Ponteiro para o início da alocação a ser gratuita. Deve ser o endereço exato retornado pela rotina de alocação do pool, como ExAllocatePool2 ou ExAllocatePool3. Esse parâmetro não deve ser NULL.

[in] Tag

Marca de pool originalmente fornecida quando a alocação foi feita.

[in, optional] ExtendedParameters

Ponteiro para uma matriz de descritores de parâmetro estendido (tipo POOL_EXTENDED_PARAMETER). Consulte Comentários.

[in] ExtendedParametersCount

Número de entradas na matriz ExtendedParameters . Consulte Comentários.

Valor de retorno

Nenhum

Observações

A tabela a seguir mostra os requisitos para usar o ExFreePool2 com diferentes tipos de alocações:

Tipo de alocação ExtendedParametersCount ExtendedParameters
Comum (não seguro) 0 ZERO
Secure 1 Ponteiro para POOL_EXTENDED_PARAMS_SECURE_POOL estrutura

Para os livres de pool seguro, a estrutura de POOL_EXTENDED_PARAMS_SECURE_POOL associada deve:

  • Contém um identificador de pool seguro válido obtido de uma alocação bem-sucedida associada a um pool seguro.
  • Forneça o cookie correto para a alocação que está sendo liberada.
  • Tenha todos os campos reservados (por exemplo, Buffer, SecurePoolFlags) definidos como NULL/0.
  • Seja a única entrada (ExtendedParametersCount == 1).

Falhas de validação (contagem incorreta, tipo de parâmetro sem suporte, campos reservados não zero, identificador inválido ou falha de comunicação segura do kernel) causam uma verificação de bug (BAD_POOL_CALLER) em vez de retornar um status de erro.

Essa rotina não retorna um valor NTSTATUS; ele sempre conclui as verificações gratuitas ou de bugs. Um cabeçalho duplo, corrompido, incompatibilidade de marca ou liberação com metadados de pool seguro incorretos também pode disparar verificações de bugs de integridade do pool, dependendo do diagnóstico do sistema.

ExFreePool2 deve ser chamado em IRQL <= DISPATCH_LEVEL. Se a alocação se originou do pool de páginas, o chamador deverá estar em IRQL <= APC_LEVEL. As alocações de pool seguro residem na memória nãopagada e podem ser liberadas em DISPATCH_LEVEL.

Use ExFreePool2 para código que pode liberar alocações de pool padrão ou segura para evitar ramificação na origem da alocação.

Requisitos

Requisito Valor
servidor com suporte mínimo Windows Server 2022
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)

Confira também

ExFreePool

ExFreePoolWithTag

ExAllocatePool2

ExAllocatePool3

ExCreatePool