Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
aviso C28111: O IRQL onde 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 Save/Restore exigem que o IRQL seja o mesmo no momento do salvamento e da restauração correspondente. |
O IRQL no qual o driver está executando quando restaura um estado de ponto flutuante é diferente do IRQL no qual estava sendo executado quando salvou o estado de ponto flutuante.
Como o IRQL no qual o driver é executado determina como o estado de 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 provoca 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);
}
}