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