KeSaveFloatingPointState 函数 (wdm.h)

KeSaveFloatingPointState 例程保存非易失浮点上下文,以便调用方可以执行浮点作。

语法

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

参数

[out] FloatSave

指向调用方分配的常驻缓冲区的指针,该缓冲区必须至少 sizeofKFLOATING_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 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