次の方法で共有


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 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

関連項目

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread