Partager via


KeSaveFloatingPointState, fonction (wdm.h)

La routine KeSaveFloatingPointState enregistre le contexte à virgule flottante nonvolatile afin que l’appelant puisse effectuer des opérations à virgule flottante.

Syntaxe

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Paramètres

[out] FloatSave

Pointeur vers une mémoire tampon résidente allouée par l’appelant, qui doit être au moins taille de(KFLOATING_SAVE).

Valeur de retour

KeSaveFloatingPointState retourne STATUS_SUCCESS si elle a enregistré le contexte à virgule flottante du thread actuel et configuré un nouveau contexte à virgule flottante pour l’appelant. Sinon, elle retourne l’un des codes d’état d’erreur suivants.

Retourner le code Description
STATUS_ILLEGAL_FLOAT_CONTEXT
Le système est configuré pour utiliser l’émulation à virgule flottante plutôt que d’effectuer des opérations à virgule flottante dans les processeurs.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState n’a pas pu allouer suffisamment de mémoire pour enregistrer le contexte à virgule flottante du thread actuel.

Remarques

Un appel réussi à KeSaveFloatingPointState permet à l’appelant d’effectuer des opérations à virgule flottante, mais un tel appelant doit restaurer le contexte à virgule flottante nonvolatile précédent dès que ses opérations à virgule flottante sont effectuées. Toute routine qui appelle KeSaveFloatingPointState doit appeler KeRestoreFloatingPointState avant que cette routine retourne le contrôle.

Si l’appel à KeSaveFloatingPointState réussit, les données de FloatSave sont opaques pour l’appelant. L’appelant ne doit pas libérer la mémoire qu’il a allouée pour ces données tant qu’après l’appel à KeRestoreFloatingPointState.

Dans Windows Vista et les versions antérieures de Windows, un appel KeSaveFloatingPointState et l’appel KeRestoreFloatingPoint State correspondant doit se produire dans une région protégée. Autrement dit, la routine keEnterGuardedRegion doit être appelée avant KeSaveFloatingPointState est appelée, et la routine KeLeaveGuardedRegion doit être appelée après KeRestoreFloatingPointState. Aucune exigence de ce type n’existe dans Windows 7 et les versions ultérieures de Windows.

Pour des raisons de performances, les pilotes doivent éviter d’effectuer des opérations à virgule flottante, sauf si absolument nécessaire. La surcharge d’enregistrement et de restauration de l’état à virgule flottante nonvolatile du thread actuel dégrade les performances d’un pilote qui effectue des opérations à virgule flottante.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 2000.
plateforme cible Universel
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

Voir aussi

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

psCreateSystemThread