Поделиться через


Функция 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 должны выполняться в защищенном регионе. То есть подпрограмма KeEnterGuardedRegion должна вызываться перед вызовом KeSaveFloatingPointState , а подпрограмма KeLeaveGuardedRegion должна вызываться после вызова KeRestoreFloatingPointState . В Windows 7 и более поздних версиях Windows такого требования не существует.

По соображениям производительности драйверы должны избегать выполнения операций с плавающей запятой, если это не является абсолютно необходимым. Издержки на сохранение и восстановление состояния текущего потока с плавающей запятой ухудшают производительность любого драйвера, который выполняет операции с плавающей запятой.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

См. также раздел

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread