다음을 통해 공유


KeSaveFloatingPointState 함수(wdm.h)

KeSaveFloatingPointState 루틴은 호출자가 부동 소수점 작업을 수행할 수 있도록 비휘발성 부동 소수점 컨텍스트를 저장합니다.

구문

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

매개 변수

[out] FloatSave

적어도 sizeof(KFLOATING_SAVE)여야 하는 호출자 할당 상주 버퍼에 대한 포인터입니다.

반환 값

KeSaveFloatingPointState 는 현재 스레드의 부동 소수점 컨텍스트를 저장하고 호출자에 대한 새 부동 소수점 컨텍스트를 설정하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 오류 상태 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_ILLEGAL_FLOAT_CONTEXT
시스템은 프로세서에서 부동 소수점 연산을 수행하는 대신 부동 소수점 에뮬레이션을 사용하도록 구성됩니다.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState 에서 현재 스레드의 부동 소수점 컨텍스트를 저장하는 데 충분한 메모리를 할당할 수 없습니다.

설명

KeSaveFloatingPointState를 성공적으로 호출하면 호출자가 자체의 부동 소수점 작업을 수행할 수 있지만 이러한 호출자는 부동 소수점 작업이 완료되는 즉시 이전의 비휘발성 부동 소수점 컨텍스트를 복원해야 합니다. KeSaveFloatingPointState를 호출하는 루틴은 해당 루틴이 컨트롤을 반환하기 전에 KeRestoreFloatingPointState를 호출해야 합니다.

KeSaveFloatingPointState에 대한 호출이 성공하면 FloatSave의 데이터는 호출자에게 불투명합니다. 호출자는 KeRestoreFloatingPointState를 호출할 때까지 이 데이터에 할당된 메모리를 해제해서는 안 됩니다.

Windows Vista 및 이전 버전의 Windows에서는 보호된 지역에서 KeSaveFloatingPointState 호출 및 해당 KeRestoreFloatingPointState 호출이 발생해야 합니다. 즉, KeSaveFloatingPointState가 호출되기 전에 KeEnterGuardedRegion 루틴을 호출해야 하며 KeRestoreFloatingPointState가 호출된 후 KeLeaveGuardedRegion 루틴을 호출해야 합니다. Windows 7 이상 버전의 Windows에는 이러한 요구 사항이 없습니다.

성능상의 이유로 드라이버는 반드시 필요한 경우가 아니면 부동 소수점 작업을 수행하지 않아야 합니다. 현재 스레드의 비휘발성 부동 소수점 상태를 저장하고 복원하는 오버헤드는 부동 소수점 작업을 수행하는 모든 드라이버의 성능을 저하합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

추가 정보

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread