C28111

advertencia C28111: IRQL donde se guardó el estado de punto flotante no coincide con el IRQL actual (para esta operación de restauración).

Información adicional

Las funciones flotantes Save/Restore requieren que IRQL sea el mismo en el momento de guardar y la restauración correspondiente.

IrQL en el que se ejecuta el controlador cuando restaura un estado de punto flotante es diferente del IRQL en el que se estaba ejecutando cuando guardó el estado de punto flotante.

Dado que el IRQL en el que se ejecuta el controlador determina cómo se guarda el estado de punto flotante, el controlador debe ejecutarse en el mismo IRQL cuando llama a las funciones para guardar y restaurar el estado de punto flotante.

Ejemplo

En el ejemplo de código siguiente se produce esta advertencia.

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

En el ejemplo de código siguiente se evita esta advertencia.

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