zx_object_get_property, zx_object_set_property


英文原文快照


名称

object_get_property —— 获取内核对象的各种属性值。

object_set_property —— 设置内核对象的各种属性值。

概要

  1. #include <zircon/syscalls.h>
  2. #include <zircon/syscalls/object.h>
  3. zx_status_t zx_object_get_property(zx_handle_t handle, uint32_t property,
  4. void* value, size_t value_size);
  5. zx_status_t zx_object_set_property(zx_handle_t handle, uint32_t property,
  6. const void* value, size_t value_size);

描述

zx_object_get_property() 的功能是获取内核对象的属性值。 获取属性需要句柄具有ZX_RIGHT_GET_PROPERTY权限。

zx_object_set_property() 的功能是修改内核对象的属性值。 修改属性需要句柄具有ZX_RIGHT_SET_PROPERTY权限。

handle参数用于表示目标内核对象。 不同的属性仅适用于特定类型的内核对象,具体如下所述。

property参数用于表示要获取/设置的属性。 属性值带有前缀ZXPROP,具体如下所述。

value参数用于保存属性值,并且必须是指向size字节大小的缓冲区的指针。 不同的属性需要不同类型/大小的值,具体如下所述。

属性

属性值都带有ZXPROP 前缀,并在下面文件中定义

  1. #include <zircon/syscalls/object.h>

ZX_PROP_NAME

handle类型:(大多数的类型)

value类型:char[ZX_MAX_NAME_LEN]

允许操作:getset 对象的名称,以NULL结尾的字符串。

ZX_PROP_REGISTER_FS和ZX_PROP_REGISTER_GS

handle类型:Thread

value类型:uintptr_t

允许操作:set

x86处理器的FS或GS段寄存器的值。 value必须是规范的地址,并且必须是用户空间中的地址。

仅为x86-64体系结构所定义。

ZX_PROP_PROCESS_DEBUG_ADDR

handle类型:Process

value类型:uintptr_t

允许操作:getset

ld.so的值是_dl_debug_addr。 调试器可以使用它来查询动态加载器的状态。

如果在创建进程时将此值设置为ZX_PROCESS_DEBUG_ADDR_BREAK_ON_SET,接下来的运行中,在将该属性设置为正确的值时,加载程序将手动地发出调试断点中断。 这为读取或修改程序初始状态提供了手段。

ZX_PROP_PROCESS_VDSO_BASE_ADDRESS

handle类型:Process

value类型:uintptr_t

允许的操作:getset

vDSO映射的基地址值,或为0。

ZX_PROP_JOB_IMPORTANCE

handle类型:Job

value类型:size_t

允许的操作:getset

关于某个任务的重要性的提示值,用于在内存不足(OOM)而需强制杀死任务时为任务排序。

其他错误码:

  • ZX_ERR_OUT_OF_RANGE:如果该重要性值无效

ZX_PROP_SOCKET_RX_BUF_MAX

handle类型:Socket

value类型:size_t

允许的操作:get

Socket接收缓冲区的最大容量大小,以字节为单位。 由于额外的开销,接收缓冲区的最大可用容量实际可能小于该最大值。

ZX_PROP_SOCKET_RX_BUF_SIZE

handle类型:Socket

value类型:size_t

允许的操作:get

Socket接收缓冲区的大小,以字节为单位。

ZX_PROP_SOCKET_TX_BUF_MAX

handle类型:Socket

value类型:size_t

允许的操作:get

Socket发送缓冲区的最大容量大小,以字节为单位。 由于额外的开销,传输缓冲区的最大可用容量实际可能小于该最大值。

ZX_PROP_SOCKET_TX_BUF_SIZE

handle类型:Socket

value类型:size_t

允许的操作:get

Socket发送缓冲区的大小,以字节为单位。

ZX_PROP_CHANNEL_TX_MSG_MAX

handle类型:Channel

value类型:size_t

允许的操作:get

该属性表示通道的端点在其传出方向上可以的排队的最大数据包数量。

权限

TODO(ZX-2399)

返回值

zx_object_get_property() 执行成功则返回ZX_OK。 如果发生错误,将返回以下错误码之一。

错误码

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_SMALL:对于property属性来说,value_size的值太小

ZX_ERR_NOT_SUPPORTEDproperty属性不存在

另见

object_set_property