!pool

!pool 扩展显示有关特定池分配或整个系统范围的池的信息。

!pool [Address [Flags]]

参数

Address
指定要显示的池条目。 如果 Address 为 -1,此命令将显示有关进程中所有堆的信息。

如果 Address 为 0 或省略,此命令将显示有关进程堆的信息。

标记
指定要使用的详细信息级别。 这可以是以下位值的任意组合;默认值为零:

位 0(0x1)
使显示包含池内容,而不仅仅是池标头。

位 1(0x2)
使显示禁止显示所有池的池标头信息,但实际包含指定 Address 的池标头信息除外。

位 31(0x80000000)
在显示中不显示对池类型和池标记的说明。

DLL

Kdexts.dll

其他信息

有关内存池的信息,请参阅 Windows 驱动程序工具包(WDK)文档和 Mark Russinovich 和 David Solomon 编写的 Microsoft Windows 内部资料

注解

在 Windows XP 和更高版本的 Windows 中,!pool 扩展显示与每个分配关联的池标记。 还会显示该池标记的所有者。 此显示基于 pooltag.txt 文件的内容。 此文件位于 Windows 调试工具安装的分类子目录中。 如果需要,可以编辑此文件,以添加与项目相关的其他池标记。

警告 如果在与当前版本相同的目录中安装 Windows 调试工具的更新版本,则会覆盖该目录中的所有文件,包括 pooltag.txt。 如果修改或替换示例 pooltag.txt 文件,请确保将其副本保存到其他目录。 重新安装调试器后,可以将保存的 pooltag.txt 复制到默认版本。

如果 !pool 扩展报告池损坏,则应使用 !poolval 进行调查。

以下是一个示例。 如果 Address 指定 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

......