zx_restricted_enters

摘要

進入嚴格篩選模式

宣告

#include <zircon/syscalls-next.h>

zx_status_t zx_restricted_enter(uint32_t options,
                                uintptr_t vector_table_ptr,
                                uintptr_t context);

說明

從一般執行緒狀態進入受限模式。如果成功,目前的執行緒會透過 vector_table_ptr 中傳遞的進入點,返回一般模式。

vector_table_ptr 必須位於目前的使用者位址空間中。context 可以是任何值。可用做傳回一般的值 模式會從受限模式返回。

options 必須為 0。

vector_table_ptr 函式中的引數會依架構而異:

在 x64 上,context 會放在 rdi 中,原因代碼則位於 rsi。 所有其他暫存器目前均未定義,包括堆疊指標。

在 arm64 上,context 會放置在 x0,而原因代碼則會放置在 x1。所有其他暫存器目前均未定義,包括堆疊指標。

在 riscv64 上,context 會放置在 a0,而原因代碼會放置在 a1。所有其他暫存器目前均未定義,包括堆疊指標。

原因代碼會指出一般模式執行作業恢復的原因。 此原因代碼可能是以下其中一個:ZX_RESTRICTED_REASON_SYSCALLZX_RESTRICTED_REASON_EXCEPTION

共用程序

使用 ZX_PROCESS_SHARED 選項或透過 zx_process_create_shared() 建立的程序,有兩個不同的位址空間。一個程序由多個程序共用,另一個程序可共用 僅限於特定程序進入恢復模式的執行緒時 屬於這類處理程序,執行緒的有效位址空間將更新如下:

  • 進入受限模式時,執行緒的有效位址空間會設為程序的受限位址空間。
  • 退出限制模式時,執行緒的有效位址空間會設為程序的共用位址空間。

權限

目前無

傳回值

成功時不會傳回任何值,因為目前的執行緒會透過 vector_table_ptr 間接傳回。如果失敗,系統會傳回負值錯誤。

錯誤

ZX_ERR_INVALID_ARGS vector_table_ptr 不是有效的使用者位址,或是 options 非零。

ZX_ERR_BAD_STATE 個受限模式註冊狀態無效。

另請參閱