!pool

A extensão !pool exibe informações sobre uma alocação de pool específica ou sobre o pool inteiro de todo o sistema.

!pool [Address [Flags]]

Parâmetros

Endereço
Especifica a entrada do pool a ser exibida. Se o Endereço for -1, esse comando exibirá informações sobre todos os heaps no processo.

Se o Endereço for 0 ou omitido, esse comando exibirá informações sobre o heap do processo.

Sinalizadores
Especifica o nível de detalhes a serem usados. Isso pode ser uma combinação de qualquer um destes valores de bit; o padrão é zero:

Bit 0 (0x1)
Faz com que a exibição inclua o conteúdo do pool, não apenas os cabeçalhos do pool.

Bit 1 (0x2)
Faz com que a exibição suprima as informações de cabeçalho do pool para todos os pools, exceto aquele que realmente contém o Endereço especificado.

Bit 31 (0x80000000)
Suprime a descrição do tipo de pool e da marcação de pool na exibição.

DLL

Kdexts.dll

Informações Adicionais

Para obter informações sobre pools de memória, confira a documentação do Kit de Driver do Windows (WDK) e Microsoft Windows Internals, de Mark Russinovich e David Solomon.

Comentários

No Windows XP e em versões posteriores do Windows, a extensão !pool exibe a marcação de pool associada a cada alocação. O proprietário dessa marcação de pool também é exibido. Essa exibição é baseada no conteúdo do arquivo pooltag.txt. Esse arquivo está localizado no subdiretório de triagem da instalação das Ferramentas de Depuração para Windows. Se desejar, você pode editar esse arquivo para adicionar marcações de pool adicionais relevantes ao seu projeto.

Aviso Se você instalar uma versão atualizada das Ferramentas de Depuração para Windows no mesmo diretório que a versão atual, ela substituirá todos os arquivos nesse diretório, incluindo pooltag.txt. Se você modificar ou substituir o arquivo de pooltag.txt de exemplo, salve uma cópia dele em um diretório diferente. Depois de reinstalar os depuradores, você pode copiar o pooltag.txt salvo sobre a versão padrão.

Se a extensão !pool relatar corrupção de pool, você deve usar !poolval para investigar.

Veja um exemplo. Se o Endereço especificar 0xE1001050, os cabeçalhos de todos os pools nesse bloco serão exibidos e o próprio 0xE1001050 será marcado com um asterisco (*).

kd> !pool e1001050 
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
 e1001040 size:   10 previous size:   40  (Free)       Mm  
*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
 e1001070 size:   10 previous size:   10  (Allocated)  Symt
 e1001080 size:   40 previous size:   10  (Allocated)  ObDm
 e10010c0 size:   10 previous size:   40  (Allocated)  ObDi
.....

Neste exemplo, a coluna mais à direita mostra a marcação de pool. A coluna à esquerda mostra se o pool está livre ou alocado.

O comando a seguir mostra os cabeçalhos e o conteúdo do pool:

kd> !pool e1001050 1
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
 e1001008  ffffffff 0057005c 004e0049 004f0044
    e1001018  ffffffff 0053005c 00730079 00650074

 e1001040 size:   10 previous size:   40  (Free)       Mm  
 e1001048  ffffffff e1007ba8 e1501a58 01028101
    e1001058  ffffffff 00000000 e1000240 01028101

*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
 e1001058  ffffffff 00000000 e1000240 01028101
    e1001068  ffffffff 00000000 e10009c0 01028101

 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
 e1001068  ffffffff 00000000 e10009c0 01028101
    e1001078  ffffffff 00000000 00000000 04028101

......