vm_guatt 内核服务

用途

将全局内核内存的区域连接到当前进程的地址空间。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/vmuser.h>

int vm_guatt (kaddr, size, key, flags, uaddr)
void * kaddr;
vmsize_t size;
vmkey_t key;
long flags;
void ** uaddr;

参数

描述
卡德尔 要连接的内核地址 (在分配全局内存时从 vm_galloc 返回)。
大小 要插入到进程地址空间中的区域的长度 (以字节为单位)。
key 进程在访问连接的区域时将使用的保护密钥。
标志 VM_guatt 操作的类型; 必须设置为 任何位置
瓦德尔 指向 vm_guatt 连接了区域的用户空间地址的指针。 在进行 VM_guatt 调用时, 瓦德尔 (*瓦德尔) 所指向的位置必须为空。

描述

VM_guatt 是一个内核服务,用于将使用 vm_galloc 分配的全局内核内存的区域连接到进程的地址空间。 如果调用成功,那么将在 瓦德尔所指向的位置中返回进程地址空间中连接了内存的地址。

钥匙 可以设置为 VM_PRIVVM_UNPRIV。 如果它设置为 VM_PRIV,那么该进程将能够读写附加的区域。 如果它设置为 VM_UNPRIV,那么该进程将无法写入该区域,并且仅当该区域的 vm_galloc 已在启用 V_UREAD 标志的情况下完成时才能够读取该区域。

VM_guatt 附件不会在流程派生中继承。

执行环境

VM_guatt 内核服务只能从进程环境中进行调用。

返回值

描述
0 指示操作成功。
EINVAL 指示下列其中一个错误:
  • 标志钥匙 未设置为有效值, 大小 为 0 ,或者 瓦德尔 所指向的值为非 NULL。
  • 卡德尔大小 指示的区域不在先前由 vm_galloc分配的区域内。

实现细节

VM_guatt 内核服务是基本操作系统 (BOS) 运行时的一部分。