Partager via


C28110

avertissement C28110 : Les pilotes doivent protéger l’état du matériel à virgule flottante. Voir l’utilisation de float

Informations supplémentaires

Utilisez KeSaveFloatingPointState et KeRestoreFloatingPointState autour des opérations à virgule flottante. Les pilotes d’affichage doivent utiliser les routines Eng... correspondantes.

Cet avertissement s’applique uniquement en mode noyau. Le pilote tente d’utiliser une variable ou une constante d’un type float lorsque le code n’est pas protégé par KeSaveFloatingPointState et KeRestoreFloatingPointState, ou EngSaveFloatingPointState et EngRestoreFloatingPointState.

En règle générale, les pilotes s’exécutent avec le contexte à virgule flottante de l’application la plus récente, et toute utilisation d’une virgule flottante qui n’est pas protégée par KeSaveFloatingPointState et KeRestoreFloatingPointState peut modifier les résultats pour d’autres processus et peut souvent provoquer des résultats incorrects ou inattendus dans le pilote.

Les pilotes d’affichage doivent utiliser EngSaveFloatingPointState et EngRestoreFloatingPointState.

Une fois qu’une instance de cette erreur est détectée le long d’un chemin de flux particulier, l’outil Analyse du code supprime les erreurs similaires suivantes. L’outil Analyse du code ne signale pas cette erreur pour les définitions de fonction qui prennent des arguments de type flottant ou qui retournent un type flottant, car l’appelant signale l’utilisation.

Cet avertissement peut être déclenché par erreur lorsqu’un programme enregistre et restaure l’état à virgule flottante autour d’un appel de fonction, et que la fonction appelée effectue des opérations à virgule flottante.

Si une fonction utilise intentionnellement des opérations à virgule flottante et qu’elle s’attend à être appelée dans un contexte où la virgule flottante est sécurisée, vous devez annoter la fonction avec _Kernel_float_used_. Cette annotation supprime les avertissements dans le corps de la fonction et entraîne la case activée du contexte appelant que l’appel est protégé en toute sécurité pour les opérations à virgule flottante. Si des opérations à virgule flottante apparaissent dans les arguments ou la valeur de retour, l’effet est identique à l’utilisation de _Kernel_float_used_.

En utilisant _Kernel_float_used_ sur (ou en ajoutant les appels d’enregistrement et de restauration appropriés à) toutes les fonctions qui utilisent la virgule flottante jusqu’à ce qu’aucun avertissement ne reste, un pilote peut être assuré de ne pas utiliser le matériel à virgule flottante. Pour plus d’informations, consultez Annotations à virgule flottante pour les pilotes.