問題タブ [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.
c++ - Microsoft SAL で off-by-one エラーを防ぐ方法
これは、MSDN ( http://msdn.microsoft.com/en-us/library/hh916383.aspx ) で提供されている例で、SAL 注釈が一般的な off-by-one エラーの検出に役立つことを説明しようとしています。
この例がよくわかりません。この例では、関数シグネチャに というパラメーターが含まれているように見えるcount
ため、 を使用In_reads_(count)
して、指しているメモリ空間src
に少なくともそのようなバイト数があることを確認できます。
私の質問は、このような署名付きの関数がある場合はどうなるかです
この場合、署名にはサイズに関する情報は含まれていません。SAL を使用してデバッガーにdest
と同じサイズまたは 1 バイト大きくするように指示できますsrc
か?
visual-studio-2012 - コマンド ラインで MSBUILD を実行するときに、ネイティブ コード分析ログの出力パスを設定する方法
次のように、コマンド ラインで MSBUILD を使用してソリューションをビルドします。
/p:RunCodeAnalysis=True
ネイティブ (PREfast) コードとマネージ (FxCop) コードの両方のコード分析結果を作成することはできますが、私の問題は、ネイティブ コードの分析結果ファイルが、マネージ コードの結果の場合のように配置されないこと$(OutDir)
です。obj
代わりに、各アセンブリ (= )のフォルダーに格納されます$(IntDir)
。
標準ターゲットファイルへのパスを追跡しMicrosoft.CodeAnalysis.Targets
、行を変更しました
に
それは機能しましたが、すべての開発者に自分のシステムでこのファイルを変更するように依頼することはできないため、プロジェクト ファイル内でこれを設定する方法が必要です。私はすでに次の方法を試しましたが、成功しませんでした:
各プロジェクト ファイル (ルート レベル) にプロパティを追加します。
/li>目的のプロパティ値を指定して MSBUILD を呼び出します。
/li>
/li>vcxproj
の後に次の行をファイルに追加して、ターゲット インジェクションを使用します<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
。
標準のコード分析ターゲットに触れずに問題を解決する方法を知っている人はいますか?
c - IRQL レベルの警告を修正するためのプレファスト アノテーション
Windows 7 32 ビット用のデバイス ドライバーを作成しています。WDK バージョン 7600.16385.1 を使用しています。これまでのところ順調に進んでいますが、prefast は IRQL レベルを台無しにしていると言ってきます。特に、共有バッファーをロック/ロック解除しようとすると。
次のようなバッファを表す構造があります。
上記のバッファーをロックおよびロック解除できる2つの関数があります。
ドライバーをコンパイルすると、prefast から次のように通知されます。
そこで、WdfSpinLockAcquire と WdfSpinLockRelease がどのように定義されているかを調べました。
かなり簡単に見えます。そこで、関数を同じように変更しました。
次に、ppbBuff のリークに関する 2 つの警告から、IRQL レベルを正しく復元しないという多くの警告へと進みます。
私はバッファを使用しており、どこにもバグチェックを行っていないため、正しくロックしていると思います。この場合、断食をなだめる方法を知っている人はいますか? ありがとう!
編集:
ロック機能を使用する例を次に示します。
バッファをロックし、保留中のリクエストを削除し、バッファのロックを解除してリクエストを完了します。Prefast は、IRQL レベルを正しく復元していないことを示しています。ロック/クリア/ロック解除/完全なコードをコメントアウトすると、prefast が再び満足します。
編集:
VS2015 と WDK10+SDK10 にアップグレードしました。M'hand BOUGHIAS によって提案された注釈を追加しました。
今、私は以下を取得しています:
_Acquires_lock_ と _Requires_lock_not_held_ が何も定義されていないことに気付いたので、それらを調べたところ、機能するには _PREFAST_ を定義する必要があることに気付きました。そこで、プリプロセッサの定義に _PREFAST_ を追加しました。今はリンクエラーがたくさん出ますが、プリファストエラーはもうありません!
プロジェクトを VS2015 に変換しているときに、何かを台無しにしたと考えました。そこで、標準の KMDF ドライバー プロジェクトを作成し、それを基に構築するための優れたフレームワークを提供します。新しいプロジェクトで静的解析をオンにし、以前と同じように _PREFAST_ を定義しましたが、同じリンク エラーが発生します。