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--监视完成端口
由于要创建进程的进程不是作业的一部分,所以新创建的进程也不是作业的一部分,如果立即开始执行代码,
它会“逃离”沙箱,成功做一些我想禁止的事。
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--监视完成端口