zx_object_get_property, zx_object_set_property
名称
object_get_property —— 获取内核对象的各种属性值。
object_set_property —— 设置内核对象的各种属性值。
概要
#include <zircon/syscalls.h>
#include <zircon/syscalls/object.h>
zx_status_t zx_object_get_property(zx_handle_t handle, uint32_t property,
void* value, size_t value_size);
zx_status_t zx_object_set_property(zx_handle_t handle, uint32_t property,
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 前缀,并在下面文件中定义
#include <zircon/syscalls/object.h>
ZX_PROP_NAME
handle类型:(大多数的类型)
value类型:char[ZX_MAX_NAME_LEN]
允许操作:get,set
对象的名称,以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
允许操作:get,set
ld.so的值是_dl_debug_addr
。
调试器可以使用它来查询动态加载器的状态。
如果在创建进程时将此值设置为ZX_PROCESS_DEBUG_ADDR_BREAK_ON_SET
,接下来的运行中,在将该属性设置为正确的值时,加载程序将手动地发出调试断点中断。
这为读取或修改程序初始状态提供了手段。
ZX_PROP_PROCESS_VDSO_BASE_ADDRESS
handle类型:Process
value类型:uintptr_t
允许的操作:get,set
vDSO映射的基地址值,或为0。
ZX_PROP_JOB_IMPORTANCE
handle类型:Job
value类型:size_t
允许的操作:get,set
关于某个任务的重要性的提示值,用于在内存不足(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_HANDLE:handle是无效句柄
ZX_ERR_WRONG_TYPE:handle的类型不适合property属性
ZX_ERR_ACCESS_DENIED:handle缺少需要的操作权限
ZX_ERR_INVALID_ARGS:value是无效指针 ZX_ERR_NO_MEMORY:由于内存不足导致的失败。 而用户空间无法处理这个(不太可能发生的)错误。 在将来的构建版本中,将不再出现此错误。
ZX_ERR_BUFFER_TOO_SMALL:对于property属性来说,value_size的值太小
ZX_ERR_NOT_SUPPORTED:property属性不存在