C28111
警告 C28111:保存浮点状态的 IRQL 与此还原操作) 的当前 IRQL (不匹配。
其他信息 |
浮动的 Save/Restore 函数要求 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);
}
}