Compartilhar via


Função KeSaveFloatingPointState (wdm.h)

A rotina KeSaveFloatingPointState salva o contexto de ponto flutuante nãovolatile para que o chamador possa realizar operações de ponto flutuante.

Sintaxe

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Parâmetros

[out] FloatSave

Ponteiro para um buffer de residente alocado por chamador, que deve ter pelo menos tamanhos de(KFLOATING_SAVE).

Valor de retorno

KeSaveFloatingPointState retornará STATUS_SUCCESS se salvou o contexto de ponto flutuante do thread atual e configurou um novo contexto de ponto flutuante para o chamador. Caso contrário, ele retornará um dos seguintes códigos de status de erro.

Código de retorno Descrição
STATUS_ILLEGAL_FLOAT_CONTEXT
O sistema é configurado para usar a emulação de ponto flutuante, em vez de fazer operações de ponto flutuante nos processadores.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState não pôde alocar memória suficiente para salvar o contexto de ponto flutuante do thread atual.

Observações

Uma chamada bem-sucedida para KeSaveFloatingPointState permite que o chamador realize operações de ponto flutuante próprias, mas esse chamador deve restaurar o contexto de ponto flutuante nãovolatile anterior assim que suas operações de ponto flutuante forem feitas. Qualquer rotina que chame KeSaveFloatingPointState deve chamar KeRestoreFloatingPointState antes que essa rotina retorne o controle.

Se a chamada para KeSaveFloatingPointState for bem-sucedida, os dados em FloatSave serão opacos para o chamador. O chamador não deve liberar a memória alocada para esses dados até depois da chamada para KeRestoreFloatingPointState.

No Windows Vista e versões anteriores do Windows, uma chamada KeSaveFloatingPointState e a chamada KeRestoreFloatingPointState correspondente deve ocorrer em uma região protegida. Ou seja, a rotina de KeEnterGuardedRegion deve ser chamada antes que KeSaveFloatingPointState seja chamada e a rotina KeLeaveGuardedRegion deve ser chamada depois que KeRestoreFloatingPointState for chamado. Não existe esse requisito no Windows 7 e versões posteriores do Windows.

Por motivos de desempenho, os drivers devem evitar fazer operações de ponto flutuante, a menos que seja absolutamente necessário. A sobrecarga de salvar e restaurar o estado de ponto flutuante nãovolatile do thread atual degrada o desempenho de qualquer driver que faz operações de ponto flutuante.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Consulte também

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread