作业中进程

来源:互联网 发布:十三届复杂网络大会 编辑:程序博客网 时间:2024/06/05 23:56
1、进程在创建时,使用的是CREATE_SUSPENDED标志,这样会创建进程,但是不执行任何代码。
      由于要创建进程的进程不是作业的一部分,所以新创建的进程也不是作业的一部分,如果立即开始执行代码,
      它会“逃离”沙箱,成功做一些我想禁止的事。
2、在创建子进程后且在运行之前,必须调用函数BOOL AssignProcessToJobObject(HANDLE hJob,HANDLE hProcess);
       将进程显示地放入我新建的作业中。
3、可以使用IsProcessInJob函数进行检查。一旦进程已属于作业的一部分,它就不能再移动到另一个作业中。
4、当一个进程生成了另一个进程的时候,新进程将自动成为父进程作业的一部分。
5、打开“沙箱”的JOBOBJECT_BASIC_LIMIT_INFORMATION的LimitFlags成员的JOB_OBJECT_LIMIT_BREAKAWAY_OK标志,
       告诉新生成的进程可以在作业外部执行,如果希望新生成的进程来控制作业,可以调用CreateProcess函数时,
       指定CREATE_BREAKAWAY_FROM_JOB标志。
6、终止作业中的所有线程:BOOL TerminateJobObject(HANDLE hJob,UINT uExitCode);
7、查询作业统计信息QuaryInformationJobObject
8、获得作业中进程的创建与终止信息:创建一个I/O完成端口内核对象,并将作业与端口关联。然后,必须有一个
        或者多个线程等待作业通知到达完成端口。
        SetInformationJobObject----将端口与作业关联起来
        GetQueuedCompletionStatus--监视完成端口

原创粉丝点击