摘要
設定虛擬記憶體頁面的保護功能。
宣告
#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
以外的錯誤,則代表範圍內的所有存取權限
維持不變。