Compartilhar via


Pool Especial

O recurso Pool Especial configura o Windows para solicitar alocações de memória de um pool de memória reservado quando a memória é alocada com uma marca de pool especificada ou está dentro de um intervalo de tamanho especificado.

Abreviação

Spp

Valor hexadecimal

(Nenhuma)

Nome simbólico

(Nenhuma)

Destino

Entrada de registro em todo o sistema

(Windows Vista e posterior) Entrada de registro em todo o sistema, sinalizador de kernel

Selecionando uma marca de pool

Ao solicitar um pool especial para uma marca de pool específica, verifique se o driver ou outro programa de modo kernel usa uma marca de pool exclusiva.

Além disso, ao criar uma marca de pool (por exemplo, usando ExAllocatePoolWithTag), considere inserir os caracteres de marca na ordem inversa. Por exemplo, se a marca for Fred, considere inseri-la como derF (0x64657246). As marcas de pool são armazenadas no registro e exibidas no depurador e em outras ferramentas na ordem inversa (lower endian). Se você inseri-las na ordem inversa, elas serão exibidas na ordem de encaminhamento (0x46726564)

Se você suspeitar que o driver está consumindo todo o pool especial, considere usar várias marcas de pool em seu código. Em seguida, você pode testar o driver várias vezes, atribuindo um pool especial a uma marca de pool em cada teste.

Além disso, selecione uma marca de pool com um valor hexadecimal maior que o tamanho da página do sistema. Para o código do modo kernel, se você inserir uma marca de pool que tenha um valor menor que PAGE_SIZE, o Gflags solicitará um pool especial para todas as alocações cujo tamanho está dentro do intervalo correspondente e solicitará um pool especial para alocações com uma marca de pool equivalente. Por exemplo, se você selecionar um tamanho de 30, o pool especial será usado para todas as alocações entre 17 e 32 bytes de tamanho e para alocações com a marca de pool 0x0030.

Selecionando um tamanho de alocação

Use as diretrizes a seguir para selecionar um tamanho de alocação para o recurso pool especial.

Em um computador com um processador x86, PAGE_SIZE é 0x1000 e os intervalos de tamanho de alocação têm 8 bytes de comprimento. Para configurar o recurso Pool Especial para todas as alocações com tamanhos nesse intervalo, insira um número igual ao máximo desse intervalo mais 8. (Esse número é sempre um múltiplo de 8.) A tabela a seguir ilustra estes valores:

Intervalo de tamanho Insira este número

1 a 8 bytes

10 (decimal 16)

9 a 16 bytes

18 (decimal 24)

17 a 24 bytes

20 (decimal 32)

...

...

0xFE9 para 0xFF0 bytes

FF8 (decimal 4088)

Em um computador com um processador AMD x86-64, PAGE_SIZE é 0x1000 e os intervalos de tamanho de alocação têm 16 bytes de comprimento. Para configurar o recurso Pool Especial para todas as alocações com tamanhos nesse intervalo, insira um número igual ao máximo desse intervalo mais 16. (Esse número é sempre um múltiplo de 16.) A tabela a seguir ilustra estes valores:

Intervalo de tamanho Insira este número

1 a 16 bytes

20 (decimal 32)

17 a 32 bytes

30 (decimal 48)

33 a 48 bytes

40 (decimal 64)

...

...

0xFD1 para 0xFE0 bytes

FF0 (decimal 4080)

Em um computador com qualquer processador, você pode usar um asterisco ( * ) ou 0x2A (decimal 42) para configurar o recurso pool especial para todas as alocações de memória no sistema.

Comentários

Para obter informações sobre como configurar o recurso pool especial na caixa de diálogo Sinalizadores Globais, consulte Configurando o pool especial. Para obter informações sobre como configurar o recurso pool especial na linha de comando, consulte Comandos GFlags. Para obter um exemplo, consulte Exemplo 14: Configurando o pool especial.

O recurso Pool Especial do Gflags orienta o Windows a solicitar alocações de memória de um pool de memória reservado quando a memória é alocada com uma marca de pool especificada ou está dentro de um intervalo de tamanho especificado. Para solicitar um pool especial para todas as alocações por um driver específico, use o Verificador de Driver. Para obter mais informações, consulte o tópico "Pool Especial" na seção "Verificador de Driver" do WDK (Kit de Driver do Windows).

Os recursos especiais do pool de Gflags e do Verificador de Driver ajudam você a detectar e identificar a origem dos erros no uso do pool de kernel, como gravar além do espaço de memória alocado ou fazer referência à memória que já foi liberada.

Nem todas as solicitações especiais do pool são atendidas. Cada alocação do pool especial usa uma página de memória física não paginável e duas páginas de espaço de endereço virtual. Se o pool especial estiver esgotado, a memória será alocada do pool padrão até que o pool especial fique disponível novamente. Quando uma solicitação de pool especial é preenchida do pool padrão, a função solicitante retorna um status de êxito. Ele não retorna um erro, pois a alocação foi bem-sucedida, mesmo que não tenha sido preenchida do pool especial.

O tamanho do pool especial aumenta com a quantidade de memória física no sistema; idealmente, deve ser pelo menos 1 Gigabyte (GB). Em máquinas x86, como o espaço virtual (além do físico) é consumido, não use a opção de inicialização /3GB ao usar o pool especial. Também é uma boa ideia aumentar as quantidades mínimas/máximas do arquivo de página em um fator de dois ou três.

Você também pode configurar o recurso Pool Especial para alinhar a alocação de memória para detectar referências à memória que precedem a alocação ("subexecutações") ou referências à memória além da alocação ("estouros"). Esse recurso só está disponível na caixa de diálogo Sinalizadores Globais em todas as versões do Windows. Para obter detalhes, consulte Detectando estouros e subexecutações.

No Windows Vista e versões posteriores do Windows, você pode definir o recurso Pool Especial como uma configuração do Registro que requer uma reinicialização, mas permanece eficaz até que você o altere ou como uma configuração de sinalizador de kernel que não requer uma reinicialização, mas é eficaz apenas até que você reinicialize ou desligue o Windows. Em versões anteriores do Windows, o Pool Especial só está disponível como uma configuração do Registro.

No Windows Vista e versões posteriores do Windows, você pode configurar o recurso Pool Especial usando a caixa de diálogo Sinalizadores Globais ou na linha de comando. Na versão anterior do Windows, esse recurso só está disponível na caixa de diálogo Sinalizadores Globais.