KeSaveFloatingPointState-Funktion (wdm.h)

Die KeSaveFloatingPointState-Routine speichert den nichtvolatile Gleitkommakontext, sodass der Aufrufer Gleitkommavorgänge ausführen kann.

Syntax

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Parameter

[out] FloatSave

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

Rückgabewert

KeSaveFloatingPointState gibt STATUS_SUCCESS zurück, wenn er den Gleitkommakontext des aktuellen Threads gespeichert und einen neuen Gleitkommakontext für den Aufrufer eingerichtet hat. Andernfalls wird eine der folgenden Fehlerstatuscodes zurückgegeben.

Rückgabecode Beschreibung
STATUS_ILLEGAL_FLOAT_CONTEXT
Das System ist so konfiguriert, dass gleitkommabasierte Emulation verwendet wird, anstatt Gleitkommavorgänge in den Prozessoren auszuführen.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState konnte keinen ausreichenden Arbeitsspeicher zuordnen, um den Gleitkommakontext des aktuellen Threads zu speichern.

Bemerkungen

Ein erfolgreicher Aufruf von KeSaveFloatingPointState ermöglicht es dem Aufrufer, Gleitkommavorgänge selbst auszuführen, aber ein solcher Aufrufer muss den vorherigen nichtvolatile Gleitkommakontext wiederherstellen, sobald seine Gleitkommavorgänge ausgeführt werden. Jede Routine, die KeSaveFloatingPointState aufruft , muss KeRestoreFloatingPointState aufrufen, bevor diese Routine die Steuerung zurückgibt.

Wenn der Aufruf von KeSaveFloatingPointState erfolgreich ist, ist 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 muss ein KeSaveFloatingPointState-Aufruf und der entsprechende KeRestoreFloatingPointState-Aufruf in einer geschützten Region auftreten. Das heißt, die KeEnterGuardedRegion-Routine muss aufgerufen werden, bevor KeSaveFloatingPointState aufgerufen wird, und die KeLeaveGuardedRegion-Routine muss aufgerufen werden, nachdem KeRestoreFloatingPointState aufgerufen wird. In Windows 7- und höher-Versionen von Windows ist keine solche Anforderung vorhanden.

Aus Leistungsgründen sollten Treiber keine Gleitkommavorgänge ausführen, es sei denn, es ist unbedingt erforderlich. Der Aufwand zum Speichern und Wiederherstellen des nichtvolatile Gleitkommazustands des aktuellen Threads beeinträchtigt die Leistung eines Treibers, der Gleitkommavorgänge ausführt.

Anforderungen

   
Unterstützte Mindestversion (Client) Ab Windows 2000 verfügbar.
Zielplattform Universell
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Siehe auch

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread