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