Partilhar via


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

Abbreviation

Spp

Valor hexadecimal

(Nenhum)

Nome simbólico

(Nenhum)

Destino

Entrada de registo em todo o sistema

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

Seleccionando um pool tag

Ao solicitar uma zona de memória especial para um identificador de zona de memória específico, certifique-se de que o seu driver ou outro programa de modo núcleo utilize um identificador de zona de memória único.

Além disso, ao criar uma tag de pool (como usando ExAllocatePoolWithTag), considere inserir os caracteres da tag na ordem inversa. Por exemplo, se a tag for Fred, considere inseri-la como derF (0x64657246). As tags de pool são armazenadas no registro e exibidas no depurador e outras ferramentas na ordem inversa (endian inferior). Se forem inseridos em ordem inversa, serão exibidos em ordem direta (0x46726564)

Se suspeitares que o teu driver está a consumir todo o pool especial, considera usar várias etiquetas de pool no teu código. Em seguida, pode testar o seu condutor várias vezes, atribuindo um pool especial a uma etiqueta de pool em cada teste.

Além disso, selecione uma tag de pool com um valor hexadecimal maior do que o tamanho da página do sistema. Para o código do modo kernel, se você inserir uma tag de pool que tenha um valor menor que PAGE_SIZE, o Gflags solicitará pool especial para todas as alocações cujo tamanho esteja dentro do intervalo correspondente e solicitará pool especial para alocações com uma tag de pool equivalente. Por exemplo, se você selecionar um tamanho de 30, um pool especial será usado para todas as alocações entre 17 e 32 bytes de tamanho e para alocações com a tag 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. (Este número é sempre um múltiplo de 8.) A tabela a seguir ilustra esses valores:

Intervalo de tamanhos Introduza 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 a 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. (Este número é sempre um múltiplo de 16.) A tabela a seguir ilustra esses valores:

Intervalo de tamanhos Introduza 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 a 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 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 pool especial.

O recurso Pool Especial do Gflags direciona o Windows para solicitar alocações de memória de um pool de memória reservado quando a memória é alocada com uma tag 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 Driver Verifier. Para obter mais informações, consulte o tópico "Pool Especial" na secção "Verificador de Driver" do Kit de Driver do Windows (WDK).

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

Nem todos os pedidos especiais de piscina são atendidos. 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 a partir do pool padrão, a função solicitante retorna um status de sucesso. Ele não retorna um erro, porque a alocação foi bem-sucedida, mesmo que não tenha sido preenchida a partir do pool especial.

O tamanho da piscina 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 paginação por 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 detetar referências à memória que precede a alocação ("underruns") ou referências à memória além da alocação ("overruns"). Esta funcionalidade está disponível apenas na caixa de diálogo Sinalizadores Globais em todas as versões do Windows. Para obter detalhes, consulte Detetando saturações e subexecuções.

No Windows Vista e versões posteriores do Windows, você pode configurar o recurso Pool Especial como uma configuração do Registro que requer uma reinicialização, mas permanece efetiva até que você a altere, ou como uma configuração de sinalizador do kernel que não requer uma reinicialização, mas é efetiva somente até que você reinicie ou desligue o Windows. Em versões anteriores do Windows, 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 está disponível somente na caixa de diálogo Sinalizadores Globais.