摘要
要求各種核心物件的各種屬性。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_object_get_property(zx_handle_t handle,
uint32_t property,
void* value,
size_t value_size);
說明
zx_object_get_property()
要求核心物件的屬性值。
如要取得屬性,必須具備帳號代碼的 ZX_RIGHT_GET_PROPERTY
權限。
handle 參數代表目標核心物件。不同資源 僅適用於特定類型的核心物件,如下所述。
property 參數會指明要取得/設定的屬性。屬性值
前置字串為 ZX_PROP_
,相關說明如下。
value 參數用於存放屬性值,而且必須是指向 value_size 個位元組的緩衝區。不同資源接收的值不同 類型/大小
屬性
屬性值含有 ZX_PROP_
前置字串,
#include <zircon/syscalls/object.h>
ZX_PROP_NAME
handle 類型:下列任一種:
- 工作
- 程序
- 執行緒
- 資源
- 虛擬記憶體物件 (VMO)
- 匯流排交易發起者 (BTI)
value 類型:char[ZX_MAX_NAME_LEN]
允許的作業:get
、set
物件名稱,為 NUL 結尾的字串。
嘗試取得或設定已結束的執行緒名稱會失敗,並顯示 ZX_ERR_BAD_STATE
。
ZX_PROP_REGISTER_FS 和 ZX_PROP_REGISTER_GS
handle 類型:Thread
value 類型:uintptr_t
允許的作業:get
、set
x86 FS.BASE 或 GS.BASE 註冊單位的值分別。value
必須
做為標準位址如果嘗試設定非標準位址,就會失敗,
ZX_ERR_INVALID_ARGS
。
這是 rdfsbase
、wrfsbase
和 rdgsbase
的替代軟體,
在較新的 x86-64 CPU 上支援的 wrgsbase
指令組合,應會運作
與直接使用 CPU 指令完全相同 (除非
當您嘗試設定非標準位址時,值仍會發生錯誤
而非產生機器例外狀況)。如果 CPU
支援這些指示 (如 cpuid
指示所回報),則
更有效率也更簡單。
僅針對 x86-64 定義。在其他架構上傳回 ZX_ERR_NOT_SUPPORTED
。
如未從目前的執行緒叫用,會傳回 ZX_ERR_ACCESS_DENIED
。
ZX_PROP_PROCESS_DEBUG_ADDR
handle 類型:Process
value 類型:uintptr_t
允許的作業:get
、set
ld.so 的 _dl_debug_addr
值。偵錯工具可以根據這項資訊
幹擾動態載入器的狀態。
ZX_PROP_PROCESS_BREAK_ON_LOAD
handle 類型:Process
value 類型:uintptr_t
允許的作業:get
、set
判斷動態載入器是否會在每次載入應用程式 共用媒體庫如果在程序的第一個執行緒執行前設定,該執行緒也會 觸發初始載入的偵錯陷阱。
動態載入器將 ZX_PROP_PROCESS_DEBUG_ADDR
的預期值設為
觸發這個偵錯標記例外狀況處理常式可以使用這個屬性查詢
動態載入器的狀態。
當動態載入器發出偵錯標記時,也會設定
ZX_PROP_PROCESS_BREAK_ON_LOAD
設為偵錯標記的地址,讓
偵錯工具可以將這個值與例外狀況地址
判斷動態載入器是否觸發了偵錯陷阱。
系統會將任何非零的值視為啟用此功能。將此屬性設為 0 就會停用該功能偵錯工具也可以使用這項屬性來偵測 已有其他偵錯工具附加至相同的程序
ZX_PROP_PROCESS_VDSO_BASE_ADDRESS
handle 類型:Process
value 類型:uintptr_t
允許的作業:get
vDSO 對應的基本地址,或是零。
ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID
handle 類型:Process
value 類型:uintptr_t
允許的作業:get
結構定義 ID 則區分硬體指示追蹤中的不同程序。 在 Intel X86-64 上,這是註冊 CR3 的值。
如要取得 ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID
,您必須指定
kernel.enable-debugging-syscalls=true
執行。否則
這個函式會傳回 ZX_ERR_NOT_SUPPORTED
。
目前僅為 X86 定義。
ZX_PROP_SOCKET_RX_THRESHOLD
handle 類型:Socket
value 類型:size_t
允許的作業:get
、set
通訊端的讀取門檻大小,以位元組為單位。設定這個選項將會
如果可以讀取的資料量,則宣告 ZX_SOCKET_READ_THRESHOLD
大於或等於門檻。將此屬性設為零
將導致 ZX_SOCKET_READ_THRESHOLD
的審查。
設定值大於
通訊端將失敗,並顯示 ZX_ERR_INVALID_ARGS
。
ZX_PROP_SOCKET_TX_THRESHOLD
handle 類型:Socket
value 類型:size_t
允許的作業:get
、set
通訊端的寫入門檻大小 (以位元組為單位)。設定這個選項將會
如果可供寫入的空間容量,則宣告 ZX_SOCKET_WRITE_THRESHOLD
大於或等於門檻。將此屬性設為零
將導致 ZX_SOCKET_WRITE_THRESHOLD
的審查。將
對等點關閉後的寫入閾值是錯誤,且
傳回 ZX_ERR_PEER_CLOSED
項錯誤。
設定值大於
通訊端將失敗,並顯示 ZX_ERR_INVALID_ARGS
。
ZX_PROP_JOB_KILL_ON_OOM
handle 類型:Job
value 類型:size_t
允許的作業:set
如果值為 1,表示該工作及其子項會在
會發現自身處在系統全系統的低記憶體情況下呼叫 0
(預設值) 選擇不要在
情境。如果設為任何其他值,就會失敗並顯示 ZX_ERR_INVALID_ARGS
。
ZX_PROP_EXCEPTION_STATE
handle 類型:Exception
value 類型:uint32_t
允許的作業:get
、set
如果設為 ZX_EXCEPTION_STATE_HANDLED
,關閉例外狀況控點會
完成例外狀況處理,然後繼續執行基礎執行緒。
如果設為 ZX_EXCEPTION_STATE_TRY_NEXT
,關閉例外狀況控點會
繼續處理例外狀況,按照順序嘗試下一個處理常式。
如果設為 ZX_EXCEPTION_STATE_THREAD_EXIT
,關閉例外狀況控點會
產生例外狀況的執行緒就會結束。
如果設為任何其他值,就會失敗並顯示 ZX_ERR_INVALID_ARGS
。
ZX_PROP_EXCEPTION_STRATEGY
handle 類型:Exception
value 類型:uint32_t
允許的作業:get
、set
如果設定 ZX_EXCEPTION_STRATEGY_SECOND_CHANCE
,偵錯工具則會收到「秒」
機率來處理例外狀況。
如果設定 ZX_EXCEPTION_STRATEGY_FIRST_CHANCE
,偵錯工具就不會收到
處理例外狀況的第二次機會
如果設為任何其他值,就會失敗並顯示 ZX_ERR_INVALID_ARGS
。
只有在控點對應至偵錯工具程序時,才能設定這項屬性
例外狀況管道。在例外狀況管道時嘗試設定這個屬性
為任何其他類型都會產生 ZX_ERR_BAD_STATE
。
ZX_PROP_STREAM_MODE_APPEND
handle 類型:Stream
value 類型:uint8_t
允許的作業:get
、set
如果串流處於附加模式,這個屬性的值為 1
,且
0
的值,表示串流並未處於附加模式。以附加模式的串流會
以不可分割的形式,將串流的跳轉偏移設為串流內容大小
寫入 zx_stream_writev()
之前。
權限
handle 必須包含 ZX_RIGHT_GET_PROPERTY
,且必須是支援的 ZX_OBJ_TYPE_
屬性,如上方個別屬性說明中所述。
傳回值
zx_object_get_property()
會在成功時傳回 ZX_OK
。如果發生以下情況:
失敗時,會傳回負的錯誤值。
錯誤
如需個別屬性值的特定錯誤資訊,請參閱上方的說明。 常見錯誤如下:
ZX_ERR_BAD_HANDLE
:handle 不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
:帳號代碼不適用於 property 的類型。
ZX_ERR_ACCESS_DENIED
:帳號代碼沒有
作業。
ZX_ERR_INVALID_ARGS
:value 是無效的指標。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。
ZX_ERR_BUFFER_TOO_SMALL
:value_size 對 property 而言太小。
ZX_ERR_NOT_SUPPORTED
:屬性不存在。