Функция KeSaveFloatingPointState (wdm.h)
Подпрограмма KeSaveFloatingPointState сохраняет контекст с плавающей запятой, чтобы вызывающий объект смог выполнять операции с плавающей запятой.
Синтаксис
NTSTATUS KeSaveFloatingPointState(
[out] PKFLOATING_SAVE FloatSave
);
Параметры
[out] FloatSave
Указатель на выделенный вызывающим абонентом резидентный буфер, который должен быть по крайней мере sizeof(KFLOATING_SAVE).
Возвращаемое значение
KeSaveFloatingPointState возвращает STATUS_SUCCESS, если он сохранил контекст с плавающей запятой текущего потока и настроил новый контекст с плавающей запятой для вызывающего объекта. В противном случае возвращается один из следующих кодов состояния ошибки.
Код возврата | Описание |
---|---|
|
Система настроена для использования эмуляции с плавающей запятой, а не для операций с плавающей запятой в процессорах. |
|
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) |