摘要
設定工作安全性和資源政策。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_job_set_policy(zx_handle_t handle,
uint32_t options,
uint32_t topic,
const void* policy,
uint32_t policy_size);
說明
將一或多項安全性和/或資源政策設為空白工作。工作的 有效的政策則是父項有效政策與 policy 中指定的政策。如果您 現有政策和新政策是由 options 值控制:
ZX_JOB_POL_RELATIVE
:政策僅用於條件以外的條件 而遭到父項政策覆寫ZX_JOB_POL_ABSOLUTE
:政策會套用至政策中的所有條件; 也會造成系統呼叫失敗
在這項呼叫成功後,任何新的子項程序或子項工作都會包含新的 有效政策。
topic 表示 policy 格式。支援的值為 ZX_JOB_POL_BASIC_V1
、
ZX_JOB_POL_BASIC_V2
和ZX_JOB_POL_TIMER_SLACK
。
ZX_JOB_POL_BASIC_V2 and V1
ZX_JOB_POL_BASIC_V2
的 topic 表示 policy 是 count 的陣列
項目:
typedef struct zx_policy_basic {
uint32_t condition;
uint32_t action;
uint32_t flags;
} zx_policy_basic_v2_t;
ZX_JOB_POL_BASIC_V1
的 topic 表示 policy 是 count 的陣列
項目:
// Deprecated. Use zx_policy_basic_v2_t.
typedef struct zx_policy_basic {
uint32_t condition;
uint32_t policy;
} zx_policy_basic_v1_t;
其中 condition 為下列任一值:
ZX_POL_BAD_HANDLE
正嘗試執行這項工作的處理程序 發出含有無效帳號代碼的 syscall。在本例中ZX_POL_ACTION_ALLOW
和ZX_POL_ACTION_DENY
等於: 如果系統呼叫傳回,則一律會傳回錯誤ZX_ERR_BAD_HANDLE
。ZX_POL_WRONG_OBJECT
正嘗試執行這項工作的處理程序 透過不支援該作業的帳號代碼發出 Syscall。- 此工作中的
ZX_POL_VMAR_WX
程序正嘗試對應 取得寫入執行權限 ZX_POL_NEW_VMO
正嘗試建立這項工作下的程序 新的 VM 物件ZX_POL_NEW_CHANNEL
正嘗試建立這項工作下的程序 新管道。ZX_POL_NEW_EVENT
正嘗試建立這項工作下的程序 如要建立新活動,ZX_POL_NEW_EVENTPAIR
正嘗試建立這項工作下的程序 或建立新的事件組合ZX_POL_NEW_PORT
正嘗試建立這項工作下的程序 新的通訊埠ZX_POL_NEW_SOCKET
正嘗試建立這項工作下的程序 新的通訊端ZX_POL_NEW_FIFO
正嘗試建立這項工作下的程序 新敵人ZX_POL_NEW_TIMER
正嘗試建立這項工作下的程序 設定新計時器ZX_POL_NEW_PROCESS
正嘗試建立這項工作下的程序 新的流程ZX_POL_NEW_PROFILE
正嘗試建立這項工作下的程序 建立新的設定檔ZX_POL_NEW_PAGER
正嘗試建立這項工作下的程序 或開啟新的 VMO 呼叫器ZX_POL_AMBIENT_MARK_VMO_EXEC
正嘗試執行這項工作中的程序 搭配ZX_HANDLE_INVALID
使用zx_vmo_replace_as_executable()
做為第二個引數,而不是具有基本底數的有效ZX_RSRC_KIND_SYSTEM
資源ZX_RSRC_SYSTEM_VMEX_BASE
。ZX_POL_NEW_ANY
是特殊的限制條件,代表所有的 上述ZX_NEW
條件,例如ZX_POL_NEW_VMO
ZX_POL_NEW_CHANNEL
、ZX_POL_NEW_EVENT
、ZX_POL_NEW_EVENTPAIR
、ZX_POL_NEW_PORT
、ZX_POL_NEW_SOCKET
、ZX_POL_NEW_FIFO
、 以及未來所有ZX_NEW
政策這包括所有新的 不需要父項物件即可建立的核心物件。ZX_POL_NEW_IOB
正嘗試建立這項工作下的程序 新的 IOBuffer
其中 ZX_JOB_POL_BASIC_V1
政策或 ZX_JOB_POL_BASIC_V2
的動作
是以下任一個值:
ZX_POL_ACTION_ALLOW
允許 condition 屬性。ZX_POL_ACTION_DENY
避免出現 condition 狀況。ZX_POL_ACTION_ALLOW_EXCEPTION
會透過偵錯通訊埠產生例外狀況。 透過這種方式產生的例外狀況可做為中斷點。討論串可能是 就會繼續執行。重新啟用後,條件就會觸發 則可視為未違反政策時的例外狀況。ZX_POL_ACTION_DENY_EXCEPTION
和ZX_POL_ACTION_ALLOW_EXCEPTION
一樣, 但在恢復之後,condition 將會遭拒,通常會導致ZX_ERR_ACCESS_DENIED
。ZX_POL_ACTION_KILL
終止程序。
其中 flags 是之一
ZX_POL_OVERRIDE_ALLOW
允許變更子項工作的這項政策。ZX_POL_OVERRIDE_DENY
不允許變更子項工作這項政策。
無論覆寫模式為何,只要 Job 具有任何子項政策 可能會發生變化
ZX_JOB_POL_TIMER_SLACK
如果 topic 為 ZX_JOB_POL_TIMER_SLACK
,表示 policy 為:
typedef struct zx_policy_timer_slack {
zx_duration_t min_slack;
uint32_t default_mode;
} zx_policy_timer_slack_t;
min_slack 會指定計時器適用的最低曝光量,以及 由工作建立的期限型事件。
如果父項工作的 min_slack 大於指定的 min_slack,則 則會使用父項工作的值也就是說,工作的 min_slack 是 指定值的最大值,以及其父項工作的 min_slack。
default_mode 指定在未另外指定的情況下套用 slack 的方式 是由 Syscall 引數傳回工作的 default_mode 父項工作的 default_mode。default_mode 可能的值包括:
ZX_TIMER_SLACK_CENTER
ZX_TIMER_SLACK_EARLY
ZX_TIMER_SLACK_LATE
詳情請參閱計時器滑桿。
設定計時器休眠政策時,options 必須為 ZX_JOB_POL_RELATIVE
,且
count
必須是 1。
權限
handle 必須是 ZX_OBJ_TYPE_JOB
類型,且包含 ZX_RIGHT_SET_POLICY
。
傳回值
zx_job_set_policy()
會在成功時傳回 ZX_OK
。萬一發生錯誤
傳回的錯誤值
附註
呼叫 zx_object_get_info()
時一律不會套用 ZX_POL_BAD_HANDLE
政策
「ZX_INFO_HANDLE_VALID
」主題。所有其他主題和所有其他系統呼叫
若使用帳號代碼,則須遵守政策規定。
錯誤
ZX_ERR_INVALID_ARGS
政策不是有效的指標,或 count 為 0,
或政策不是 ZX_JOB_POL_RELATIVE
或 ZX_JOB_POL_ABSOLUTE
,或
topic 不是 ZX_JOB_POL_BASIC
。
ZX_ERR_BAD_HANDLE
帳號代碼無效。
ZX_ERR_WRONG_TYPE
處理常式並非工作帳號代碼。
ZX_ERR_ACCESS_DENIED
帳號代碼沒有 ZX_POL_RIGHT_SET
正確。
ZX_ERR_BAD_STATE
工作目前有現有工作或處理程序生效。
ZX_ERR_OUT_OF_RANGE
count 大於 ZX_POL_MAX
或 condition 為
大於 ZX_POL_MAX
。
有 ZX_ERR_ALREADY_EXISTS
項現有政策與新政策發生衝突。
ZX_ERR_NOT_SUPPORTED
政策中的項目包含無效值。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。