C28110

警告 C28110: ドライバーは浮動小数点ハードウェア状態を保護する必要があります。 float の使用法を参照

追加情報

浮動小数点演算に関しては KeSaveFloatingPointStateKeRestoreFloatingPointStateを使用します。 ディスプレイドライバーは、対応するEng...ルーチンを使用する必要があります。

この警告はカーネル モードでのみ適用されます。 コードが KeSaveFloatingPointStateKeRestoreFloatingPointState、または EngSaveFloatingPointStateEngRestoreFloatingPointStateによって保護されていない場合、ドライバーは float 型の変数または定数を使用しようとしています。

通常、ドライバーは最新のアプリケーションの浮動小数点コンテキストで実行され、KeSaveFloatingPointStateおよび KeRestoreFloatingPointStateによって保護されていない浮動小数点を使用すると、他のプロセスの結果が変更される可能性があり、多くの場合、ドライバーで誤った結果または予期しない結果が発生する可能性があります。

ディスプレイ ドライバーは EngSaveFloatingPointStateEngRestoreFloatingPointStateを使用する必要があります。

このエラーのインスタンスが特定のフロー パスに沿って検出されると、コード分析ツールは後続の同様のエラーを抑制します。 コード分析ツールは、浮動小数点型の引数を取る関数定義、または浮動小数点型を返す関数定義については、呼び出し元がその使用を報告するため、このエラーを報告しません。

この警告は、プログラムが関数呼び出しの周囲で浮動小数点状態を保存および復元し、呼び出された関数が浮動小数点演算を実行するときに、誤ってトリガーされる可能性があります。

関数が意図的に浮動小数点演算を使用し、浮動小数点が安全なコンテキストで呼び出されることが想定されている場合は、関数に _Kernel_float_used_ の注釈を付ける必要があります。 このアノテーションは、関数本体内の警告を抑制し、呼び出しコンテキストで呼び出しが浮動小数点演算に対して安全に保護されていることを確認します。 引数または戻り値に浮動小数点演算が含まれる場合、その効果は _Kernel_float_used_ を使用した場合と同じになります。

警告がなくなるまで、浮動小数点を使用するすべての関数で _Kernel_float_used_ を使用する (または適切な保存および復元呼び出しを追加する) ことで、ドライバーは浮動小数点ハードウェアを誤用しないことが保証されます。 詳細については、ドライバーの浮動小数点注釈を参照。