总结
创建受限状态 VMO 并将其绑定到当前线程。
声明
#include <zircon/syscalls-next.h>
zx_status_t zx_restricted_bind_state(uint32_t options, zx_handle_t* out_vmo);
说明
创建 VMO 以保存 zx_restricted_state_t
。将 VMO 绑定到当前线程,以便后续调用 zx_restricted_enter()
时使用它在进入/退出受限模式时恢复/保存受限模式状态。
虽然返回的 VMO out_vmo
与 zx_vmo_create()
创建的 VMO 类似,但某些操作不受支持,并且可能会失败并报错。例如,不支持调整大小和创建子 VMO。支持通过 zx_vmo_read()
/zx_vmo_write()
进行映射、取消映射和读取/写入。
一个线程一次只能绑定一个受限状态 VMO。尝试绑定另一个 VMO 会替换已绑定的 VMO。
只有在最后一个用户句柄关闭、最后一个用户映射被移除并且发生以下情况之一后,绑定的 VMO 才会被销毁:
它通过
zx_restricted_bind_state()
替换。它通过
zx_restricted_unbind_state()
明确移除。线程会被销毁。
与任何其他 VMO 一样,VMO 经过映射后,会通过其映射保留,因此调用方可以关闭句柄并通过映射直接访问内存。
进入受限模式后,系统会加载 VMO 的偏移量 0 处的 zx_restricted_state_t
,并相应地恢复执行。退出受限模式后,线程的受限状态将以 VMO 的偏移量 0 保存。
options 必须为零。
权限
调用方的作业政策必须允许 ZX_POL_NEW_VMO
。
错误
ZX_ERR_INVALID_ARGS
out_vmo 是无效的指针或 NULL,或者 options 是 0 以外的任何值。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。