playerken

博客园 首页 新随笔 联系 订阅 管理

将进程组合在一起,并且创建一个“沙框”,以便限制进程能够进行的操作。最好将作业对象视为一个进程的容器。

CreateJobObject可以创建一个作业内核对象。OpenJobObject可以根据名字访问一个已经创建好的作业内核对象。CloseHandle可以关闭作业内核对象。关闭作业对象并不会迫使作业中的所有进程终止运行。该作业对象实际上做上了删除标记,只有当作业中的所有进程全部终止运行之后,该作业对象才被自动撤消。关闭作业的句柄后,尽管该作业仍然存在,但是该作业将无法被所有进程访问。

 

对作业进程的限制

SetInformationJobObject可以给一个作业加上若干不同类型的限制:

  • 基本限制和扩展基本限制,用于防止作业中的进程垄断系统的资源。
  • 基本的UI限制,用于防止作业中的进程改变用户界面。
  • 安全性限制,用于防止作业中的进程访问保密资源(文件、注册表子关键字等)。

 

将进程放入作业

如果子进程不属于作业,并且创建子进程的时候允许它立刻执行的话,那么它将无法用作业限制该子进程。所以必须:

  1. 在CreateProcess的时候使用CREATE_SUSPENDED标志。
  2. 使用AssignProcessToJobObject将进程赋给作业。
  3. 使用ResumeThread恢复子进程的主线程。

一旦进程成为一个作业的组成部分,它就不能转到另一个作业。另外,当作为作业的一部分的进程生成另一个进程的时候,新进程将自动成为父作业的组成部分(可以通过某些标志位改变这个行为)。

TerminateJobObject可以终止作业中所有进程的运行。

posted on 2011-08-28 16:33  playerken  阅读(185)  评论(0编辑  收藏  举报