Artigo: 188831 - Última revisão: quarta-feira, 7 de Outubro de 2009 - Revisão: 11.0

Como utilizar a funcionalidade de conjunto especial para isolar os danos de agrupamento

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.
Expandir tudo | Reduzir tudo

Sumário

Danos de agrupamento podem causar muitos dos problemas mais evasive com Windows NT. conjunto danos é causado quando escreve um componente de modo kernel para a memória fora da área de agrupamento atribuída. Ao escrever para a memória para além do limite da respectiva área atribuída, é provável que outra área do atribuída memória, possivelmente pertencente a outro componente, seja substituída. Este problema pode causar problemas como ecrãs azuis nas áreas completamente não relacionadas de código. Um componente de modo kernel ler para além da área atribuída também pode causar problemas.

Se o for causado por controladores de fabricantes de equipamento original (OEM) ou problemas no Windows, problemas de danos do conjunto são algumas das mais difícil identificar. Normalmente, tudo o que pode ser visto numa análise de informação de falha é o sintoma do problema real, tal como uma área de dados ficar problemas danificados e que num bloco completamente não relacionado de código. Até agora, foi quase impossível localizar o segmento de código danifica a memória.

A origem dos danos do conjunto agora pode ser identificada na instrução fazendo com que os danos de agrupamento. Um novo utilitário de gestão de memória que é denominado conjunto 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 conjunto especial identifica o componente de modo kernel que é a danificar o conjunto de dados escrevendo à memória fora da respectiva área atribuída.

Nota Optimização da memória não se aplica ao Windows Vista e Windows Server 2008. No entanto é aplicada a funcionalidade de conjunto especial para estes produtos.

Mais Informação

importante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
322756  (http://support.microsoft.com/kb/322756/ ) Como efectuar uma cópia de segurança e restaurar o registo no Windows


O utilitário de conjunto especial atribui duas páginas de memória virtual para cada atribuição de conjunto requisitada através de ExAllocatePoolWithTag que correspondem aos seguintes critérios:
  • O pedido de atribuição tem de ser para um tamanho menor do que a atribuição máxima cabe numa página de agrupamento.
  • O pedido tem de corresponder a especificação de PoolTag no registo.
Para detecção de conjunto de sobrecarga, a primeira página é utilizada para conter a atribuição no fim da página. A segunda página é uma página de protecção. Para detecção de conjunto de falta de dados, a página de primeira é a página de protecção. É seguido por uma página que contém a atribuição no início da página.

Sobrecarga da detecção é provavelmente o mais utilizado. Para detecção de sobrecarga da atribuição pedida está posicionada no fim da primeira página por cópias o tamanho do pedido do fim da página. O tamanho da atribuição é arredondado por excesso um limite de 8 bytes. Uma chave de padrão, o tamanho e as informações de marca de conjunto são escritas no cabeçalho nos oito primeiros bytes da primeira página. O padrão também é propagado ao longo da página. Uma vez que a atribuição encontra-se sobre o limite mais próximo de 8 bytes, pode existir até sete bytes slop após a atribuição. O padrão é também escrito os bytes slop após a atribuição.

A segunda página é a página protecção. A página de protecção é constituída por uma entrada de tabela especial de página (PTE, page table ENTRY) que está marcada com protecção de acesso não. Por marcar esta segunda página com protecção de acesso não, qualquer código tentar ler ou escrever para além do fim da primeira página imediatamente faz com que uma violação de acesso que provoca um erro de Stop 0x0000001E ou de ' Stop 0x0000000A '. Isto permite que alguém o sistema para localizar a instrução exacta que causa danos de conjunto de depuração.

Como verificação de cópia de segurança para detectar identificados escrevem para além do fim da atribuição mas não para além do fim da página, os bytes slop no fim da atribuição são validados durante o pedido de conjunto livre (ExFreePoolWithTag). Os bytes slop são comparados com o padrão no cabeçalho da atribuição para determinar se alguma coisa é substituída na área de byte slop. Se a verificação de verificação não funcionar, ocorre um erro Stop 0x00000001A.

Esta verificação não encontrará necessariamente bloco de código que causa danos conjunto exacto. No entanto, pode ajudar a identificar o componente que faz com que os danos.

Para activar o utilitário de conjunto especial, adicione as seguintes chaves e valores no registo:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


nome do valor : PoolTag
tipo de dados : REG_DWORD
dados : conjunto de máscara de código | máscara de tamanho de alocação | 0
A máscara de código conjunto é o ID de etiqueta do agrupamento contém caracteres de máscaras do conjunto no qual pretende colocar no conjunto especial de. Esta máscara tem de especificar em hexadecimal em ordem inversa. Esta máscara também poderão conter "?" para um único carácter de máscara ou "*" a máscara a partir daqui para o fim da tag. Por exemplo, para monitorizar todos os recursos com um código de conjunto que começa com "Nt", especifique "2A744E" (sem as aspas), que representa "* tN".

A tabela seguinte lista mais exemplos.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Especificação de máscara de tamanho de atribuição coloca todas as atribuições de conjunto de um tamanho especificado para o conjunto especial. Isto também é especificado em hexadecimal. Por exemplo, se todas as atribuições de 32 bytes estão posicionadas no conjunto especial, especificar 0 x 20.

Se for especificado zero (0 x 0), o utilitário de conjunto especial não está inicializado. Além disso, o utilitário de conjunto especial não está inicializado se o valor de registo PoolTag não estiver definido no registo.
nome do valor : PoolTagOverruns
tipo de dados : REG_DWORD
dados : 1 | 0
1-indica que excessos de atribuição do conjunto são detectados para o código especificado. A atribuição é localizada na extremidade da página e a página de protecção a seguir.

0 indica que são detectadas underruns de alocação de conjunto para a tag. A atribuição está localizada no início da página e a página de protecção é fornecido antes da página que contém a atribuição.

Exemplos comuns de utilização para criar estas chaves de dois registo seria da seguinte forma:
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


Nota Para o Windows NT Terminal Server 4.0, tem de desactivar KStackPool quando utiliza o conjunto especial. Para tal, adicione o seguinte valor de registo:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


nome do valor : EnableKStackPool
tipo de dados : REG_DWORD
dados : 0

1 - conjunto KStack sempre activado
2 - KStack agrupamento activado para computadores com 256 MB ou mais memória (predefinição)
Se não efectuar esta alteração em computadores de servidor de terminais que tenham 256 MB ou mais memória, poderá receber "STOP 0x00000078 (PHASE0_EXCEPTION)" mensagens de erro.


Nota A funcionalidade de conjunto especial poderá não funcionar no Windows Server 2003, se existirem insuficiente especiais tabela entradas (páginas PTE, page table entries). Este problema normalmente ocorre em servidores de terminais único utilizador que contêm mais do que 1 GB de RAM e que tenham os valores de optimização de gestão de memória do computador definido para os valores predefinidos. Este problema não ocorre em versões de 64 bits do Windows Server 2003.

Uma análise de ficheiro de informações de estado da memória do problema poderá 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
Pode verificar se o problema pelo tamanho do conjunto de especial é atribuído da análise. Neste caso, o problema ocorre porque os seguintes valores de PTE, page table ENTRY conjunto especial forem iguais:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Este problema também poderá ocorrer se o valor da entrada de registo MmSpecialPoolRejected for três ou mais.

Para contornar este problema, configure o valor da entrada de registo PagedPoolSize para um valor menor que o tamanho de bloco paginado é permitido. Por exemplo, defina a entrada de registo PagedPoolSize um valor de 256 MB. Se pretender configurar um valor superior, utilize o utilitário de monitor de desempenho para determinar o requisito do computador para um tamanho de bloco paginado.

Pode utilizar os seguintes valores para entrada de registo 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

Nota Depois de efectuar as alterações de registo que são descritos neste artigo, reinicie o computador para fazer com que as alterações tenham efeito.

Se depois de activar a funcionalidade de conjunto especial, o computador deixa de responder (não reage) e recebe mensagem de erro num ecrã azul durante o arranque, reinicie o computador utilizando a opção Última configuração em condições conhecida. Activar a funcionalidade de conjunto especial não é escrito para a última entrada de configuração em condições conhecida no registo até após um início de sessão com êxito.

A informação contida neste artigo aplica-se a:
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT 4.0 Service Pack 4
  • Windows Vista Enterprise
  • Windows Vista Home Premium
  • Windows Vista Ultimate
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
Palavras-chave: 
kbmt kbenv kbhowto kbqfe KB188831 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 188831  (http://support.microsoft.com/kb/188831/en-us/ )