Función KeSaveFloatingPointState (wdm.h)

La rutina KeSaveFloatingPointState guarda el contexto de punto flotante no volátil para que el autor de la llamada pueda realizar operaciones de punto flotante.

Sintaxis

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Parámetros

[out] FloatSave

Puntero a un búfer residente asignado por el autor de la llamada, que debe ser al menos sizeof(KFLOATING_SAVE).

Valor devuelto

KeSaveFloatingPointState devuelve STATUS_SUCCESS si guardó el contexto de punto flotante del subproceso actual y configuró un contexto de punto flotante nuevo para el autor de la llamada. De lo contrario, devuelve uno de los siguientes códigos de estado de error.

Código devuelto Descripción
STATUS_ILLEGAL_FLOAT_CONTEXT
El sistema está configurado para usar la emulación de punto flotante, en lugar de realizar operaciones de punto flotante en los procesadores.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState no pudo asignar suficiente memoria para guardar el contexto de punto flotante del subproceso actual.

Comentarios

Una llamada correcta a KeSaveFloatingPointState permite al autor de la llamada llevar a cabo operaciones de punto flotante propias, pero este tipo de llamador debe restaurar el contexto de punto flotante no volátil anterior en cuanto se realizan sus operaciones de punto flotante. Cualquier rutina que llame a KeSaveFloatingPointState debe llamar a KeRestoreFloatingPointState antes de que esa rutina devuelva el control.

Si la llamada a KeSaveFloatingPointState se realiza correctamente, los datos de FloatSave son opacos para el autor de la llamada. El autor de la llamada no debe liberar la memoria que asignó para estos datos hasta después de la llamada a KeRestoreFloatingPointState.

En Windows Vista y versiones anteriores de Windows, se debe producir una llamada KeSaveFloatingPointState y la llamada KeRestoreFloatingPointState correspondiente en una región protegida. Es decir, se debe llamar a la rutina KeEnterGuardedRegion antes de llamar a KeSaveFloatingPointState y se debe llamar a la rutina KeLeaveGuardedRegion después de llamar a KeRestoreFloatingPointState . No existe este requisito en Windows 7 y versiones posteriores de Windows.

Por motivos de rendimiento, los controladores deben evitar realizar operaciones de punto flotante a menos que sea absolutamente necesario. La sobrecarga de guardar y restaurar el estado de punto flotante no volátil del subproceso actual reduce el rendimiento de cualquier controlador que realice operaciones de punto flotante.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Consulte también

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread