zx_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() 會變更記憶體對應的存取權保護措施 在 len 位元組範圍內 (從 addr 開始)。options 引數應 為下列一或多個項目的位元或函式:

  • ZX_VM_PERM_READ地圖易讀。如果處理常式是錯誤, 沒有 ZX_VM_CAN_MAP_READ 權限,帳號代碼有 則沒有 ZX_RIGHT_READ 右側。如果 VMO 控制代碼 用來建立對應關係中的 ZX_RIGHT_READ 不正確。
  • ZX_VM_PERM_WRITE對應於可寫入。如果處理常式是錯誤, 沒有 ZX_VM_CAN_MAP_WRITE 權限,帳號代碼有 則沒有 ZX_RIGHT_WRITE 右側。如果 VMO 控制代碼 用來建立對應關係中的 ZX_RIGHT_WRITE 不正確。
  • ZX_VM_PERM_EXECUTE對應為可執行項目。如果處理常式是錯誤, 沒有 ZX_VM_CAN_MAP_EXECUTE 權限,帳號代碼有 則沒有 ZX_RIGHT_EXECUTE 右側。如果 VMO 控制代碼 用來建立對應的 ZX_RIGHT_EXECUTE 不正確。
  • ZX_VM_PERM_READ_IF_XOM_UNSUPPORTED 如果系統可以讀取,即為可讀的資料 不支援只對應執行網頁。如果系統可以只對應執行 系統會忽略這個標記。

對於要求範圍中子區域的任何對應,其存取權限必須 可能會依照要求的變更減少,或維持不變。

len 必須對齊頁面。

權限

如果出現選項ZX_VM_PERM_READ帳號代碼必須是 ZX_OBJ_TYPE_VMAR 類型,且包含 ZX_RIGHT_READ

如果出現選項ZX_VM_PERM_WRITE帳號代碼必須是 ZX_OBJ_TYPE_VMAR 類型,且包含 ZX_RIGHT_WRITE

如果出現選項ZX_VM_PERM_EXECUTE帳號代碼必須是 ZX_OBJ_TYPE_VMAR 類型,且包含 ZX_RIGHT_EXECUTE

傳回值

zx_vmar_protect() 會在成功時傳回 ZX_OK

錯誤

ZX_ERR_BAD_HANDLE 帳號代碼不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE 帳號代碼並非 VMAR 控制代碼。

ZX_ERR_INVALID_ARGS prot_flags 是不支援的標記組合 (例如:ZX_VM_PERM_WRITE,而非 ZX_VM_PERM_READ),addr是 未對齊頁面、len 為 0,或要求範圍的部分子範圍是 子區域佔用空間,帳號代碼則沒有 ZX_RIGHT_OP_CHILDREN

ZX_ERR_NOT_FOUND 要求範圍的部分子範圍未對應。

ZX_ERR_ACCESS_DENIED 帳號代碼沒有針對 已要求變更,用於建立對應關係的原始 VMO 控制代碼未 擁有所要求變更的權利,或 VMAR 本身不允許 要求的變更,或是子區域有對應 的地圖對應權限增加。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。 使用者空間無法妥善處理這種 (異常) 錯誤。 在日後的版本中不會再發生這個錯誤。

附註

如果失敗作業是 ZX_ERR_NO_MEMORY 以外的錯誤,則代表範圍內的所有存取權限 維持不變。

另請參閱