C28111

предупреждение C28111: IRQL, в котором сохранено состояние с плавающей запятой, не соответствует текущему IRQL (для этой операции восстановления).

Дополнительные сведения

Функции с плавающей запятой сохранения и восстановления требуют, чтобы IRQL был одинаковым во время сохранения и соответствующего восстановления.

IRQL, в котором драйвер выполняется при восстановлении состояния с плавающей запятой, отличается от IRQL, в котором он выполнялся при сохранении состояния с плавающей запятой.

Так как IRQL, в котором выполняется драйвер, определяет, как сохраняется состояние с плавающей запятой, драйвер должен выполняться в том же IRQL при вызове функций для сохранения и восстановления состояния с плавающей запятой.

Пример

Следующий пример кода вызывает это предупреждение.

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

Следующий пример кода избегает этого предупреждения.

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