KeSaveFloatingPointState 函式 (wdm.h)

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

語法

NTSTATUS KeSaveFloatingPointState(
  [out] PKFLOATING_SAVE FloatSave
);

參數

[out] FloatSave

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

傳回值

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

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

備註

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

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

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

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

規格需求

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

另請參閱

KeEnterGuardedRegion

KeGetCurrentThread

KeLeaveGuardedRegion

KeRestoreFloatingPointState

PsCreateSystemThread