Share via


C28110

advertencia C28110: los controladores deben proteger el estado de hardware de punto flotante. Consulte el uso de float.

Información adicional

Use KeSaveFloatingPointState y KeRestoreFloatingPointState en torno a las operaciones de punto flotante. Los controladores de pantalla deben usar las rutinas eng... correspondientes.

Esta advertencia solo es aplicable en modo kernel. El controlador está intentando usar una variable o constante de un tipo float cuando el código no está protegido por KeSaveFloatingPointState y KeRestoreFloatingPointState, o EngSaveFloatingPointState y EngRestoreFloatingPointState.

Normalmente, los controladores se ejecutan con el contexto de punto flotante de la aplicación más reciente y cualquier uso de un punto flotante que no está protegido por KeSaveFloatingPointState y KeRestoreFloatingPointState pueden cambiar los resultados de otros procesos y, a menudo, pueden provocar resultados incorrectos o inesperados en el controlador.

Los controladores de pantalla deben usar EngSaveFloatingPointState y EngRestoreFloatingPointState.

Después de detectar una instancia de este error a lo largo de cualquier ruta de flujo determinada, la herramienta Análisis de código suprime los errores similares posteriores. La herramienta Análisis de código no notifica este error para las definiciones de función que toman argumentos de tipo flotante o que devuelven un tipo flotante, ya que el autor de la llamada notificará el uso.

Esta advertencia se puede desencadenar en error cuando un programa guarda y restaura el estado de punto flotante alrededor de una llamada de función y la función llamada realiza operaciones de punto flotante.

Si una función usa operaciones de punto flotante intencionadamente y espera llamarse en un contexto donde el punto flotante es seguro, debe anotar la función con _Kernel_float_used_. Esta anotación suprimirá las advertencias en el cuerpo de la función y hará que el contexto de llamada compruebe que la llamada está protegida de forma segura para las operaciones de punto flotante. Si las operaciones de punto flotante aparecen en los argumentos o el valor devuelto, el efecto es el mismo que el uso de _Kernel_float_used_.

Mediante el uso de _Kernel_float_used_ en (o agregando las llamadas de guardado y restauración adecuadas a) todas las funciones que usan el punto flotante hasta que no quedan advertencias, se puede garantizar que un controlador puede estar libre de uso incorrecto del hardware de punto flotante. Para obtener más información, vea Anotaciones de punto flotante para controladores.