Partager via


C28111

avertissement C28111 : L’IRQL où l’état à virgule flottante a été enregistré ne correspond pas à l’IRQL actuel (pour cette opération de restauration).

Informations supplémentaires

Les fonctions d’enregistrement/restauration flottantes nécessitent que l’IRQL soit identique au moment de l’enregistrement et de la restauration correspondante.

L’IRQL auquel le pilote s’exécute lorsqu’il restaure un état à virgule flottante est différent de l’IRQL auquel il s’exécutait lorsqu’il a enregistré l’état à virgule flottante.

Étant donné que l’IRQL auquel le pilote s’exécute détermine la façon dont l’état à virgule flottante est enregistré, le pilote doit s’exécuter au même IRQL lorsqu’il appelle les fonctions pour enregistrer et restaurer l’état à virgule flottante.

Exemple

L’exemple de code suivant déclenche cet avertissement.

void driver_utility()
{
    // running at APC level
    KFLOATING_SAVE FloatBuf;
    if (KeSaveFloatingPointState(&FloatBuf))
    {
        KeLowerIrql(PASSIVE_LEVEL);
        ...
        KeRestoreFloatingPointState(&FloatBuf);
    }
}

L’exemple de code suivant évite cet avertissement.

void driver_utility()
{
    // running at APC level
    KFLOATING_SAVE FloatBuf;
    if (KeSaveFloatingPointState(&FloatBuf))
    {
        KeLowerIrql(PASSIVE_LEVEL);
        ...
        KeRaiseIrql(APC_LEVEL, &old);
        KeRestoreFloatingPointState(&FloatBuf);
    }
}