KeSaveFloatingPointState 函式 (wdm.h)
KeSaveFloatingPointState 例程會儲存非浮點內容,讓呼叫端可以執行浮點運算。
語法
NTSTATUS KeSaveFloatingPointState(
[out] PKFLOATING_SAVE FloatSave
);
參數
[out] FloatSave
呼叫端配置的駐留緩衝區指標,其大小必須至少為 (KFLOATING_SAVE) 。
傳回值
如果 KeSaveFloatingPointState 儲存了目前線程的浮點內容,並設定呼叫端的全新浮點內容,KeSaveFloatingPointState 會傳回STATUS_SUCCESS。 否則,它會傳回下列其中一個錯誤狀態代碼。
傳回碼 | Description |
---|---|
|
系統會設定為使用浮點模擬,而不是在處理器中執行浮點運算。 |
|
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) |