向高手请教一个内核编程的实例
注:该问题是《LINUX操作系统实验教程》实验十----进程隐藏
实验目的:
实现一个系统调用hide来隐藏进程,使得用户无法使用ps或top命令观察到进程的状态。要求实现以下几个基本功能:
(1)实现用户可以使用以下方式调用该系统调用:int hide(pid_t pid,int on),并且在进程pid有效地前提下,如果on置1,进程被隐藏,这时用户无法通过proc文件系统观察到进程状态;如果on置0且此前为隐藏状态,则恢复正常状态。系统调用的返回值请自行设计,但请注意其合理性。
(2)考虑权限问题,只有超级用户才可以使用该系统调用。
(3)在/proc 目录下创建一个文件/proc/hidden,该文件可读可写,它与一个全局量hidden_flag对应,当hidden_flag为0时,所有进程都无法隐藏,即便此前进程被hide系统调用要求隐藏。只有当hidden_flag为1时,此前通过hide调用要求隐藏的进程才可以隐藏起来。
我的想法:(1)修改进程描述符结构task_struct,在linux/sched.h为其添加一个成员cloak,用来记录进程隐藏与否。
(2)在进程创建时,把task_struck结构的成员cloak初始化为未隐藏。
(3)添加hide系统调用。
(4)修改proc_pid_readdir函数的代码,如果被读出的进程描述符的cloak成员值为1,则进程标识符不返回给用户缓冲区。
问题:(1)添加系统调用我会,但是hide函数具体怎么实现,请高手给予指导。
(2)在proc文件系统创建文件我也会,但是为什么它要与一个全局量hidden_flag对应?这个操作有什么意义?如何实现?
请高手们帮帮我这个菜鸟,讲讲大概的原理,步骤,和代码如何实现,十分感谢!