总结
给定包含子对象的内核对象,获取由提供的内核对象 ID 指定的子对象的句柄。
声明
#include <zircon/syscalls.h>
zx_status_t zx_object_get_child(zx_handle_t handle,
uint64_t koid,
zx_rights_t rights,
zx_handle_t* out);
说明
zx_object_get_child()
会尝试查找由 handle 引用的对象(具有由 koid 指定的内核对象 ID)的子对象。如果存在此类对象,并且请求的权限不大于 handle 提供给父级的权限,则返回指定子对象的新句柄。
rights 可能为 ZX_RIGHT_SAME_RIGHTS
,这将产生与标识名上相等的权利。
如果对象是一个 Process,则可以通过此调用获取其包含的 Threads。
如果对象是 Job,则可以通过此调用获取其(直接)子 Jobs 及其包含的 Processes。
权限
handle 必须具有 ZX_RIGHT_ENUMERATE
。
返回值
成功后,系统会返回 ZX_OK
,并通过 out 返回所需子对象的句柄。
错误
ZX_ERR_BAD_HANDLE
句柄不是有效的句柄。
ZX_ERR_WRONG_TYPE
handle 不是 Process、Job 或 Resource。
ZX_ERR_ACCESS_DENIED
handle 缺少右侧 ZX_RIGHT_ENUMERATE
或 rights 指定 handle 上不存在的权利。
ZX_ERR_NOT_FOUND
句柄没有内核对象 ID 为 koid 的子项。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
ZX_ERR_INVALID_ARGS
out 是无效的指针。