次の方法で共有


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 で実行されている必要があります。 これらの条件のいずれかを満たしないと、システムバグチェックが発生します。

カーネル モード ドライバー コードでは、 KeSaveFloatingPointStateKeRestoreFloatingPointState の呼び出しが正しく入れ子になっていることを確認する必要があります。 これは、各入れ子レベルで 、KeRestoreFloatingPointState 呼び出しによって復元された状態が、対応する KeSaveFloatingPointState 呼び出しによって保存された状態と同じになるようにする必要があります。 適切な入れ子を確保するには、カーネル モード ドライバー コードが次の規則に従う必要があります。

  • 保存された状態を復元する KeRestoreFloatingPointState 呼び出しは、状態を保存した KeSaveFloatingPointState 呼び出しと同じ IRQL で実行されている必要があります。
  • KeSaveFloatingPointState 呼び出しと KeRestoreFloatingPointState 呼び出しのペアが、周囲の KeSaveFloatingPointState 呼び出しと KeRestoreFloatingPointState 呼び出しのペア内に入れ子になっている場合、入れ子になった呼び出しの IRQL は、周囲の呼び出しの IRQL よりも小さくすることはできません。
  • 通常、KeSaveFloatingPointState によって保存された状態を含む呼び出し元によって割り当てられたKFLOATING_SAVE構造体は、スタック上に存在します。 スタックは、保存された状態情報の入れ子を自然に保持します。 ドライバー コードがスタック以外の場所に状態を格納する場合、ドライバー ライターは 、KeSaveFloatingPointState 呼び出しと KeRestoreFloatingPointState 呼び出しの入れ子を保持するために特別な注意 払う必要があります。
  • 保存された状態を復元する KeRestoreFloatingPointState 呼び出しは、状態を保存した KeSaveFloatingPointState 呼び出しと同じスレッドで実行されている必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)

こちらもご覧ください

KFLOATING_SAVE

KeSaveFloatingPointState