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
某个参数无效。

调出处理程序

可以为 openchmodchownutimes 系统调用指定调出。 chmodchownutimes 系统调用通过 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 函数由 chownchmodutimes 系统调用以及这些系统调用的变体 (例如, fchownfchmodfutimens 系统调用) 调用。

语法
#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 标志:
T_OWNER_AS_IS
T_GROUP_AS_IS
(有关文件所有权更改的信息,请参阅 chownx 子例程。)
uid_t newuid
gid_t newgid
方式 (_MODE)
mode_t newmode
未使用 未使用
V_UTIME 标志:
V_SETTIME
忽略参数并将时间设置为当前时间。
timestruct_t *atime
设置访问时间。
timestruct_t *mtime
设置修改时间。
V_STIME NULL
timestruct_t *atime
设置访问时间。
NULL
timestruct_t *mtime
设置修改时间。
NULL
timestruct_t *ctime
设置更改时间。
恩里普
指示名称解析信息。 如果调用了 xfidToName 内核服务,那么必须将此参数传递给它。 此参数是一个指向临时信息的指针,该信息在从验证例程返回后无效。
克克斯普
指向调用进程的凭证的指针。

返回值

指示验证已成功完成。
非零
指示验证已失败。