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