EngSaveFloatingPointState 関数 (winddi.h)
EngSaveFloatingPointState 関数は、現在の Windows 2000 (以降) カーネルの浮動小数点状態を保存します。
構文
ULONG EngSaveFloatingPointState(
VOID *pBuffer,
[in, out] ULONG cjBufferSize
);
パラメーター
pBuffer
浮動小数点状態を受け取るバッファーへのポインター。 このバッファーは 0 で初期化する必要があり、非ページ メモリ内に存在する必要があります。
[in, out] cjBufferSize
pBuffer が指すバッファーのサイズをバイト単位で指定します。
戻り値
pBuffer が NULL 以外の場合、状態が正常に保存された場合、EngSaveFloatingPointState は TRUE を返します。 指定したバッファーが小さすぎるか、状態を保存できない場合は FALSE を 返します。
pBuffer が NULL または cjBufferSize が 0 の場合、EngSaveFloatingPointState は浮動小数点状態を保存するために必要なバッファーのサイズを返します。 戻り値が 0 の場合、プロセッサにはハードウェア浮動小数点機能がありません。 この場合、ドライバーは浮動小数点命令を使用しないでください。
解説
ドライバーは、浮動小数点ハードウェア命令を使用する前に、現在のカーネルの浮動小数点状態を保存する必要があります。 Intel アーキテクチャ システムでは、プロセッサでサポートされている場合に MMX 命令を使用できます。 浮動小数点または MMX ハードウェアを使用する場合に EngSaveFloatingPointState と EngRestoreFloatingPointState を正しく使用しないドライバーは、呼び出し元のアプリケーションでランダムな浮動小数点または 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 |