摘要
建立受限狀態 VMO,並繫結至目前執行緒。
宣告
#include <zircon/syscalls-next.h>
zx_status_t zx_restricted_bind_state(uint32_t options,
zx_handle_t* out_vmo,
zx_exception_report_t* out_exception);
說明
建立 VMO 來保留 zx_restricted_state_t。將 VMO 繫結至目前執行緒,這樣後續對 zx_restricted_enter() 的呼叫,就會在進入/離開限制模式時,使用該 VMO 還原/儲存限制模式狀態。
雖然傳回的 VMO out_vmo 類似於 zx_vmo_create() 建立的 VMO,但部分作業不受支援,可能會失敗並顯示錯誤。舉例來說,系統不支援調整大小和建立子 VMO。系統支援透過 zx_vmo_read()/zx_vmo_write() 進行對應、取消對應和讀取/寫入作業。
一次只能將一個受限狀態 VMO 繫結至執行緒。嘗試繫結其他 VMO 時,系統會取代已繫結的 VMO。
只有在最後一個使用者控制代碼關閉、最後一個使用者對應移除,且發生下列其中一種情況時,繫結的 VMO 才會遭到毀損:
並透過
zx_restricted_bind_state()取代。透過
zx_restricted_unbind_state()明確移除。執行緒已終止。
與任何其他 VMO 相同,VMO 對應完成後,會由對應保留,因此呼叫端可以關閉控制代碼,並透過對應直接存取記憶體。
進入受限模式後,系統會載入 VMO 的偏移 0,並相應地繼續執行。zx_restricted_state_t離開受限模式後,執行緒的受限狀態會儲存在 VMO 的偏移 0 處。
out_exception 是指向 zx_exception_report_t 的選用指標。
如果 out_exception 為空值,例外狀況回傳會導致 ZX_RESTRICTED_REASON_EXCEPTION,且模式狀態 VMO 會包含 zx_restricted_exception_t。如果 out_exception 不是空值,則回傳代碼相同,但模式狀態會包含 zx_restricted_state_t,且 zx_exception_report_t 會複製到 out_exception。如果複製失敗,原因代碼會是 ZX_RESTRICTED_REASON_EXCEPTION_LOST,且例外狀況報告會遺失。
options 必須為零。
權限
通話者的工作政策必須允許 ZX_POL_NEW_VMO。
錯誤
ZX_ERR_INVALID_ARGS out_vmo 是無效的指標或 NULL,或 options 是 0 以外的任何值。
ZX_ERR_NO_MEMORY 記憶體不足,導致失敗。
使用者空間無法妥善處理這項 (不太可能發生的) 錯誤。日後的版本將不會再發生這個錯誤。