EngSaveFloatingPointState 函数 (winddi.h)
EngSaveFloatingPointState 函数保存当前 Windows 2000 (及更高版本) 内核浮点状态。
语法
ULONG EngSaveFloatingPointState(
VOID *pBuffer,
[in, out] ULONG cjBufferSize
);
参数
pBuffer
指向接收浮点状态的缓冲区的指针。 此缓冲区必须是零初始化的,并且必须位于非分页内存中。
[in, out] cjBufferSize
指定 pBuffer 指向的缓冲区的大小(以字节为单位)。
返回值
如果 pBuffer 为非 NULL,则如果成功保存状态, 则 EngSaveFloatingPointState 返回 TRUE 。 如果指定的缓冲区太小或无法保存状态,则返回 FALSE 。
如果 pBuffer 为 NULL 或 cjBufferSize 为零, 则 EngSaveFloatingPointState 返回保存浮点状态所需的缓冲区大小。 如果返回值为零,则处理器没有硬件浮点功能。 在这种情况下,驱动程序不得使用任何浮点指令。
注解
驱动程序必须先保存当前内核浮点状态,然后才能使用浮点硬件指令。 在 Intel 体系结构系统上,如果处理器支持 MMX 指令,则允许使用它们。 在使用浮点或 MMX 硬件时未正确使用 EngSaveFloatingPointState 和 EngRestoreFloatingPointState 的驱动程序将导致调用应用程序中的随机浮点或 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 |