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


Функция KeSaveFloatingPointState (wdm.h)

подпрограмма KeSaveFloatingPointState сохраняет контекст с плавающей запятой, чтобы вызывающий объект выполнял операции с плавающей запятой.

Синтаксис

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Параметры

[out] FloatSave

Указатель на выделенный абонентом буфер резидента, который должен быть по крайней мере размер(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, а подпрограмма KeLeaveGuardedReg ion должна вызываться после вызова KeRestoreFloatingPointState. Такое требование не существует в Windows 7 и более поздних версиях Windows.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

См. также

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread