KeRestoreFloatingPointState 函数 (wdm.h)
KeRestoreFloatingPointState 例程还原由上述 对 KeSaveFloatingPointState调用保存的非易失浮点上下文。
语法
NTSTATUS KeRestoreFloatingPointState(
[in] PKFLOATING_SAVE FloatSave
);
参数
[in] FloatSave
指向在上述调用中传递给 KeSaveFloatingPointState的 KFLOATING_SAVE 结构的指针。
返回值
KeRestoreFloatingPointState 返回STATUS_SUCCESS。
言论
KeRestoreFloatingPointState 是 KeSaveFloatingPointState的互惠关系。
调用 KeSaveFloatingPointState 的任何例程都必须 在该例程返回控件之前 KeRestoreFloatingPointState 调用,并且该例程必须运行在上述调用 KeSaveFloatingPointState 时所在的 IRQL。 未能满足上述任一条件会导致系统 bug 检查。
内核模式驱动程序代码必须确保正确嵌套对 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 的调用。 这是必需的,因此,在每个嵌套级别,由 KeRestoreFloatingPointState 调用还原的状态与相应 KeSaveFloatingPointState 调用保存的状态相同。 若要确保正确嵌套,内核模式驱动程序代码必须遵循以下规则:
- 还原已保存状态的 KeRestoreFloatingPointState 调用必须与保存状态的 KeSaveFloatingPointState 调用在同一 IRQL 上运行。
- 如果一对 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 调用嵌套在一对周围 KeSaveFloatingPointState 和 KeRestoreFloatingPointState 调用中,则嵌套调用的 IRQL 不得低于周围调用的 IRQL。
- 通常,调用方分配 KFLOATING_SAVE 结构,该结构包含由 KeSaveFloatingPointState 保存的状态 驻留在堆栈上。 堆栈自然会保留保存的状态信息的嵌套。 如果驱动程序代码将状态存储在堆栈以外的位置,驱动程序编写器必须特别小心,以保留 KeSaveFloatingPointState 的嵌套,并 KeRestoreFloatingPointState 调用。
- 还原已保存状态的 KeRestoreFloatingPointState 调用必须与保存状态的 KeSaveFloatingPointState 调用在同一线程中运行。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 普遍 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅“备注”部分) |