KeSaveFloatingPointState-Funktion (wdm.h)

Die KeSaveFloatingPointState-Routine speichert den nicht flüchtigen Gleitkommakontext, damit der Aufrufer Gleitkommavorgänge ausführen kann.

Syntax

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Parameter

[out] FloatSave

Zeiger auf einen vom Aufrufer zugewiesenen residenten Puffer, der mindestens sizeof(KFLOATING_SAVE) sein muss.

Rückgabewert

KeSaveFloatingPointState gibt STATUS_SUCCESS zurück, wenn der Gleitkommakontext des aktuellen Threads gespeichert und ein neuer Gleitkommakontext für den Aufrufer eingerichtet wird. Andernfalls wird einer der folgenden Fehler status Codes zurückgegeben.

Rückgabecode Beschreibung
STATUS_ILLEGAL_FLOAT_CONTEXT
Das System ist für die Verwendung von Gleitkommaemulation konfiguriert, anstatt Gleitkommavorgänge in den Prozessoren auszuführen.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState konnte nicht genügend Arbeitsspeicher zuweisen, um den Gleitkommakontext des aktuellen Threads zu speichern.

Hinweise

Ein erfolgreicher Aufruf von KeSaveFloatingPointState ermöglicht es dem Aufrufer, eigene Gleitkommaoperationen auszuführen, aber ein solcher Aufrufer muss den vorherigen nicht flüchtigen Gleitkommakontext wiederherstellen, sobald seine Gleitkommavorgänge abgeschlossen sind. Jede Routine, die KeSaveFloatingPointState aufruft, muss KeRestoreFloatingPointState aufrufen, bevor diese Routine die Kontrolle zurückgibt.

Wenn der Aufruf von KeSaveFloatingPointState erfolgreich ist, sind die Daten bei FloatSave für den Aufrufer undurchsichtig. Der Aufrufer sollte den Speicher, den er für diese Daten zugewiesen hat, erst nach dem Aufruf von KeRestoreFloatingPointState freigeben.

In Windows Vista und früheren Versionen von Windows müssen ein KeSaveFloatingPointState-Aufruf und der entsprechende KeRestoreFloatingPointState-Aufruf in einer geschützten Region erfolgen. Das heißt, die KeEnterGuardedRegion-Routine muss aufgerufen werden, bevor KeSaveFloatingPointState aufgerufen wird, und die KeLeaveGuardedRegion-Routine muss nach dem Aufruf von KeRestoreFloatingPointState aufgerufen werden. In Windows 7 und höheren Versionen von Windows ist keine solche Anforderung vorhanden.

Aus Leistungsgründen sollten Treiber gleitkommabasierte Vorgänge vermeiden, es sei denn, dies ist unbedingt erforderlich. Der Mehraufwand beim Speichern und Wiederherstellen des nicht flüchtigen Gleitkommazustands des aktuellen Threads beeinträchtigt die Leistung jedes Treibers, der Gleitkommavorgänge ausführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Weitere Informationen

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread