C28111
warning C28111: The IRQL where the floating-point state was saved does not match the current IRQL (for this restore operation).
Additional information |
The floating Save/Restore functions require that the IRQL be the same at the time of save and the corresponding restore. |
The IRQL at which the driver is executing when it restores a floating-point state is different than the IRQL at which it was executing when it saved the floating-point state.
Because the IRQL at which the driver runs determines how the floating-point state is saved, the driver must be executing at the same IRQL when it calls the functions to save and to restore the floating-point state.
Example
The following code example elicits this warning.
void driver_utility()
{
// running at APC level
KFLOATING_SAVE FloatBuf;
if (KeSaveFloatingPointState(&FloatBuf))
{
KeLowerIrql(PASSIVE_LEVEL);
...
KeRestoreFloatingPointState(&FloatBuf);
}
}
The following code example avoids this warning.
void driver_utility()
{
// running at APC level
KFLOATING_SAVE FloatBuf;
if (KeSaveFloatingPointState(&FloatBuf))
{
KeLowerIrql(PASSIVE_LEVEL);
...
KeRaiseIrql(APC_LEVEL, &old);
KeRestoreFloatingPointState(&FloatBuf);
}
}