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() 會從 addr 開始,變更 len 個位元組範圍中記憶體對應的存取權保護措施。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 必須對齊頁面。

權限

如果 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 帳號代碼不是有效的帳號代碼。

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 以外的失敗,範圍中的所有存取權限將維持不變。

另請參閱