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