C28167

警告 C28167: この関数はIRQLを変更しますが、終了する前にIRQLを復元しません。 変更を反映するために注釈を付ける必要があります。そうでない場合は、IRQLを復元する必要があります。

この警告は、次の条件が当てはまることを示します。

  • この関数は、ドライバーが実行されているIRQLを変更します。

  • 関数の終了時に、ドライバーが関数の開始時に実行していた元のIRQL に IRQLを復元しない、関数を経由するパスが少なくとも1つあります。

この警告は、関数にIRQL注釈が必要であるが、それが存在しない場合に発生します。

この警告を回避するには、ドライバーは初期IRQL値を正しく保存し、IRQLを変更する意図がない場合は関数終了時に同じ IRQL 値を復元する必要があります。

IRQLを、関数の開始時にドライバーが実行されていた IRQLとは異なる値に意図的に変更する関数には、この動作を示す注釈を付ける必要があります。 たとえば、_IRQL_raises_(irql) アノテーションを使用して、関数が呼び出されたときの IRQL から IRQL を変更することを示すことができます。 IRQL 値を保存および復元し、対応する注釈 (_IRQL_saves__IRQL_restores_) を適用することもできます。 注釈はこの警告を抑制します。 詳細については、ドライバーのIRQLアノテーションを参照してください。 誤ってIRQLを変更する関数は修正する必要があります。