Alocação de pool e rotinas gratuitas

O RDBSS fornece várias rotinas a serem usadas para alocação de pool. Normalmente, essas rotinas são chamadas usando macros, não chamando essas rotinas diretamente. As macros lidam automaticamente com as diferenças entre builds de varejo e verificados.

Em um build verificado, essas rotinas foram projetadas para adicionar wrappers em torno da alocação normal de kernel e das rotinas livres. Esses wrappers para alocação de pool e rotinas gratuitas fornecem informações adicionais de depuração e chamam um conjunto de rotinas que executam vários tipos de verificação e proteção antes de chamar a alocação do pool de kernel e rotinas gratuitas. No entanto, esses recursos não são implementados atualmente nessas rotinas gratuitas e de alocação, mas podem ser adicionados em versões futuras.

Em um build gratuito, essas rotinas se tornam chamadas diretas para a alocação de kernel e rotinas livres, ExAllocatePoolWithTag e ExFreePool.

A tabela a seguir lista a alocação do pool de RDBSS e as rotinas gratuitas.

Rotina Descrição

_RxAllocatePoolWithTag

Essa rotina aloca memória de um pool com uma marca de quatro bytes no início do bloco que pode ajudar a capturar problemas de memória.

É recomendável que a macro RxAllocatePoolWithTag seja chamada em vez de usar essa rotina diretamente.

_RxCheckMemoryBlock

Essa rotina verifica se há uma assinatura de cabeçalho de RX_POOL_HEADER especial em um bloco de memória. Observe que um driver de minidiretório de rede precisaria adicionar esse bloco de assinatura especial à memória alocada para usar a rotina.

Essa rotina não deve ser usada, pois esse bloco de cabeçalho especial não foi implementado.

_RxFreePool

Essa rotina libera um pool de memória.

É recomendável que a macro RxFreePool seja chamada em vez de usar essa rotina diretamente.

Várias macros, que são definidas no arquivo de cabeçalho ntrxdef.h , chamam essas rotinas. Em vez de chamar as rotinas listadas diretamente na tabela anterior, as macros a seguir normalmente são usadas.

Macro Descrição

RxAllocatePoolWithTag (tipo, tamanho, marca)

Em builds verificados, essa macro aloca memória de um pool com uma marca de quatro bytes no início do bloco que pode ajudar a capturar instâncias de lixo de memória.

Em builds de varejo, essa macro se torna uma chamada direta para ExAllocatePoolWithTag.

RxCheckMemoryBlock (ptr)

Em builds verificados, essa macro verifica um bloco de memória para obter uma assinatura de cabeçalho de RX_POOL_HEADER especial.

Em builds de varejo, essa macro não faz nada.

RxFreePool (ptr)

Em builds verificados, essa macro libera um pool de memória.

Em builds de varejo, essa macro se torna uma chamada direta para ExFreePool.