Windows内核之作业

Windows内核之作业

1 定义:

         作业是一种内核对象,它相当于一个容器,里面可以加入很多进程,通过配置作业,可以让作业内的进程具有相同的配置,例如进程的最大执行时间,cpu片占用时间等。

2 作业的创建相关函数

HANDLE CreateJobObject(LPSECURITY_ATTRIBUTESlpJobAttributes,LPCTSTR lpName);
HANDLE OpenJobObject(DWORD dwDesiredAccessBOOL bInheritHandles,LPCTSTR lpName);

3 对作业中进程中的限制

BOOL SetInformationObject(HANDLEhJob,JOBOBJECTINFOCLASS JobObjectInfoClass LPVOID lpJobInfo  DWORDcbJobObjectInfoLength  );

通过对作业设置限制条件,便可以做到对作业中进程的统一限制。作业中进程的限制有四种,如下所示:

Windows内核之作业

3.1 JOBOBJECT_BASIC_LIMIT_INFORMATION

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
   LARGE_INTEGER         PerProcessUserTimeLimit;
   LARGE_INTEGER         PerJobUserTimeLimit;
    DWORD                 LimitFlags;
    SIZE_T                MinimumWorkingSetSize;
    SIZE_T                MaximumWorkingSetSize;
    DWORD                 ActiveProcessLimit;
    ULONG_PTR             Affinity;
    DWORD                 PriorityClass;
    DWORD                 SchedulingClass;
}JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;

<1> 设置每个进程的用户模式的最大时间限制
<2>设定作业中可以使用多少用户模式的时间
<3>指定哪些限制标记是有效用的
<4>设定作业中所有进程的最小工作集的大小
<5>设定作业中所有进程的最大工作集的大小
<6>设定作业中可以运行的最大进程的数量
<7>设定能够运行进程的CPU子集
<8>设定所有进程的优先级
<9>设定分配给作业中的相对时间差,用来处理异常的进程情况。

3.2 JOBOBJECT_EXTENDED_LIMIT_INFORMATIO

typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
    JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
    IO_COUNTERS 			IoInfo;
    SIZE_T 			ProcessMemoryLimit;
    SIZE_T JobMemoryLimit;
    SIZE_T PeakProcessMemoryUsed;
    SIZE_T PeakJobMemoryUsed;
} JOBOBJECT_EXTENDED_LIMIT_INFORMATION, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;

<1> 包含基本的限制信息
<2> 保留
<3> 设置每个内存的内存限制
<4> 设置每个工作的内存限制
<5> 指明所有进程中已经使用内存的最大的
<6> 指明所有进程已经是用的内存的最大值
3.3 JOBOBJECT_BASIC_UI_RESTRICTIONS

typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
    DWORD UIRestrictionsClass;
} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;

这个结构体只有一个参数,目的就是制定UI的限制类别。主要是一写禁止复制黏贴,等的UI限制
3.4 JOBOBJECT_SECURITY_LIMIT_INFORMATION

typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
    DWORD 		SecurityLimitFlags ;
    HANDLE 		JobToken ;
    PTOKEN_GROUPS 	SidsToDisable ;
    PTOKEN_PRIVILEGES	PrivilegesToDelete ;
    PTOKEN_GROUPS 	RestrictedSids ;
} JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION ;
<1> 指明是否不允许管理员访问、不允许无限制的标记访问、强制使用特定的访问标记,或者停用某些安全性标识符和优先权
<2>指向代表用户的主标记的句柄
<3>指明为访问检查停用哪些SID
<4>指明要从访问标记中删除哪些优先权
<5>指明应该添加给访问标记的一组仅为拒绝(deny only)的SID


4 查询限制条件

BOOL QueryInformationJobObject(
  HANDLE hJob,        // handle to job
  JOBOBJECTINFOCLASS JobObjectInfoClass, // information class
  LPVOID lpJobObjectInfo,// limit information
  DWORD cbJobObjectInfoLength,// limit information size
  LPDWORD lpReturnLength   / /data written);

通过这个函数可以查询作业的限制条件。


5 将进程放入作业
BOOL AssignProcessToJobObject(  
	HANDLE hJob,     // handle to job
  	HANDLE hProcess  // handle to process);
当进程产生新的进程的时候,子进程会自动成为父进程作业的一部分
6 终止作业中所有进程的运行
BOOL TerminateJobObject(  
	HANDLE hJob,   	// handle to job
  	UINT uExitCode  	// exit code);

通过此函数来使作业中的所有进程停止运行。

Windows内核之作业,布布扣,bubuko.com

Windows内核之作业

上一篇:PS为帅哥打造出个性裂纹肌肤


下一篇:Windows8和MacOS10.9双系统安装及Mac常用软件安装--联想E49A