z_vmar_protect

摘要

设置虚拟内存页面的保护功能。

声明

#include <zircon/syscalls.h>

zx_status_t zx_vmar_protect(zx_handle_t handle,
                            zx_vm_option_t options,
                            zx_vaddr_t addr,
                            size_t len);

说明

zx_vmar_protect() 会更改内存映射的访问保护 在从 addr 开始的 len 字节范围内。options 参数应该 为按位或下列一个或多个值:

  • ZX_VM_PERM_READ:映射为可读状态。如果 handle 没有 ZX_VM_CAN_MAP_READ 权限或 handle 具有 无权使用ZX_RIGHT_READ。如果 VMO 句柄 用于创建映射的 ZX_RIGHT_READ 权限无效。
  • ZX_VM_PERM_WRITE:映射可写入。如果 handle 没有 ZX_VM_CAN_MAP_WRITE 权限或 handle 具有 无权使用ZX_RIGHT_WRITE。如果 VMO 句柄 用于创建映射的 ZX_RIGHT_WRITE 权限无效。
  • ZX_VM_PERM_EXECUTE 映射为可执行文件。如果 handle 没有 ZX_VM_CAN_MAP_EXECUTE 权限或 handle 具有 无权使用ZX_RIGHT_EXECUTE。如果 VMO 句柄 用于创建映射的 ZX_RIGHT_EXECUTE 权限无效。
  • ZX_VM_PERM_READ_IF_XOM_UNSUPPORTED 映射为可读(如果系统执行了此操作) 不支持映射只执行页面。如果系统可以映射只执行 则忽略此标志。

对于请求范围内的子区域中的任何映射,其访问权限必须: 减少或保持不变。

len 必须与页面对齐。

权限

如果optionsZX_VM_PERM_READhandle 的类型必须为 ZX_OBJ_TYPE_VMAR 且具有 ZX_RIGHT_READ

如果optionsZX_VM_PERM_WRITEhandle 的类型必须为 ZX_OBJ_TYPE_VMAR 且具有 ZX_RIGHT_WRITE

如果optionsZX_VM_PERM_EXECUTEhandle 的类型必须为 ZX_OBJ_TYPE_VMAR 且具有 ZX_RIGHT_EXECUTE

返回值

如果成功,zx_vmar_protect() 会返回 ZX_OK

错误

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_WRONG_TYPE handle 不是 VMAR 句柄。

ZX_ERR_INVALID_ARGS prot_flags 是不受支持的标志组合 (例如,ZX_VM_PERM_WRITE(而非 ZX_VM_PERM_READ),addr 是 未页面对齐、len 为 0,或所请求范围的某个子范围 且 handle 没有 ZX_RIGHT_OP_CHILDREN

ZX_ERR_NOT_FOUND所请求范围的部分子范围未映射。

ZX_ERR_ACCESS_DENIED handle 不具备适当的权限, 请求的更改,用于创建映射的原始 VMO 句柄 或 VMAR 本身不允许执行 或者某个子区域中有 其映射权限增加了

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有好办法处理这种(不太可能)错误。 在将来的版本中,此错误不会再发生。

备注

对于 ZX_ERR_NO_MEMORY 以外的故障,范围内的所有访问权限 会保持不变

另请参阅