fskv_reg 内核服务
用途
注册调出处理程序以验证文件系统操作。
语法
#include <sys/xfops.h>
int fskv_reg(fskv_t *fs_kv, ulong options);
typedef struct fskv {
int version_number;
int (*kv_open)(struct xfid *xfp,
long flags,
cred_ext_t *crxp);
int (*kv_setattr)(struct xfid *xfp,
long op,
long arg1,
long arg2,
long arg3,
cred_ext_t *crxp);
} fskv_t;
参数
- 弗什克夫
- 指定一组调出函数,调用这些函数是为了验证内核中的文件系统操作。
- 选项
- 指定注册选项的位掩码。 当前未定义 options 参数。 调用者必须将 options 参数设置为
0。
描述
fskv_reg 内核服务注册在执行特定于文件系统的操作之前调用的函数数组。
在注册调出处理程序后,在每个受影响的操作之前都将调用相应的验证例程。
仅可注册一个调出数组。 向 fskv_reg 内核服务注册调出数组后,在调用 fskv_unreg 内核服务之前,后续调用 fskv_reg 内核服务不会成功。 fskv_reg 内核服务的调用者必须具有 root 用户权限。
执行环境
只能从进程环境调用 fskv_reg 内核服务。
返回值
成功完成时, fskv_reg 内核服务会返回值 0。
发生故障时可能会返回以下错误代码:
- EEXIST
- 已注册该调出数组。
- EPERM
- 调用者不具有调用此函数的许可权。
- EINVAL
- 某个参数无效。
调出处理程序
可以为 open, chmod, chown和 utimes 系统调用指定调出。 chmod, chown和 utimes 系统调用通过 setattr 调用在内核中的单个操作进行处理。
如果验证调出例程返回非零值,那么将停止文件系统操作,并且系统调用将返回 EPERM 值。
仅对本地物理文件系统 (JFS2 和 JFS) 和网络文件系统 (NFS) 安装的文件系统调用验证例程。 调出函数将接受以下参数。 xfid 参数唯一地标识当前正在运行的系统中的文件。
typedef struct xfid {
fsid_t x_fsid;
fid_t x_fid;
} xfid_t;
kv_open () 调出函数
kv_open 调出函数包含可供文件系统的开放式例程用于跟踪和验证开放式调用的信息。
语法
#include <sys/file.h>
#include <sys/cred.h>
int (*kv_open)(struct xfid *xfp,
long flags,
void *nrp,
cred_ext_t *crxp);参数
- Xfp
- 指向用于标识文件系统和对象的
xfid结构的指针。 - 恩里普
- 名称解析信息。 如果调用了
xfidToName内核服务,那么必须将此参数传递给它。 从调出函数返回此指针后,此指针无效。 - 标志
- 打开由应用程序传递的标志。
- 克克斯普
- 指向调用进程的凭证的指针。
返回值
- 零
- 指示验证已成功完成。
- 非零
- 指示验证已失败。
kv_setattr () 调出函数
kv_setattr 调出函数包含可用于启动此函数的系统调用的信息。 setattr 函数由 chown, chmod和 utimes 系统调用以及这些系统调用的变体 (例如, fchown, fchmod和 futimens 系统调用) 调用。
语法
#include <sys/vattr.h>
#include <sys/cred.h>
int (*kv_setattr)(struct xfid *xfp,
long op,
long arg1,
long arg2,
long arg3,
void *nrp,
cred_ext_t *crxp);参数
- Xfp
- 指向用于标识文件系统和对象的
xfid结构的指针。 - op
- 指定下列其中一个操作:
- V_OWN
- 设置文件所有权。
- 方式 (_MODE)
- 设置文件方式。
- V_UTIME
- 设置由用户指定的文件时间。
- V_STIME
- 设置系统所请求的文件时间。
- N
- 为所列示的每个操作指定以下值。
表 1. kv_setattr () 调出函数 :argn 参数值 操作 arg1 arg2 arg3 V_OWN 标志:
(有关文件所有权更改的信息,请参阅 chownx 子例程。)T_OWNER_AS_IS T_GROUP_AS_ISuid_t newuidgid_t newgid方式 (_MODE) mode_t newmode未使用 未使用 V_UTIME 标志:
忽略参数并将时间设置为当前时间。V_SETTIME
设置访问时间。timestruct_t *atime
设置修改时间。timestruct_t *mtimeV_STIME NULL或
设置访问时间。timestruct_t *atimeNULL或
设置修改时间。timestruct_t *mtimeNULL或
设置更改时间。timestruct_t *ctime - 恩里普
- 指示名称解析信息。 如果调用了
xfidToName内核服务,那么必须将此参数传递给它。 此参数是一个指向临时信息的指针,该信息在从验证例程返回后无效。 - 克克斯普
- 指向调用进程的凭证的指针。
返回值
- 零
- 指示验证已成功完成。
- 非零
- 指示验证已失败。