handle_duplicate —— 复制句柄
#include <zircon/syscalls.h>
zx_status_t zx_handle_duplicate(zx_handle_t handle, zx_rights_t rights, zx_handle_t* out);
handle_duplicate() 创建handle的副本,并引用相同的底层对象,以及具有新的访问权限rights。
为了与原始句柄具有相同的权限,请使用ZX_RIGHT_SAME_RIGHTS。如果需要不同的权限,那么它们必须严格是原始句柄权限的子集。可以使用0来指定无权限的句柄。
handle必须具有ZX_RIGHT_DUPLICATE权限。
handle_duplicate() 执行成功,则返回ZX_OK,并通过out返回复制后的句柄。
ZX_ERR_BAD_HANDLE:handle是无效句柄。
ZX_ERR_INVALID_ARGS:请求的权限rights不是handle权限的子集,或out是无效指针。
ZX_ERR_ACCESS_DENIED:handle没有ZX_RIGHT_DUPLICATE权限,即不可被复制。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。