Share via


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