Compartilhar via


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);
    }
}