次の方法で共有


EngSaveFloatingPointState 関数 (winddi.h)

EngSaveFloatingPointState 関数は、現在の Windows 2000 (以降) カーネルの浮動小数点状態を保存します。

構文

ULONG EngSaveFloatingPointState(
            VOID  *pBuffer,
  [in, out] ULONG cjBufferSize
);

パラメーター

pBuffer

浮動小数点状態を受け取るバッファーへのポインター。 このバッファーは 0 で初期化する必要があり、非ページ メモリ内に存在する必要があります。

[in, out] cjBufferSize

pBuffer が指すバッファーのサイズをバイト単位で指定します。

戻り値

pBufferNULL 以外の場合、状態が正常に保存された場合、EngSaveFloatingPointStateTRUE を返します。 指定したバッファーが小さすぎるか、状態を保存できない場合は FALSE を 返します。

pBufferNULL または cjBufferSize が 0 の場合、EngSaveFloatingPointState は浮動小数点状態を保存するために必要なバッファーのサイズを返します。 戻り値が 0 の場合、プロセッサにはハードウェア浮動小数点機能がありません。 この場合、ドライバーは浮動小数点命令を使用しないでください。

解説

ドライバーは、浮動小数点ハードウェア命令を使用する前に、現在のカーネルの浮動小数点状態を保存する必要があります。 Intel アーキテクチャ システムでは、プロセッサでサポートされている場合に MMX 命令を使用できます。 浮動小数点または MMX ハードウェアを使用する場合に EngSaveFloatingPointStateEngRestoreFloatingPointState を正しく使用しないドライバーは、呼び出し元のアプリケーションでランダムな浮動小数点または MMX の破損を引き起こします。

ドライバーを呼び出すたびに、ドライバーは、浮動小数点または MMX 操作を使用する前にカーネルの状態を保持するために EngSaveFloatingPointState を 1 回呼び出す必要があります。 また、カーネルの状態をリセットするには、すべての浮動小数点操作または MMX 操作が完了した後に EngRestoreFloatingPointState を 1 回呼び出す必要があります。

GDI は、エスケープがOPENGL_CMD、OPENGL_GETINFO、または MCDFUNCS の場合に、ドライバーの DrvEscape ルーチンの呼び出しの浮動小数点状態を自動的に保存します。

要件

   
サポートされている最小のクライアント Windows 2000 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header winddi.h (Winddi.h を含む)
Library Win32k.lib
[DLL] Win32k.sys

関連項目

DrvEscape

EngRestoreFloatingPointState