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 调用必须在受保护的区域中发生。 也就是说,在调用 KeSaveFloatingPointState 之前,必须调用 KeEnterGuardedRegion 例程,并且必须在调用 KeRestoreFloatingPointState 之后调用 KeLeaveGuardedRegion 例程。 Windows 7 及更高版本的 Windows 中不存在此类要求。

出于性能原因,除非绝对必要,否则驱动程序应避免执行任何浮点运算。 保存和还原当前线程的非易失浮点状态的开销会降低执行浮点运算的任何驱动程序的性能。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlKeDispatchLte (wdm)

另请参阅

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread