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