Windows 作业
作业 : 是进程的容器 。可以管理一组进程 。
CreateJobObject 函数 : 创建一个新的作业内核对象 。
HANDLE CreateJobObject( PSECURITY_ATTRIBUTES psa , PCTSTR pszName );
OpenJobObject 函数 : 访问一个作业 。
HANDLE OpenJobObject( DWORD dwDesiredAccess , BOOL bInheritHandle , PCTSTR pszName );
如果不在需要访问作业对象 , 那么就必须通过调用 CloseHandle 来关闭它的句柄 。 但是并不会迫使作业中的所有进程进制运行 。 该作业对象实际上做上了删除标记 , 只有当作业中的所有进程全部终止运行以后 , 该作业对象才会被自动撤销 。
对作业进程的限制 :
进程创建后 , 通常需要设置一个沙框(设置一些限制) , 以便限制作业中的进程能够进行的操作 。可以给一个作业加上若干不同类型的限制 :
1 基本限制 和 扩展基本限制 , 用于防止作业中的进程垄断系统的资源 。
2 基本的 UI 限制 , 用于防止作业中的进程改变用户界面 。
3 安全性限制 , 用于防止作业中的进程访问保密资源(文件 , 注册表关键字等)
SetInformationJobObject 函数 : 可以给作业加上各种限制 。
BOOL SetInformation( HANDLE hJob , JOBOBJECTINFOCLASS JobObjectInformationClass , PVOID pJobObjectInformation , DWORD cbJobObjectInformationLength );
第一个参数用于标识要限制的作业 , 第二个参数是个 枚举类型 , 用于指明要使用的限制类型 。 第三个参数是包含限制设置值的数据结构的地址 , 第四个参数用于指明该结构体的大小 。
设置条件 :
限制类型 第二个参数 第三个参数
--------------------------------------------------------------------------------------------------------------------
基本限制 JobObjectBasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
扩展基本限制 JobObjectExtendedLimitInformation JOBOBJECT_EXTENDED_LIMIT_INFORMATION
基本 UI 限制 JobObjectBasicUIRestrictions JOBOBJECT_BASIC_UI_RESTRICTIONS
安全性限制 JobObjectSecurityLimitInformation JOBOBJECT_SECURITY_LIMIT_INFORMATION
QueryInformationJobObject 函数 : 查看给作业设置了的限制条件 。
BOOL QueryInformationJobObject(
HANDLE hJob ,
JOBOBJECTINFOCLASS JobObjectInformationClass ,
PVOID pvJobObjectInformation ,
DWORD cbJobObjectInformationLength ,
PDWORD pdwReturnLength );
将进程放入作业 :
创建新的进程时 , 如果准备立即允许子进程开始执行代码 , 那么它将跑出沙框(加的限制) , 并且能够成功的执行想要限制的代码
因此 , 当创建子线程之后 , 在允许它开始执行之前 , 必须显示的将它放入作业 。
AssignProcessToJobObject 函数 : 将进程放入作业 。
BOOL AssignProcessToJobObject( HANDLE hJob , HANDLE hProcess ) ;
该函数告诉系统 , 将线程 hProcess 视为现有作业 hJob 的一部分 。 进程只能属于一个作业 , 不能转入其他作业
终止作业中所有进程的运行 :
TerminateJobObject 函数 : 撤销作业中的进程 。
BOOL TerminateJobObject( HANDLE hJob , UINT uExitCode );
作业通知信息 :
StartRestrictedProcess 函数 : 显示分配给作业的 CPU 时间何时到期 , 或者作业中的进程何时终止运行