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

Traduções de Artigos Traduções de Artigos
Artigo: 188831 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Danos de agrupamento podem fazer com que muitos dos mais evasive problemas de danos de agrupamento do Windows NT. é causado quando o modo de kernel componente escreve para a memória fora da área de agrupamento atribuída. Gravando memória para além do limite da respectiva área atribuída, é provável que outro área de memória atribuída, possivelmente pertencente a outro componente, será substituída. Esses danos podem causar problemas, tais como ecrãs azuis no completamente independentes áreas de código. Um componente de modo kernel ler para além da respectiva área atribuída pode também cause problemas.

É causado pelo equipamento de origem Controladores de fabricantes (OEM) ou problemas no Windows, são problemas de danos de agrupamento Alguns dos mais difícil identificar. Normalmente, tudo o que pode ser visto num análise de informações de estado de falha de sistema é o sintoma do problema real, tal como uma área de dados tornar-se danificado e que causem problemas num bloco completamente independente do código. Até agora, tenha sido quase impossível localizar o segmento de código que danificar a memória.

Agora pode ser identificada a origem dos danos de agrupamento na instrução danificarem o conjunto de dados. Um novo utilitário de gestão de memória Isto é especial do conjunto nomeado está incluído no Windows NT 4.0 Service Pack 4 (SP4), Windows 2000, O Windows XP, Windows Server 2003, Windows Vista e Windows Server 2008. O utilitário de conjunto especial identifica o componente de modo kernel é danificar os dados de agrupamento por escrito memória fora do seu território atribuída.

Nota Optimização da memória não é aplicável para o Windows Vista e Windows Server 2008. No entanto, a funcionalidade de conjunto especial aplicável para estes produtos.

Mais Informação

Importante Esta secção, método ou tarefa contém passos que explicam como modificar o registo. No entanto, podem ocorrer problemas graves se modificar o registo incorrectamente. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Para obter protecção acrescentada, cópia do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para mais informações sobre como efectuar cópias de segurança e restaurar o registo, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
322756 Como efectuar cópias 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 conjuntos que é pedida através de ExAllocatePoolWithTag que corresponda aos critérios seguintes:
  • O pedido de atribuição tem de ser para um tamanho mais pequeno do que o atribuição máxima que cabe numa página de agrupamento.
  • O pedido tem de corresponder a especificação de PoolTag no registo.
Para detecção de sobrecarga de agrupamento, a primeira página é utilizada para conter a repartição no fim da página. A segunda página é uma página de protecção. Para detecção do conjunto contra o encaixe, a primeira página é a página de protecção. É seguido um página que contém a atribuição no início da página.

Detecção de sobrecarga é provavelmente mais utilizadas. Para detecção de sobrecarga, o solicitado a atribuição está posicionada no final da primeira página por cópias de segurança a tamanho do pedido de fim da página. O tamanho da atribuição é arredondado para um limite de 8 bytes. Uma chave de padrão, o tamanho e as informações de etiqueta do conjunto são escritas do cabeçalho, os primeiros oito bytes da primeira página. O padrão Também é propagada ao longo da página. Uma vez que a atribuição é posicionada sobre o mais próximo do limite de 8 bytes, poderão existir, no máximo, sete slop bytes, a seguir a Alocação. O padrão é também escrito os bytes de slop a seguir a Alocação.

A segunda página é a página de protecção. A página de protecção consiste de uma entrada de índice especial de página (PTE) marcada com sem acesso protecção. Marcando esta segunda página com protecção sem acesso, qualquer código a tentar ler ou escrever para além do fim da primeira página imediatamente faz com que uma violação de acesso que resulta num erro Stop 0x0000001E ou Stop 0x0000000A. Isto permite que alguém o sistema para localizar a instrução exacta de depuração que provoca danos de agrupamento.

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

Esta verificação não encontra necessariamente o bloco exacto de código que provoca danos de agrupamento. No entanto, pode ajudar a identificar o componente que faz com que os danos.

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


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

O tabela que se segue lista mais exemplos.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Especificação da máscara do afectação tamanho 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 alocações de 32 bytes são posicionadas no conjunto especial, especificar 0x20.

Quando não for especificado zero (0x0), 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 está definido no registo.
Nome do valor: PoolTagOverruns
Tipo de dados: REG_DWORD
Dados: 1 | 0
1 indica que os excessos de alocação de conjunto são detectados para o marca especificada. A atribuição está localizada no fim da página e a guarda página a seguir.

0 indica que o underruns de atribuição do conjunto são detectadas para o 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 duas chaves de registo deverá ser 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


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 de KStack sempre activada
2 - Activado para computadores que tenham 256 MB ou mais de conjunto de KStack memória (predefinição)
Se não efectuar esta alteração de Terminal Computadores de servidor que têm 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 entradas da tabela insuficiente página especial (PTEs). Este problema normalmente ocorre em servidores de terminais de utilizador único que contenham 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ção de 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 o problema pelo tamanho do conjunto especial que é atribuído a partir da análise. Neste caso, o problema ocorre porque os seguintes valores PTE conjunto especial são iguais:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Este problema também poderá ocorrer se o valor da entrada de registo MmSpecialPoolRejected é 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 para um valor 256 MB. Se pretender configurar um valor maior, 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 Windows Server 2003 sem um service pack:

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

Para 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 qualquer uma das alterações de registo que são descritas no presente artigo, reinicie o computador para fazer com que as alterações tenham efeito.

IF Depois de activar a funcionalidade de conjunto especial, o computador deixa de responder deixa de (responder), e receber uma mensagem de erro num ecrã azul durante o arranque, reinicie o computador utilizando a opção última configuração correcta. Activar a funcionalidade de conjunto especial não é escrito para a última boa conhecida Entrada de configuração no registo após um início de sessão com êxito.

Propriedades

Artigo: 188831 - Última revisão: 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 Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • 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 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

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