C28110
предупреждение C28110: драйверы должны защищать состояние оборудования с плавающей запятой. См. сведения об использовании float
Дополнительные сведения |
Используйте KeSaveFloatingPointState и KeRestoreFloatingPointState вокруг операций с плавающей запятой. Драйверы отображения должны использовать соответствующий Eng... подпрограммы. |
Это предупреждение применимо только в режиме ядра. Драйвер пытается использовать переменную или константу плавающего типа, если код не защищен KeSaveFloatingPointState и KeRestoreFloatingPointStateили EngSaveFloatingPointState и EngRestoreFloatingPointState.
Как правило, драйверы выполняются с контекстом с плавающей запятой последнего приложения, и любое использование с плавающей запятой, которое не защищено KeSaveFloatingPointState и KeRestoreFloatingPointState может изменять результаты для других процессов и часто может вызвать неправильные или непредвиденные результаты в драйвере.
Драйверы отображения должны использовать EngSaveFloatingPointState и EngRestoreFloatingPointState.
После обнаружения экземпляра этой ошибки по любому конкретному пути потока средство анализа кода подавляет последующие аналогичные ошибки. Средство анализа кода не сообщает об этой ошибке для определений функций, которые принимают аргументы с плавающей запятой или возвращают тип с плавающей запятой, так как вызывающий объект сообщит об использовании.
Это предупреждение может быть вызвано ошибкой при сохранении и восстановлении состояния с плавающей запятой вокруг вызова функции, а вызываемая функция выполняет операции с плавающей запятой.
Если функция намеренно использует операции с плавающей запятой и ожидает вызова в контексте, в котором плавающая точка является безопасной, следует ознакомится с функцией с _Kernel_float_used_. Эта заметка будет подавлять предупреждения в теле функции и вызывать контекст вызова, чтобы убедиться, что вызов безопасно защищен для операций с плавающей запятой. Если операции с плавающей запятой отображаются в аргументах или возвращаемом значении, то эффект совпадает с использованием _Kernel_float_used_.
С помощью _Kernel_float_used_ (или добавления соответствующих вызовов сохранения и восстановления) ко всем функциям, которые используют плавающую точку до тех пор, пока не останутся предупреждения, драйвер может быть уверен в том, что он может быть свободен от неправильного использования оборудования с плавающей запятой. Дополнительные сведения см. в заметки с плавающей запятой для драйверов.