vm_protect_kkey 内核服务
用途
在内核地址范围上设置内核密钥。
语法
参数
| 项 | 描述 |
|---|---|
| 埃德尔 | 要保护的起始地址。 |
| nbytes | 要保护的字节数。 |
| 凯基 | 要在内存上设置的内核键值。 |
| 标志 | 定义的标志值为:
|
描述
vm_protect_kkey() 内核服务用于变更与虚拟内存范围相关联的内核密钥。 如果已设置,那么引用内存的任何代码都需要在其活动密钥集中包含内核密钥。 为 eaddr 到 eaddr + nbytes-1指定的有效地址范围内的所有页面设置内核密钥。 如果地址范围未指定由完整页的整数组成的页对齐区域,那么将返回错误。
缺省情况下,在更改存储器密钥时执行权限检查。 此检查要求 vm_protect_kkey() 调用者对页面的当前内核密钥具有写访问权。 可以通过设置 VMPK_NO_CHECK_AUTHORITY 值来覆盖此权限检查,但建议不要这样做,因为此检查可以防止某些编程错误。
执行环境
只能从 进程环境 调用 vm_protect_kkey 内核服务。
返回值
| 项 | 描述 |
|---|---|
| 0 | 成功。 |
| EINVAL_VM_PROTECT_KKEY | 参数或执行环境无效。 |
| EINVAL_VM_PROTECT_KKEY_PPAGE | 请求包含部分页面。 |
| EFAULT_VM_PROTECT_KKEY | 地址范围无效。 |
| EPERM_VM_PROTECT_KKEY | 权限不足,无法执行操作。 |
如果 vm_protect_kkey() 内核服务由于不同于 EINVAL_VM_PROTECT_KKEY 错误代码指定的条件而失败,那么可能已更改 (eaddr, eaddr + nbytes-1) 范围内某些页面的内核密钥。