你可以使用PREfast来分析内核模式的驱动(KMDF)和其他内核模式的组件。你也可以使用PREfast来分析用户模式的驱动,即UMDF。PREfast是WDK自带的,你不需要自己再次安装。
默认情况下, PREfast是根据KMDF的规则来分析代码的。为了能够分析UMDF,你必须设置分析模式为__user_driver,详情见 “如何指定PREfast分析模式”, 或者更简单的方式是,直接忽略内核相关的警告.
PREfast分析模式决定了它分析代码是所采用的规则。The analysis-mode annotation that is defined in %wdk%/inc/ddk/driverspecs.h informs PREfast whether a particular body of code is user-mode or kernel-mode code and whether the code is actually a driver. This annotation applies to an entire source file.
分析模式可以是下面模式定义中的一个:
__kernel_driver
对应内核驱动代码. 这个是缺省的分析模式。
__kernel_code
对应内核模式非驱动代码。
__user_driver
对应用户模式的驱动代码。
__user_code
对应用户模式非驱动代码。
如果__kernel_driver 分析模式对于一个特定的驱动来说,是一个错误的分析的模式,你可以在源码文件或者合适的头文件中插入合适的分析模式定义,来实现分析模式的自定义,当然了,这个定义必须放在任何函数之前,最好的一个做法就是放在#include 或者语句之后。
1. 打开你的编译环境的窗口。
2. 使用 cd 命令进入你的源码目录.
3. 输入prefast build, 也可以带有build的参数,例如:
prefast build –cZ
PREfast分析代码,然后把分析的结果写入到xml文件,缺省的xml文件是Defects.xml,它的路径是 %wdk%/tools/pfd/。 你如果想写到别的目录下,你可以使用 /LOG= 参数来切换.
你可以使用下面的命令来显示分析的结果:
· 使用prefast view 命令来在窗口中显示分析结果。如下图:
· 使用prefast list 命令在编译环境中显示检测结果. 就是在那个cmd窗口下显示。
我就着重介绍一下PREfast defect log viewer 吧,因为这个我感觉用着比较方便,它提供了一个图形化的窗口。
在Message List中, 你可以有如下操作:
· 点击列表头—Description, Warning, Source Location, or In Function—用来给这些消息排序.
· 双击一个消息就打开了View Annotated Source 界面,显示了这个消息相关的代码段.如下图
注:点击Show Entire File按钮显示整个文件。
· 点击Filter按钮 显示了过滤规则,在这里你可以选择相关的过滤规则。如下图:
注:点击Invert隐藏你所选中的过滤规则。