Comparteix 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 alrededor de operaciones de punto flotante. Los controladores de pantalla deben usar el eng correspondiente... rutinas.

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 puede cambiar los resultados de otros procesos y a menudo puede 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 a 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_.

Al usar _Kernel_float_used_ en (o agregar las llamadas de guardado y restauración adecuadas a) todas las funciones que usan punto flotante hasta que no permanezcan advertencias, se puede garantizar que un controlador puede estar libre de mal uso del hardware de punto flotante. Para obtener más información, consulte anotaciones de punto flotante para controladores.