z_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 指令完全相同(不同的是, 尝试设置非规范地址,因为该值只会收到错误 而不是生成机器异常)。在使用 支持这些指令(由 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 的预期值设置为 触发此调试陷阱。异常处理程序可以使用该属性查询 动态加载器的状态。

当动态加载程序发出调试 trap 时,还会将 将 ZX_PROP_PROCESS_BREAK_ON_LOAD 设置为调试 trap 的地址,以便 调试程序可以将该值与异常地址进行比较, 确定调试 trap 是否由动态加载器触发。

任何非零值都被视为启用此功能。将此属性设置为 则将其停用调试程序也可以使用此属性来检测 已有另一个调试程序连接到同一进程。

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 表示在以下情况下,Job 及其子项将被终止: 系统发现自身处于系统级内存不足的情况。已与 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。如果出现 失败,则返回负的错误值。

错误

上述说明中记录了各个 property 值的具体错误。 常见错误如下:

ZX_ERR_BAD_HANDLEhandle 不是有效的句柄。

ZX_ERR_WRONG_TYPEhandle 类型不是 property 的合适类型。

ZX_ERR_ACCESS_DENIEDhandle 不具备 操作。

ZX_ERR_INVALID_ARGSvalue 是无效的指针。

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有好办法处理这种(不太可能)错误。 在将来的版本中,此错误不会再发生。

ZX_ERR_BUFFER_TOO_SMALLvalue_sizeproperty 而言过小。

ZX_ERR_NOT_SUPPORTED属性不存在。

另请参阅