다음을 통해 공유


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