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) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅备注部分) |