Поделиться через


!Бассейн

Расширение !pool отображает сведения о выделении определенного пула или о всем системном пуле.

!pool [Address [Flags]]

Параметры

Адрес
Указывает отображаемую запись пула. Если адрес равен -1, эта команда отображает сведения обо всех кучах в процессе.

Если адрес равен 0 или опущен, эта команда отображает сведения о куче процесса.

Flags
Указывает уровень детализации, используемый. Это может быть любое сочетание следующих битовых значений; Значение по умолчанию равно нулю:

Bit 0 (0x1)
Позволяет отображать содержимое пула, а не только заголовки пула.

Бит 1 (0x2)
Приводит к подавлению сведений о заголовке пула для всех пулов, за исключением того, который фактически содержит указанный адрес.

Бит 31 (0x80000000)
Подавляет описание типа пула и тега пула в отображении.

DLL-библиотеки

Kdexts.dll

Дополнительная информация

Сведения о пулах памяти см. в документации по комплекту драйверов Windows (WDK) и внутренних компонентах Microsoft Windows, марку Руссиновичу и Дэвиду Соломону.

Замечания

В Windows XP и более поздних версиях Windows расширение пула !отображает тег пула , связанный с каждым выделением. Также отображается владелец этого тега пула. Это отображение основано на содержимом файла pooltag.txt. Этот файл находится в подкаталоге для установки средств отладки для Windows. Если вы хотите, можно изменить этот файл, чтобы добавить дополнительные теги пула, относящиеся к проекту.

Предупреждение при установке обновленной версии средств отладки для Windows в том же каталоге, что и текущая версия, она перезаписывает все файлы в этом каталоге, включая pooltag.txt. При изменении или замене примера файла pooltag.txt обязательно сохраните копию в другом каталоге. После переустановки отладчиков можно скопировать сохраненные pooltag.txt по умолчанию.

Если пул расширений !pool сообщает о повреждении пула, следует использовать !poolval для изучения.

Ниже приведен пример. Если адрес указывает 0xE1001050, отображаются заголовки всех пулов в этом блоке, а сам 0xE1001050 помечается звездочкой (*).

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
.....

В этом примере в правом столбце показан тег пула. Столбец слева от этого показывает, является ли пул свободным или выделенным.

Следующая команда показывает заголовки пула и содержимое пула:

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

......