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