Funzione KeSaveFloatingPointState (wdm.h)

La routine KeSaveFloatingPointState salva il contesto a virgola mobile non volatile in modo che il chiamante possa eseguire operazioni a virgola mobile.

Sintassi

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

Parametri

[out] FloatSave

Puntatore a un buffer residente allocato dal chiamante, che deve essere almeno sizeof(KFLOATING_SAVE).

Valore restituito

KeSaveFloatingPointState restituisce STATUS_SUCCESS se ha salvato il contesto a virgola mobile del thread corrente e ha configurato un contesto a virgola mobile aggiornato per il chiamante. In caso contrario, restituisce uno dei codici di stato di errore seguenti.

Codice restituito Descrizione
STATUS_ILLEGAL_FLOAT_CONTEXT
Il sistema è configurato per l'uso dell'emulazione a virgola mobile, invece di eseguire operazioni a virgola mobile nei processori.
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState non è riuscito ad allocare memoria sufficiente per salvare il contesto a virgola mobile del thread corrente.

Commenti

Una chiamata riuscita a KeSaveFloatingPointState consente al chiamante di eseguire operazioni a virgola mobile proprie, ma tale chiamante deve ripristinare il contesto a virgola mobile precedente non volatile non appena vengono eseguite le operazioni a virgola mobile. Qualsiasi routine che chiama KeSaveFloatingPointState deve chiamare KeRestoreFloatingPointState prima che la routine restituisca il controllo.

Se la chiamata a KeSaveFloatingPointState ha esito positivo, i dati in FloatSave sono opachi per il chiamante. Il chiamante non deve rilasciare la memoria allocata per questi dati fino a dopo la chiamata a KeRestoreFloatingPointState.

In Windows Vista e versioni precedenti di Windows, una chiamata KeSaveFloatingPointState e la chiamata KeRestoreFloatingPointState corrispondente devono essere eseguite in un'area sorvegliata. Vale a dire, la routine KeEnterGuardedRegion deve essere chiamata prima della chiamata a KeSaveFloatingPointState e la routine KeLeaveGuardedRegion deve essere chiamata dopo la chiamata a KeRestoreFloatingPointState . Non esiste alcun requisito di questo tipo in Windows 7 e versioni successive di Windows.

Per motivi di prestazioni, i driver devono evitare di eseguire operazioni a virgola mobile, a meno che non sia assolutamente necessario. L'overhead del salvataggio e del ripristino dello stato a virgola mobile non volatile del thread corrente comporta una riduzione delle prestazioni di qualsiasi driver che esegue operazioni a virgola mobile.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlKeDispatchLte(wdm)

Vedi anche

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread