Partager via


KeSaveFloatingPointState, fonction (wdm.h)

La routine KeSaveFloatingPointState enregistre le contexte à virgule flottante non volatile 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 retournée

KeSaveFloatingPointState retourne STATUS_SUCCESS s’il a enregistré le contexte à virgule flottante du thread actuel et configuré un nouveau contexte à virgule flottante pour l’appelant. Sinon, elle retourne l’une des erreurs suivantes status codes.

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 ses propres opérations à virgule flottante, mais un tel appelant doit restaurer le contexte à virgule flottante non volatile 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 dans 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 avant 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 l’appel de KeSaveFloatingPointState , 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 versions ultérieures de Windows.

Pour des raisons de performances, les pilotes doivent éviter d’effectuer des opérations à virgule flottante, sauf si cela est absolument nécessaire. La surcharge liée à l’enregistrement et à la restauration de l’état à virgule flottante non volatile du thread actuel dégrade les performances de tout pilote qui effectue des opérations à virgule flottante.

Configuration requise

Condition requise Valeur
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