Compartilhar via


C28110

aviso C28110: os drivers devem proteger o estado do hardware de ponto flutuante. Ver o uso de float

Informações adicionais

Use KeSaveFloatingPointState e KeRestoreFloatingPointState em torno de operações de ponto flutuante. Os drivers de exibição devem usar as rotinas eng... correspondentes.

Esse aviso só é aplicável no modo kernel. O driver está tentando usar uma variável ou constante de um tipo float quando o código não é protegido por KeSaveFloatingPointState e KeRestoreFloatingPointState ou EngSaveFloatingPointState e EngRestoreFloatingPointState.

Normalmente, os drivers são executados com o contexto de ponto flutuante do aplicativo mais recente e qualquer uso de um ponto flutuante que não é protegido por KeSaveFloatingPointState e KeRestoreFloatingPointState pode alterar os resultados de outros processos e geralmente pode causar resultados incorretos ou inesperados no driver.

Os drivers de exibição devem usar EngSaveFloatingPointState e EngRestoreFloatingPointState.

Depois que uma instância desse erro é detectada em qualquer caminho de fluxo específico, a ferramenta Análise de Código suprime erros semelhantes subsequentes. A ferramenta Análise de Código não relata esse erro para definições de função que usam argumentos de tipo flutuante ou que retornam um tipo flutuante, pois o chamador relatará o uso.

Esse aviso pode ser disparado com erro quando um programa salva e restaura o estado de ponto flutuante em torno de uma chamada de função e a função chamada executa operações de ponto flutuante.

Se uma função usa operações de ponto flutuante intencionalmente e espera ser chamada em um contexto em que o ponto flutuante é seguro, você deve anotar a função com _Kernel_float_used_. Essa anotação suprimirá os avisos no corpo da função e fará com que o contexto de chamada marcar que a chamada esteja protegida com segurança para operações de ponto flutuante. Se as operações de ponto flutuante aparecerem nos argumentos ou no valor retornado, o efeito será o mesmo que usar _Kernel_float_used_.

Usando _Kernel_float_used_ em (ou adicionando as chamadas de salvamento e restauração apropriadas a) todas as funções que usam ponto flutuante até que nenhum aviso permaneça, um driver pode ter certeza de estar livre do uso indevido do hardware de ponto flutuante. Para obter mais informações, consulte Anotações de ponto flutuante para drivers.