Poolmon负数是什么意思?

时间:2019-03-12 09:13:36

标签: windows memory-leaks driver

我正在使用Win 10 SDK中的poolmon分析内存泄漏,在驱动程序卸载后立即运行它。我的命令行是

poolmon.exe -s -e -g -r -n poolmondump.txt

poolmon /?中的参数定义

-s                  Display session pool
-n [Logfile]        Take a pool snapshot
                    Logfile maybe specified, default is poolsnap.log
-g [PoolTagFile]    Display driver information using PoolTagFile
                    If PoolTagFile is not specified
                    use 'pooltag.txt' from current directory
-e                  Display totals
-r                  Print memory summary information

一段输出是

 Tag  Type     Allocs         Frees    Diff   Bytes    Per Alloc    Mapped_Driver
  SIFP Paged 245366784   2359304  243007480      -1         17       [MyDriver.sys]
  SIFP Nonp          7         7         0       -1         -1       [MyDriver.sys]

有时Diff为负数

 Tag  Type     Allocs         Frees    Diff   Bytes    Per Alloc    Mapped_Driver
 NweN Paged    529879   4784171  -4254292      -1          1        [MyDriver.sys]
 PBDN Paged        43        66       -23       1          0        [MyDriver.sys]

如何理解?怎么处理呢? 我正在尝试重命名标签,但是每天都有一些新内容。
这仅在测试设置中使用的虚拟机之一上发生。

1 个答案:

答案 0 :(得分:-1)

PoolMan驱动程序存在于Windows中,它是:

  

显示操作系统收集的有关内存的数据   系统分页和非分页内核池中的分配,以及   用于终端服务会话的内存池。数据分组   通过池分配标签。

     

驱动程序开发人员和测试人员经常使用PoolMon来检测内存泄漏   当他们创建新驱动程序时,更改驱动程序代码或强调   司机。您还可以在测试的每个阶段使用PoolMon来查看   驾驶员的分配和自由操作模式,并揭示如何   在任何给定时间,驱动程序正在使用大量池内存。

以下是命令

 poolmon [/iTag] [/xTag] [/c [LocalTagFile]] [/g [PoolTagFile]] [/s[TSSessionID]] [ /p | /p /p ] [/e] [/( | /)]  [/t | /a| /f| /d | /b| /m] [/l] [/n [File]] [/? | /h]

说明:

  

参数

     

/ i仅显示具有指定池标记的分配。您可以   PoolMon命令中有多个/ i参数。不要输入空格   / i和Tag参数之间。

     

/ x从显示中排除具有指定标签的分配。您   PoolMon命令中可以有多个/ x参数。不要输入   / x和Tag参数之间的空格。

     

Tag指定池标记或池标记模式。池标签是   区分大小写。 Tag参数可以包含星号()   代表任何字符的零个或多个实例或一个问号   (?*)代表任何字符的一个实例。不要开始标签   带有星号。

     

/ c在显示(Mapped_Driver)中添加一列,列出了以下驱动程序   使用每个池标记的本地计算机。支持此功能   仅在Windows的32位版本上。

     

LocalTagFile指定本地标记文件的路径和文件名,   包含本地驱动程序列表的格式化文本文件   计算机及其分配的标签值。这个文件就是数据   使用/ c时出现的Mapped_Driver列的源   参数。默认值为localtag.txt。

     

如果使用/ c参数,但不为   LocalTagFile,而PoolMon在以下位置找不到localtag.txt文件:   当前目录,PoolMon通过扫描生成localtag.txt文件   本地计算机上的驱动程序   (%SystemRoot%\ System32 \ Drivers * .sys)。

     

/ g在显示Windows的显示(Mapped_Driver)中添加一列   组件和分配每个标签的常用驱动程序。

     

PoolTagFile指定格式化文本文件的路径和文件名   列出了Windows组件和常用驱动程序的名称   以及它们分配的标签值。此文件是   使用/ g参数时出现的Mapped_Driver列。

     

默认值为pooltag.txt,这是Microsoft提供的文件。 Pooltag.txt   包含在Windows驱动程序工具包的Tools \ Other子目录中   (WDK)。

     

/ s显示来自终端服务会话池的分配。

     

TSSessionID仅显示来自指定会话池的分配。   不要在/ s参数和TSSessionID之间输入空格   论点。

     

/ p仅显示非页面缓冲池中的分配。

     

/ p / p仅显示页面缓冲池中的分配。

     

/ e显示池总数。总计显示在   显示。

     

/(或/)打开按更改排序模式。使用/(或/),PoolMon   按值的变化进行排序(分配,自由操作和   字节),而不是值。每个值的变化都显示在   值后面的括号。

     

与/ a,/ f,/ b或/ m一起使用。例如,poolmon / a对显示进行排序   按分配数,而poolmon /(/ a按   分配数量的变化。

     

左括号和右括号字符相同   效果,可以互换使用。

     

/ t按标签名称的字母顺序排序。这是默认设置。

     

/ a按分配数量对标签进行排序。

     

/ f按免费操作次数对标签进行排序。

     

/ d按字节分配和字节之间的差异对标签进行排序   释放。

     

/ b按使用的字节对标签进行排序。

     

/ m按每个分配的字节数对标签进行排序。

     

/ l关闭突出显示。默认情况下,PoolMon突出显示   自上次更新以来已更改。

     

/ n将PoolMon输出的快照保存到文件中,而不是   在命令窗口中显示它。您可以包含其他命令行   参数来配置输出。

     

由于快照数据是静态的,因此显示更改的列   显示在PoolMon显示中的值中不会出现在快照文件中。

     

文件指定快照文件的名称和位置。默认值   是poolsnap.log。

     

/?或/ h显示命令行语法。 /?和/ h参数具有   具有相同的效果,可以互换使用。