KeSaveFloatingPointState 函式 (wdm.h)

KeSaveFloatingPointState常式會儲存非volatile 浮點內容,讓呼叫端可以執行浮點運算。

語法

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

參數

[out] FloatSave

呼叫端配置的駐留緩衝區指標,其大小必須至少為 (KFLOATING_SAVE) 。

傳回值

KeSaveFloatingPointState 如果已儲存目前線程的浮點內容,並設定呼叫端的全新浮點內容,則會傳回STATUS_SUCCESS。 否則,它會傳回下列其中一個錯誤狀態碼。

傳回碼 描述
STATUS_ILLEGAL_FLOAT_CONTEXT
系統會設定為使用浮點模擬,而不是在處理器中執行浮點運算。
STATUS_INSUFFICIENT_RESOURCES
KeSaveFloatingPointState 無法配置足夠的記憶體來儲存目前線程的浮點內容。

備註

成功呼叫 KeSaveFloatingPointState 可讓呼叫端自行執行浮點運算,但這類呼叫端必須在完成其浮點運算之後,立即還原先前的非浮點內容。 任何呼叫 KeSaveFloatingPointState 的常式,都必須在該常式傳回控制項之前呼叫 KeRestoreFloatingPointState

如果呼叫 KeSaveFloatingPointState 成功, FloatSave 的資料對呼叫端不透明。 呼叫端不應該釋放配置給此資料的記憶體,直到呼叫 KeRestoreFloatingPointState之後。

在 Windows Vista 和舊版 Windows 中, KeSaveFloatingPointState 呼叫和對應的 KeRestoreFloatingPointState 呼叫必須發生在受防護的區域。 也就是說,在呼叫KeSaveFloatingPointState之前,必須先呼叫KeEnterGuardedRegion常式,而且必須在呼叫KeRestoreFloatingPointState之後呼叫KeLeaveGuardedRegion常式。 Windows 7 和更新版本的 Windows 中沒有這類需求。

基於效能考慮,除非絕對必要,否則驅動程式應該避免執行任何浮點運算。 儲存和還原目前線程的非浮點狀態的額外負荷,會降低執行浮點運算之任何驅動程式的效能。

規格需求

   
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 環球
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlKeDispatchLte (wdm)

另請參閱

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread