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