C28110
警告 C28110:驱动程序必须保护浮点硬件状态。 请参阅 float 的使用
其他信息 |
在浮点运算周围使用 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 。 显示驱动程序应使用相应的 Eng... 例程。 |
此警告仅适用于内核模式。 当代码不受 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 或 EngSaveFloatingPointState 和 EngRestoreFloatingPointState 的保护时,驱动程序尝试使用 float 类型的变量或常量。
通常,驱动程序使用最新应用程序的浮点上下文运行,并且对不受 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 保护的浮点的任何使用都可以更改其他进程的结果,并且通常会导致驱动程序中出现不正确或意外的结果。
显示驱动程序应使用 EngSaveFloatingPointState 和 EngRestoreFloatingPointState。
在沿任何特定流路径检测到此错误的实例后,代码分析工具将抑制后续的类似错误。 对于采用浮点类型参数或返回浮点类型的函数定义,代码分析工具不会报告此错误,因为调用方将报告使用。
当程序保存并还原函数调用周围的浮点状态,并且调用的函数执行浮点运算时,可能会错误地触发此警告。
如果函数有意使用浮点运算,并且预期在浮点安全上下文中调用,则应使用 _Kernel_float_used_对函数进行批注。 此注释将抑制函数正文中的警告,并导致调用上下文检查调用受到浮点操作的安全保护。 如果浮点运算出现在参数或返回值中,则效果与使用 _Kernel_float_used_ 相同。
通过在 (上使用_Kernel_float_used_ 或添加对) 所有使用浮点函数的适当的保存和还原调用,直到没有警告,可以确保驱动程序不会滥用浮点硬件。 有关详细信息,请参阅 驱动程序的浮点批注。