Freigeben über


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 Größe(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 eine der folgenden Fehlerstatuscodes zurückgegeben.

Rückgabecode Beschreibung
STATUS_ILLEGAL_FLOAT_CONTEXT
Das System ist so konfiguriert, dass die Gleitkommaemulation verwendet wird, anstatt Gleitkommavorgänge in den Prozessoren auszuführen.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState konnte nicht genügend 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, 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 KeRestoreFloatingPointStatefreigeben.

In Windows Vista und früheren Versionen von Windows muss ein KeSaveFloatingPointState Aufruf und der entsprechende KeRestoreFloatingPointState Anruf 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öheren 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 nicht volatile Gleitkommazustands des aktuellen Threads beeinträchtigt die Leistung eines Treibers, der Gleitkommavorgänge ausführt.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Siehe auch

KeEnterGuardedRegion

KeGetCurrentThread-

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread-