Como usar o recurso de pool especial para isolar danos pool

Traduções deste artigo Traduções deste artigo
ID do artigo: 188831 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi publicado anteriormente em BR188831
Expandir tudo | Recolher tudo

Sumário

Danos pool podem fazer com que muitos dos mais esconda problemas com danos do Windows NT. Pool é causada quando um modo de kernel componente gravações na memória fora da área de pool alocado. Escrevendo para memória além do limite da sua área alocada, é provável que outro área de memória alocada, possivelmente pertencente a outro componente, será substituída. Este dano pode causar problemas, como telas azuis em completamente não relacionados áreas de código. Um componente do modo kernel leitura além da sua área alocada pode também causa problemas.

Se ele é causado pelo equipamento Original Drivers de fabricantes (OEM) ou problemas no Windows, são problemas de danos de pool Alguns dos mais difíceis de identificar. Geralmente, tudo o que pode ser visto em um análise de despejo de travamento é o sintoma do problema real, como uma área de dados se tornar danificados e causando problemas em um bloco completamente isolado do código. Até agora, era quase impossível encontrar o segmento de código que prejudica a memória.

Agora pode ser identificada a origem do dano do pool durante a instrução, fazendo com que o dano do pool. Um novo utilitário de gerenciamento de memória Isto é chamado Pool especial está incluído no Windows NT 4.0 Service Pack 4 (SP4), Windows 2000, Windows XP, Windows Server 2003, Windows Vista e Windows Server 2008. O utilitário de Pool especial identifica o componente do modo kernel que está danificando os dados do pool, escrevendo para memória fora de sua área alocada.

Observação Ajuste de memória não se aplica ao Windows Vista e Windows Server 2008. No entanto, o recurso de pool especial se aplicam para esses produtos.

Mais Informações

Importante Esta seção, método ou tarefa contém etapas que informam sobre como modificar o registro. No entanto, sérios problemas poderão ocorrer se você modificar o Registro incorretamente. Portanto, certifique-se de que você siga estas etapas cuidadosamente. Para maior proteção, faça backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
322756 Como fazer backup e restaurar o registro no Windows


O utilitário de Pool especial aloca duas páginas de memória virtual para cada alocação de pool é solicitada por meio de ExAllocatePoolWithTag que coincide com os seguintes critérios:
  • A solicitação de alocação deve ser para um tamanho menor do que o alocação máxima que caberá em uma página de pool.
  • A solicitação deve corresponder a especificação PoolTag na Registro.
Para detecção de saturação de pool, a primeira página é usada para conter a alocação no final da página. A segunda página é uma página de proteção. Para detecção de pool sem execução, a primeira página é a página de proteção. Ele é seguido por um página que contém a alocação no início da página.

Detecção de estouro é provavelmente o mais usado. Para detecção de saturação, o solicitada a alocação é posicionada no final da primeira página, fazendo backup do tamanho da solicitação do final da página. O tamanho de alocação é arredondado para um limite de 8 bytes. Uma chave de padrão, o tamanho e as informações de marca do pool são escrito para o cabeçalho com os primeiros oito bytes da primeira página. O padrão também é propagada em toda a página. Porque a alocação é posicionada sobre o mais próximo do limite de 8 bytes, pode haver até sete bytes de slop após o alocação. O padrão também é escrito para os bytes de slop após o alocação.

A segunda página é a página de proteção. A página de proteção consiste em uma entrada de tabela de página especial (PTE) está marcado como sem acesso proteção. Marcando esta segunda página com a proteção sem acesso, qualquer código tentando ler ou escrever além do final da primeira página imediatamente faz com que uma violação de acesso que resulte em um Stop 0x0000000A ou mensagem de erro Stop 0x0000001E. Isso permite que alguém depurar o sistema para localizar a instrução exata que causa danos de pool.

Como uma verificação de backup para capturar os infratores que escreve Além do fim da alocação, mas não além do fim da página, o slop bytes no final da alocação são validados durante a solicitação de pool livre (ExFreePoolWithTag). Os bytes de slop são comparados com o padrão de cabeçalho de alocação para determinar se alguma coisa é substituído na área de bytes de slop. Se a verificação não funciona, um erro de parada 0x00000001A ocorre.

Essa verificação não necessariamente encontrar o bloco exato de código que causa danos de pool. No entanto, ele pode ajudar a identificar o componente Isso faz com que o dano.

Para ativar o utilitário de Pool especial, adicione o 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: Máscara de marca pool | Máscara de tamanho de alocação | 0
A máscara de marca do pool é a identificação de marca do pool que contém o mascaramento caracteres do pool no qual você deseja colocar no pool especial. Esta máscara deve ser especificado em hexadecimal na ordem inversa. Essa máscara também pode conter "?" para um único caractere de máscara ou "*" a máscara a partir daqui até o final da marca. Por exemplo, para monitorar todos os pools com uma marca de pool que começa com "Nt", especificar "2A744E" (sem as aspas), que representa "* tN".

O tabela a seguir lista exemplos mais.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Especificação de máscara de tamanho de alocação coloca todas as alocações de pool de um tamanho especificado para o pool especial. Isso também é especificado em hexadecimal. Por exemplo, se todas as alocações de 32 bytes são posicionadas no pool especial, Especifica 0x20.

Quando zero (0x0) for especificado, o utilitário de Pool especial não foi inicializado. Além disso, o utilitário de Pool especial não está inicializado se o valor de registro PoolTag não está definido no registro.
Nome do valor: PoolTagOverruns
Tipo de dados: REG_DWORD
Dados: 1 | 0
1 indica que as saturações de alocação de pool são detectadas para a marca especificada. A alocação está localizada no final da página e o protetor segue a página.

0 indica que as falhas de alocação de pool são detectadas para a marca. A alocação está localizada no início da página e a página de proteção vem antes da página que contém a alocação.

Exemplos de uso comuns para criar essas duas chaves do registro seria o seguinte:
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


Observação Para o Windows NT Terminal Server 4.0, você deve desativar KStackPool Quando você usa um pool especial. Para fazer isso, adicione o seguinte valor do registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nome do valor: EnableKStackPool
Tipo de dados: REG_DWORD
Dados: 0

1 - Pool KStack sempre ativada
2 - Pool KStack habilitada para os computadores que têm 256 MB ou mais memória (padrão)
Se você não fizer essa alteração no Terminal Os computadores de servidor com 256 MB ou mais memória, você pode receber "STOP 0x00000078 (PHASE0_EXCEPTION) "mensagens de erro.


Observação O recurso de Pool especial pode não funcionar no Windows Server 2003 se houver entradas de tabela de página especial insuficiente (PTEs). Esse problema normalmente ocorre em servidores de terminal de usuário único que contêm mais de 1 GB de RAM e que têm os valores de ajuste de gerenciamento de memória do computador definidas para valores padrão. Esse problema não ocorre nas versões de 64 bits do Windows Server 2003.

Uma análise de arquivo de despejo de memória do problema pode conter as seguintes informações:
*** Virtual Memory Usage *** 
Physical Memory: 1015660 ( 4062640 Kb) 
Page File: \??\C:\Pagefile1\pagefile.sys 
Current: 4193280Kb Free Space: 4180856Kb 
Minimum: 4193280Kb Maximum: 4193280Kb 
Available Pages: 552680 ( 2210720 Kb) 
ResAvail Pages: 932179 ( 3728716 Kb) 
Locked IO Pages: 347 ( 1388 Kb) 
Free System PTEs: 187166 ( 748664 Kb) 
Free NP PTEs: 32765 ( 131060 Kb) 
Free Special NP: 117228 ( 468912 Kb) 
Modified Pages: 106 ( 424 Kb) 
Modified PF Pages: 98 ( 392 Kb) 
NonPagedPool Usage: 6599 ( 26396 Kb) 
NonPagedPool Max: 65536 ( 262144 Kb) 
PagedPool 0 Usage: 10697 ( 42788 Kb) 
PagedPool 1 Usage: 1240 ( 4960 Kb) 
PagedPool 2 Usage: 1239 ( 4956 Kb) 
PagedPool 3 Usage: 1265 ( 5060 Kb) 
PagedPool 4 Usage: 1231 ( 4924 Kb) 
PagedPool Usage: 15672 ( 62688 Kb) 
PagedPool Maximum: 90112 ( 360448 Kb) 
Shared Commit: 3866 ( 15464 Kb) 
Special Pool: 511 ( 2044 Kb) <-- very small
Shared Process: 5205 ( 20820 Kb) 
PagedPool Commit: 15672 ( 62688 Kb) 
Driver Commit: 2091 ( 8364 Kb) 
Committed pages: 439832 ( 1759328 Kb) 
Commit limit: 2023823 ( 8095292 Kb)

0: kd> dd nt!MmSpecialPoolRejected l8 
8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.
8057aff0 00000000 00000000 00000000 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
Você pode verificar o problema, o tamanho do Pool especial que é alocado a partir da análise. Nesse caso, o problema ocorre porque os seguintes valores PTE de pool especial são iguais:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Esse problema também pode ocorrer se o valor da entrada do registro MmSpecialPoolRejected é três ou mais.

Para contornar esse problema, configure o valor da entrada do registro PagedPoolSize como um valor que é menor que o tamanho de pool paginável é permitido. Por exemplo, defina a entrada do registro PagedPoolSize para um valor de 256 MB. Se você deseja configurar um valor maior, use o utilitário de Monitor de desempenho para determinar a necessidade do computador para um tamanho de pool paginado maior.

Você pode usar os seguintes valores da entrada do registro PagedPoolSize:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Para o Windows Server 2003 sem um service pack:

Nome do valor: PagedPoolSize
Tipo de dados: REG_DWORD
Dados: 10000000
Base: Hexadecimal

Para o Windows Server 2003 com Service Pack 1 (SP1) instalado:

Nome do valor: PagedPoolSize
Tipo de dados: REG_DWORD
Dados: FFFFFFFF
Base: Hexadecimal

Observação Após fazer as alterações do registro que são descritas neste artigo, reinicie o computador para fazer com que as alterações entrem em vigor.

Se Após você ativar o recurso de Pool especial, o computador pára de responder (trava) e você recebe uma mensagem de erro em uma tela azul durante a inicialização, reinicie o computador usando a opção Última configuração válida. Habilitando o recurso de Pool especial não é gravado para a última boas Entrada de configuração no registro até que após um logon bem-sucedido.

Propriedades

ID do artigo: 188831 - Última revisão: sexta-feira, 19 de abril de 2013 - Revisão: 0.1
A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows XP Professional
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista Home Premium
  • Windows Vista Enterprise
  • Windows Vista Ultimate
  • Windows Vista Service Pack 2
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Service Pack 2
  • Windows 7 Home Premium
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 7 Service Pack 1
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Service Pack 1
Palavras-chave: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 188831

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com