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 à l’appelant, qui doit être au moins sizeof(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.

Code de retour 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 de son propre, 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 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 KeRestoreFloatingPointState correspondant doivent se produire dans une région protégée. Autrement dit, la routine KeEnterGuardedRegion doit être appelée avant que KeSaveFloatingPointState soit appelée, et la routine KeLeaveGuardedRegion doit être appelée après l’appel de 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 liée à l’enregistrement et à la restauration de l’état à virgule flottante nonvolatile du thread actuel dégrade les performances de tout pilote qui effectue des opérations à virgule flottante.

Configuration requise

   
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
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