KeSaveFloatingPointState 関数 (wdm.h)

KeSaveFloatingPointState ルーチンは、呼び出し元が浮動小数点演算を実行できるように、不揮発性浮動小数点コンテキストを保存します。

構文

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

パラメーター

[out] FloatSave

呼び出し元によって割り当てられた常駐バッファーへのポインター。少なくとも sizeof(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 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

こちらもご覧ください

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread