zx_object_get_property

摘要

要求各種核心物件的各種屬性。

宣告

#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]

允許的作業:getset

物件名稱,為 NUL 結尾的字串。

嘗試取得或設定已結束的執行緒名稱會失敗,並顯示 ZX_ERR_BAD_STATE

ZX_PROP_REGISTER_FS 和 ZX_PROP_REGISTER_GS

handle 類型:Thread

value 類型:uintptr_t

允許的作業:getset

x86 FS.BASE 或 GS.BASE 註冊單位的值分別。value必須 做為標準位址如果嘗試設定非標準位址,就會失敗, ZX_ERR_INVALID_ARGS

這是 rdfsbasewrfsbaserdgsbase 的替代軟體, 在較新的 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

允許的作業:getset

ld.so 的 _dl_debug_addr 值。偵錯工具可以根據這項資訊 幹擾動態載入器的狀態。

ZX_PROP_PROCESS_BREAK_ON_LOAD

handle 類型:Process

value 類型:uintptr_t

允許的作業:getset

判斷動態載入器是否會在每次載入應用程式 共用媒體庫如果在程序的第一個執行緒執行前設定,該執行緒也會 觸發初始載入的偵錯陷阱。

動態載入器將 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

允許的作業:getset

通訊端的讀取門檻大小,以位元組為單位。設定這個選項將會 如果可以讀取的資料量,則宣告 ZX_SOCKET_READ_THRESHOLD 大於或等於門檻。將此屬性設為零 將導致 ZX_SOCKET_READ_THRESHOLD 的審查。

設定值大於 通訊端將失敗,並顯示 ZX_ERR_INVALID_ARGS

ZX_PROP_SOCKET_TX_THRESHOLD

handle 類型:Socket

value 類型:size_t

允許的作業:getset

通訊端的寫入門檻大小 (以位元組為單位)。設定這個選項將會 如果可供寫入的空間容量,則宣告 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

允許的作業:getset

如果設為 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

允許的作業:getset

如果設定 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

允許的作業:getset

如果串流處於附加模式,這個屬性的值為 1,且 0 的值,表示串流並未處於附加模式。以附加模式的串流會 以不可分割的形式,將串流的跳轉偏移設為串流內容大小 寫入 zx_stream_writev() 之前。

權限

handle 必須包含 ZX_RIGHT_GET_PROPERTY,且必須是支援的 ZX_OBJ_TYPE_ 屬性,如上方個別屬性說明中所述。

傳回值

zx_object_get_property() 會在成功時傳回 ZX_OK。如果發生以下情況: 失敗時,會傳回負的錯誤值。

錯誤

如需個別屬性值的特定錯誤資訊,請參閱上方的說明。 常見錯誤如下:

ZX_ERR_BAD_HANDLEhandle 不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE帳號代碼不適用於 property 的類型。

ZX_ERR_ACCESS_DENIED帳號代碼沒有 作業。

ZX_ERR_INVALID_ARGSvalue 是無效的指標。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。 使用者空間無法妥善處理這種 (異常) 錯誤。 在日後的版本中不會再發生這個錯誤。

ZX_ERR_BUFFER_TOO_SMALLvalue_sizeproperty 而言太小。

ZX_ERR_NOT_SUPPORTED屬性不存在。

另請參閱