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