C28110
警告 C28110:驅動程式必須保護浮點硬體狀態。 請參閱使用 float
其他資訊 |
在浮點作業周圍使用 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 。 顯示驅動程式應該使用對應的 Eng... 例程。 |
這個警告僅適用於核心模式。 當程式代碼不受 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 或 EngSaveFloatingPointState 或 EngSaveFloatingPointState 和 EngRestoreFloatingPointState 保護時,驅動程式會嘗試使用 float 類型的變數或常數。
一般而言,驅動程式會以最近應用程式的浮點內容執行,以及任何不受 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 保護的浮點使用,都可以變更其他進程的結果,而且通常會導致驅動程式中不正確的或非預期的結果。
顯示驅動程序應該使用 EngSaveFloatingPointState 和 EngRestoreFloatingPointState。
在偵測到此錯誤的實例沿著任何特定流程路徑之後,程式代碼分析工具會隱藏後續的類似錯誤。 程序代碼分析工具不會針對採用 floating-type 自變數或傳回浮動類型的函式定義報告這個錯誤,因為呼叫端會報告使用方式。
當程式在函式呼叫周圍儲存和還原浮點狀態時,可能會觸發這個警告,而呼叫的函式會執行浮點運算。
如果函式刻意使用浮點運算,而且預期會在浮點安全的內容中呼叫,您應該將函式加上 批注_Kernel_float_used_。 此批注會隱藏函式主體中的警告,並導致呼叫內容檢查呼叫是否受到浮點運算的安全保護。 如果浮點運算出現在自變數或傳回值中,效果會與使用 _Kernel_float_used_相同。
藉由在 (上使用_Kernel_float_used_ ,或新增適當的儲存和還原呼叫,以) 使用浮點的所有函式,直到沒有警告為止,驅動程式可以放心地不誤用浮點硬體。 如需詳細資訊,請參閱 驅動程式的浮點註釋。