ドライバーのコード分析を実行する方法
ドライバーのコード分析では、ソース コードで発生する可能性のある欠陥に関する情報を提供します。 コード分析は手動で実行することも、ビルドごとに自動的に実行することもできます。
このトピックの内容は以下のとおりです。
重要
ドライバーのコード分析は Windows 24H2 WDK と EWDK で利用できますが、今後廃止される予定であることをお勧めします。
今後、CodeQL はドライバーの主要な静的分析ツールになります。 CodeQL には、クエリ対象のデータベースとしてコードを扱う強力なクエリ言語が用意されているため、特定の動作やパターンなどに対するクエリを簡単に記述できます。
CodeQL の使用方法の詳細については、「 CodeQL と静的ツール ロゴ テストを参照してください。
コード分析の実行
ドライバーのソース コードでコード分析を手動で実行するには
- Visual Studio で、ドライバー プロジェクト ファイルまたはソリューションを選択し、分析するプロジェクト構成とプラットフォームを選択します。
- [分析] または [ビルド] メニューの [ソリューションでコード分析を実行] をクリックします。
ドライバーのソース コードでコード分析を各ビルドで自動的に実行するには
- Visual Studioの ソリューション エクスプローラー で 、ドライバー プロジェクトまたはソリューションを右クリックし、 [プロパティ ] をクリックします 。
- プロジェクトのプロパティ ダイアログ ボックスで、 [コード分析] をクリックします。
- [C/C++ のコード分析プロパティ] ページで、分析するプロジェクトの構成とプラットフォーム (Windows 8 や Win32 など) を選択します。
- [ビルド時にC/C++ のコード分析を有効にする] を選択します。
- [ルール セット] で、 [Microsoft Driver Recommended Rules] を選択 します。 これは、ドライバーの既定の規則セットです。
- [ビルド] メニューで [ソリューションのビルド] をクリックします。
コード分析結果の表示
考えられる欠陥がソース コードで見つかった場合は、 [コード分析結果] ウィンドウに、コード分析の警告番号と、欠陥が発生したソース ファイルの行番号が表示されます。
欠陥を表示するには
[コード分析結果] ウィンドウで行番号をクリックすると、 [コード分析結果] ウィンドウに欠陥の説明が表示されます。
[コード] ウィンドウにソース コードが表示され、欠陥が発生した場所が示されます。
特定の警告の詳細を確認するには、 [コード分析結果] ウィンドウの [警告] をクリックします。
ビルドに関連付けられているコード分析ログ ファイルを表示するには
- ビルド構成とプラットフォーム (たとえば、
\\Windows7Release\\x64
)のディレクトリに移動します。 - 推奨ルールを使用すると、ログ ファイルの名前は
vc.\*codeanalysis.xml
AA になります。 Windows Server 2012 のドライバーを作成する場合は、このファイルを使用してドライバー検証ログが作成されます。
欠陥の報告を抑制する
場合によっては、特定の警告メッセージのレポートを抑制したい場合があります。たとえば、警告が主に情報であり、エラーの原因がわかっている場合です。
警告メッセージを抑制するには
報告された欠陥のインスタンスを削除するには、 [コード分析結果] ウィンドウで行番号と警告を選択します。
展開された警告の説明で、 アクション>メッセージの抑制>ソース内をクリックします。
抑制指定子を持つプラグマ警告ディレクティブは、#pragma 警告ステートメントの直後のコード行に対してのみ警告を抑制します。
#pragma warning(suppress: 6014)
カーネル モード ドライバーの警告 C6262 のスタック使用制限の変更
ユーザー モードとカーネル モードのコードでは、スタック領域が制限され、スタックのページのコミットに失敗すると、スタック オーバーフロー例外が発生します。 使用可能なスタック領域の合計は 12 KB (キロバイト)しかないため、カーネル モードでは特にスタック使用率が高くなります。 カーネル モード コードでは、スタックの使用を積極的に制限する必要があります。
コード分析ツールは、関数で 1 KB (キロバイト)を超えるスタック領域がローカルで使用されている場合に警告 C6262 を発行します。 リソースを集中的に消費する可能性がある関数を調査する場合は、 C6262 で使用されるスタックしきい値の制限をカスタマイズまたは下げます。 スタックのしきい値の制限を下げると、コード分析ツールでさらに問題が見つかる可能性があります。 その後、これらのスタックの使用に関する問題に対処することができます。 たとえば、しきい値を 400 バイトに下げて、他の関数がリソースを使用しているかどうかを確認できます。
C6262 のスタック サイズ制限をカスタマイズするには
- メモ帳または別のテキスト エディターで、カーネル モード ドライバー (またはコンポーネント) の Visual Studio プロジェクト ファイル (.vcxproj) を開きます。
- コンパイラ <ClCompile> の新しい <ItemDefinitionGroup> を追加します。
- <PREfastAdditionalOptions> 要素を追加し、 stacksize<バイト>を設定します。 既定値は stacksize1024です。
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
プロジェクト ファイルを保存します。 Visual Studio を起動し、更新されたドライバー プロジェクトを読み込み、コード分析を実行します。
既定値の 1 KB (キロバイト)に戻すには、プロジェクト ファイルに加えた変更を元に戻すか、スタック サイズの値を stacksize1024 に変更します。