EngSaveFloatingPointState 函数 (winddi.h)

EngSaveFloatingPointState 函数保存当前 Windows 2000 (及更高版本) 内核浮点状态。

语法

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

参数

pBuffer

指向接收浮点状态的缓冲区的指针。 此缓冲区必须是零初始化的,并且必须位于非分页内存中。

[in, out] cjBufferSize

指定 pBuffer 指向的缓冲区的大小(以字节为单位)。

返回值

如果 pBuffer 为非 NULL,则如果成功保存状态, 则 EngSaveFloatingPointState 返回 TRUE 。 如果指定的缓冲区太小或无法保存状态,则返回 FALSE

如果 pBufferNULLcjBufferSize 为零, 则 EngSaveFloatingPointState 返回保存浮点状态所需的缓冲区大小。 如果返回值为零,则处理器没有硬件浮点功能。 在这种情况下,驱动程序不得使用任何浮点指令。

注解

驱动程序必须先保存当前内核浮点状态,然后才能使用浮点硬件指令。 在 Intel 体系结构系统上,如果处理器支持 MMX 指令,则允许使用它们。 在使用浮点或 MMX 硬件时未正确使用 EngSaveFloatingPointStateEngRestoreFloatingPointState 的驱动程序将导致调用应用程序中的随机浮点或 MMX 损坏。

每次调用驱动程序时,驱动程序都必须调用 EngSaveFloatingPointState 一次,以保留内核状态,然后再使用浮点或 MMX 操作。 它还必须在所有浮点或 MMX 操作完成后调用 EngRestoreFloatingPointState 一次,以重置内核状态。

当转义OPENGL_CMD、OPENGL_GETINFO或 MCDFUNCS 时,GDI 会自动保存对驱动程序 DrvEscape 例程的任何调用的浮点状态。

要求

   
最低受支持的客户端 适用于 Windows 2000 及更高版本的 Windows 操作系统。
目标平台 通用
标头 winddi.h (包括 Winddi.h)
Library Win32k.lib
DLL Win32k.sys

另请参阅

DrvEscape

EngRestoreFloatingPointState