C28111

avviso C28111: IRQL in cui è stato salvato lo stato a virgola mobile non corrisponde all'IRQL corrente (per questa operazione di ripristino).

Informazioni aggiuntive

Le funzioni di salvataggio/ripristino mobile richiedono che IRQL sia lo stesso al momento del salvataggio e del ripristino corrispondente.

IrQL in corrispondenza del quale il driver viene eseguito quando ripristina uno stato a virgola mobile è diverso da IRQL in corrispondenza del quale è stato eseguito durante il salvataggio dello stato a virgola mobile.

Poiché irQL in corrispondenza del quale viene eseguito il driver determina la modalità di salvataggio dello stato a virgola mobile, il driver deve essere in esecuzione nello stesso IRQL quando chiama le funzioni per salvare e ripristinare lo stato a virgola mobile.

Esempio

Nell'esempio di codice seguente viene generato questo avviso.

void driver_utility()
{
    // running at APC level
    KFLOATING_SAVE FloatBuf;
    if (KeSaveFloatingPointState(&FloatBuf))
    {
        KeLowerIrql(PASSIVE_LEVEL);
        ...
        KeRestoreFloatingPointState(&FloatBuf);
    }
}

Nell'esempio di codice seguente viene evitato questo avviso.

void driver_utility()
{
    // running at APC level
    KFLOATING_SAVE FloatBuf;
    if (KeSaveFloatingPointState(&FloatBuf))
    {
        KeLowerIrql(PASSIVE_LEVEL);
        ...
        KeRaiseIrql(APC_LEVEL, &old);
        KeRestoreFloatingPointState(&FloatBuf);
    }
}