C28111
aviso C28111: o IRQL em que o estado de ponto flutuante foi salvo não corresponde ao IRQL atual (para esta operação de restauração).
Informações adicionais |
As funções flutuantes Salvar/Restaurar exigem que o IRQL seja o mesmo no momento do salvamento e da restauração correspondente. |
O IRQL no qual o driver está sendo executado quando restaura um estado de ponto flutuante é diferente do IRQL no qual estava sendo executado quando salvou o estado do ponto flutuante.
Como o IRQL no qual o driver é executado determina como o estado do ponto flutuante é salvo, o driver deve estar executando no mesmo IRQL quando chama as funções para salvar e restaurar o estado de ponto flutuante.
Exemplo
O exemplo de código a seguir gera esse aviso.
void driver_utility()
{
// running at APC level
KFLOATING_SAVE FloatBuf;
if (KeSaveFloatingPointState(&FloatBuf))
{
KeLowerIrql(PASSIVE_LEVEL);
...
KeRestoreFloatingPointState(&FloatBuf);
}
}
O exemplo de código a seguir evita esse aviso.
void driver_utility()
{
// running at APC level
KFLOATING_SAVE FloatBuf;
if (KeSaveFloatingPointState(&FloatBuf))
{
KeLowerIrql(PASSIVE_LEVEL);
...
KeRaiseIrql(APC_LEVEL, &old);
KeRestoreFloatingPointState(&FloatBuf);
}
}