ID do artigo: 188831 - Última revisão: terça-feira, 23 de setembro de 2003 - Revisão: 1.1

WINNT-2K - Como Ativar o Recurso Especial de Pool Para Isolar um Pool Danificado

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo foi publicado anteriormente em BR188831
Expandir tudo | Recolher tudo

Sumário

IMPORTANTE
Esse documento contém informações sobre a edição do registro.
Antes de você editá-lo, tenha certeza de que sabe como restaurá-
lo se ocorrer algum problema. Para obter informações sobre como
fazê-lo, veja o tópico de Ajuda "Restaurando o Registro" no
Regedit.exe ou o tópico de Ajuda "Restaurando uma Chave do
Registro" no Regedt32.exe.


Pool danificado pode ser a causa principal de muitos da maioria
dos problemas evasivos do Windows NT. Pool danificado é causado
quando um componente do modo kernel grava fora da memória da
área alocada do pool. Granado na memória além do limite da sua
área alocada, é provável que outra área da memória alocada,
possivelmente possuída por outro componente, é sobrescrita.
Este dano pode causar problemas como tela azul em áreas
completamente não relacionadas com o código. Um componente do
modo kernel ler além da área alocada pode também causar
problemas.
Se são causados por drivers OEM (Original Equipment
Manufacturers) ou problemas no Windows NT, problemas de pool
danificado são algumas das maiores dificuldades de identificar.
Normalmente, tudo aquilo que pode ser visto num erro de
esvaziamento de memória são sintomas do problema real, como uma
área de dados tornado-se danificada e causando problemas numa
peça do código completamente não relacionada. Até agora isto
era quase impossível identificar a peça de código que danifica
a memória.
O código do pool danificado pode agora ser identificado na
instrução que está causando o pool danificado. Um novo
utilitário de gerenciamento de memória chamado Special Pool é
incluído no Windows NT 4.0 Service Pack 4 (SP4) e no Windows
2000. O utilitário Special Pool identifica o componente do modo
kernel que está danificando os dados do pool ao gravar fora da
sua área de memória alocada.

I

Mais Informações

ATENÇÃO: Usar o Editor de Registro incorretamente pode
ocasionar sérios problemas que podem requerer a reinstalação do
sistema operacional. A Microsoft não pode garantir que
problemas resultantes do uso incorreto do Editor de Registro
possam ser solucionados. O uso do Editor de Registro é de seu
próprio risco.
Para informações sobre como editar o registro, veja o tópico
Alterando chaves e valores na Ajuda On-line do Editor de
Registro (Regedit.exe). Observe que você deve fazer cópias dos
arquivos do registro (System.dat e User.dat) antes de editar o
registro.
Se você estiver executando o Windows NT ou o Windows 2000,
também deve atualizar seu Disco de Reparação de Emergência
(ERD).
O modo como o utilitário Special Pool funciona é alocando duas
páginas de memória virtual para toca alocação do pool
requisitada através de ExAllocatePoolWithTag que se assemelha
aos seguintes critérios:
· A requisição de alocação tem que ser para um tamanho menor
que a alocação máxima que irá caber numa página de pool.

· A requisição tem que ser parecida com a especificação
PoolTag no registro.
Para detecção de sobrecarga do pool, a primeira página é usada
para conter a alocação no final da página. A segunda página é
uma página de guarda. Para detecção de sub-carga do pool, a
primeira página é a página de guarda. É seguida por uma página
que contém a alocação no começo da página.

A detecção de sobrecarga é provavelmente a mais usada. Para
detecção de sobrecarga, a alocação requisitada é colocada no
final da primeira página fazendo backup do tamanho da
requisição do final da página. O tamanho da alocação é agrupado
num limite de 8-bytes. Uma chave de padrão, o tamanho e as
informações da marca do pool são gravados no cabeçalho nos
primeiros oito bytes na primeira página. O padrão também é
propagado através da página. Desde que a alocação é colocada no
limite próximo de 8-bytes, pode haver tantos quantos sete bytes
distribuídos seguindo a alocação. O padrão é também gravado nos
bytes distribuídos seguintes a alocação.

A Segunda página é a página de guarda. A página de guarda
consiste de uma entrada de tabela de página especial (PTE) que
é marcada com proteção sem acesso. Marcando esta segunda página
com a proteção sem acesso, qualquer código que tente ler ou
gravar além do final da primeira página provoca imediatamente
uma violação de acesso resultando num erro Stop 0x0000000A ou
Stop 0x0000001E. Isto ativa alguma depuração do sistema para
identificar a instrução exata que causa o dano no pool.

Como um backup verifica para pegar os violadores que gravam
além do limite do final da alocação mas não alem do final da
página, os bytes distribuídos no final da alocação são
validados durante a requisição do pool livre
(ExFreePoolWithTag). Os bytes distribuídos são comparados ao
padrão no cabeçalho da alocação para verificar se qualquer
coisa está sobregravada na área de bytes distribuídos. Se a
verificação não funcionar, um erro Stop 0x00000001A ocorre.

Esta verificação não identifica necessariamente a peça exata do
código que causa o pool danificado, mas esta pode ajudar na
identificação do componente que causa o dano.

Para ativar o utilitário Special Pool, adicione as seguintes
chaves e valores no registro:


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Memory Management
Nome do Valor: PoolTag
Tipo de Dados: REG_DWORD
Dados: Pool tag mask | Allocation size mask | 0
A máscara de marca do pool é o ID da marca do pool que contém
os caracteres mascarados do pool em que você quer colocar o
utilitário Special Pool. Esta máscara tem que ser especificada
em hexadecimal em ordem inversa. Esta mascara também pode
conter ??? para mascarar um único caractere ou ?*? para
mascarar deste ponto até o final da marca. Por exemplo, para
monitorar todos os pools com uma marca de pool começando com
?Nt?, especifique ?2A744E? (sem as aspas), que representa
?*tN?.

A seguinte tabela lista mais exemplos:

Pool para monitorar Representação de Caractere Máscara
da Marca
Todos os pools "*"
0x2A
N??s "s??N"
0x733F3F4E
A especificação da alocação do tamanho da mascara coloca todas
as alocações do de um tamanho especifico no Special Pool. Este
é também especificado em hexadecimal. Por exemplo, se todas as
alocações de 32 bytes são colocadas no Special Pool,
especifique 0x20.
Quando zero (0x0) é especificado, o utilitário Special Pool não
é inicializado. Além disso, o utilitário Special Pool não é
inicializado se o valor do registro PoolTag não está definido
no registro.
Nome do Valor: PoolTagOverruns
Tipo de Dados: REG_DWORD
Dados: 1 | 0
?1? indica que a sobrecarga de alocação do pool é detectada
para a marca especificada. A alocação é colocada no final da
página e a página de guarda segue.
Exemplos de uso comum para criar essas duas chaves de registro
devem ser:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\
Memory Management

Nome do Valor: PoolTag
Tipo de Dados: REG_DWORD
Dados: 0x2A

Nome do Valor: PoolTagOverruns
Tipo de Dados: REG_DWORD
Dados: 1
?0? indica que a sub-carga da alocação do pool é detectada para
a marca especificada. A alocação é colocada no começo da página
e a página de guarda precede a página que contém a alocação.
NOTA: Para o Windows NT Terminal Server 4.0, você precisa
desativar KStackPool ao usar o Special Pool. Para fazer isso,
adicione o seguinte valor de registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\S
ession Manager\Memory Management
EnableKStackPool
Tipo de Dados: REG_DWORD
0 - KStack pool desativado
1 - KStack pool sempre ativado
2 - KStack pool ativado para >= computadores de 256
MB (padrão)
Se você não faz esta alteração em computadores Terminal Server
com >=256 MB, você pode receber mensagens de erro STOP
0x00000078 (PHASE0_EXCEPTION).
NOTA: Depois que você fizer qualquer uma das alterações do
descritas neste artigo, reinicie o computador para fazer com
que as alterações tenham efeito.
Se depois que você ativa o recurso Special Pool, o computador
parar de responder (congela) com uma mensagem de erro numa tela
azul durante a inicialização, reinicie o computador e inicie
este usando a opção Última Configuração Boa Conhecida. Ativar o
recurso Special Pool não é gravado na entrada da Última
Configuração Boa Conhecida no registro até que seja feito um
logon bem sucedido.

A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows NT 4.0 Service Pack 4
  • Microsoft Windows NT Workstation 4.0 Developer Edition
Palavras-chave: 
KB188831