问题标签 [prefast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
341 浏览

c++ - Microsoft SAL 如何防止非一错误

这是 MSDN ( http://msdn.microsoft.com/en-us/library/hh916383.aspx )上给出的一个示例,它试图解释 SAL 注释可以帮助找到一个常见的错误。

我不太明白这个例子。在这个例子中,看起来函数签名包含一个名为 的参数count,因此我们可以使用In_reads_(count)它来确保src指向的内存空间至少具有这样的字节数。
我的问题是,如果有这样的签名函数怎么办

在这种情况下,签名不包含有关大小的任何信息。我可以使用 SAL 告诉调试器dest应该是相同大小还是比 1 字节大src

0 投票
3 回答
1967 浏览

visual-studio-2012 - 在命令行上运行 MSBUILD 时如何设置本机代码分析日志的输出路径

我在命令行上使用 MSBUILD 构建我的解决方案,如下所示:

/p:RunCodeAnalysis=True为本地(PREfast)和托管(FxCop)代码创建代码分析结果,但我的问题是,本地代码的分析结果文件没有像$(OutDir)托管代码结果那样放入。它们存储在obj每个程序集 (= $(IntDir)) 的文件夹中。

我跟踪到标准目标文件的路径Microsoft.CodeAnalysis.Targets,然后更改了行

它有效,但我不能要求每个开发人员在他/她的系统上更改这个文件,所以我需要一种在项目文件中设置它的方法。我已经尝试了以下方法,但没有成功:

  1. 为每个项目文件添加一个属性(在根级别):

    /li>
  2. 使用所需的属性值调用 MSBUILD:

    /li>
  3. 通过将此行添加到vcxproj文件中来使用目标注入<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

    /li>

有谁知道,如何在不触及标准代码分析目标的情况下解决问题?

0 投票
1 回答
762 浏览

c - 用于修复 IRQL 级别警告的 Prefast 注释

我正在为 Windows 7 32 位编写设备驱动程序。我正在使用 WDK 版本 7600.16385.1。到目前为止一切进展顺利,但 prefast 一直告诉我我搞砸了 IRQL 级别。特别是当我尝试锁定/解锁共享缓冲区时。

我有一个表示缓冲区的结构,如下所示:

我有两个功能可以锁定和解锁所述缓冲区:

当我编译我的驱动程序时,prefast 告诉我:

因此,我查看了 WdfSpinLockAcquire 和 WdfSpinLockRelease 是如何定义的:

看起来很简单。所以我改变了我的功能看起来一样:

然后我从两个警告变成了许多关于泄漏 ppbBuff 并且仍然没有正确恢复 IRQL 级别的警告:

我使用缓冲区,我没有在任何地方检查错误,所以我认为我锁定正确。任何人都知道如何在这种情况下安抚prefast?谢谢!

编辑:

这是我使用锁定功能的示例:

我锁定缓冲区,删除任何挂起的请求,解锁缓冲区并完成请求。Prefast 告诉我我没有正确恢复 IRQL 级别。当我注释掉锁定/清除/解锁/完成代码时,prefast 又高兴了。

编辑:

我已经升级到VS2015和WDK10+SDK10。我添加了 M'hand BOUGHIAS 建议的注释:

现在我得到以下信息:

我注意到 _Acquires_lock_ 和 _Requires_lock_not_held_ 定义为空,所以我查看了它们并注意到它们需要定义 _PREFAST_ 才能工作。所以我将 _PREFAST_ 添加到我的预处理器定义中。现在我得到了一堆链接错误,但没有更多的 prefast 错误!

我想我在将项目转换为 VS2015 时搞砸了。所以我创建了标准的 KMDF 驱动程序项目,它为您提供了一个很好的构建框架。我在新项目中打开了静态分析并像以前一样定义了_PREFAST_,它也给了我同样的链接错误。

0 投票
1 回答
235 浏览

c - 预快速警告:“算术溢出:32 位值被移位,然后转换为 64 位值。”

我已经声明了这样的宏:

使用这样的宏:

其中Euint64_t数据类型 Puint8_t 数据类型

Prefast 发出警告:C6297:算术溢出:32 位值被移位,然后转换为 64 位值。结果可能不是预期值。

如何解决这个问题?