Windows内核之作业
2020-12-13 02:00
标签:windows内核 作业 Windows内核之作业 1 定义: 作业是一种内核对象,它相当于一个容器,里面可以加入很多进程,通过配置作业,可以让作业内的进程具有相同的配置,例如进程的最大执行时间,cpu片占用时间等。 2 作业的创建相关函数 3 对作业中进程中的限制 BOOL SetInformationObject(HANDLEhJob,JOBOBJECTINFOCLASS JobObjectInfoClass LPVOID lpJobInfo DWORDcbJobObjectInfoLength ); 通过对作业设置限制条件,便可以做到对作业中进程的统一限制。作业中进程的限制有四种,如下所示: 3.1 JOBOBJECT_BASIC_LIMIT_INFORMATION 3.2 JOBOBJECT_EXTENDED_LIMIT_INFORMATIO
包含基本的限制信息
通过此函数来使作业中的所有进程停止运行。 Windows内核之作业,搜素材,soscw.com Windows内核之作业 标签:windows内核 作业 原文地址:http://blog.csdn.net/ddupd/article/details/26962039HANDLE CreateJobObject(LPSECURITY_ATTRIBUTESlpJobAttributes,LPCTSTR lpName);
HANDLE OpenJobObject(DWORD dwDesiredAccessBOOL bInheritHandles,LPCTSTR lpName);
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;
设置每个进程的用户模式的最大时间限制
设定作业中可以使用多少用户模式的时间
指定哪些限制标记是有效用的
设定作业中所有进程的最小工作集的大小
设定作业中所有进程的最大工作集的大小
设定作业中可以运行的最大进程的数量
设定能够运行进程的CPU子集
设定所有进程的优先级
设定分配给作业中的相对时间差,用来处理异常的进程情况。
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;
保留
设置每个内存的内存限制
设置每个工作的内存限制
指明所有进程中已经使用内存的最大的
指明所有进程已经是用的内存的最大值
3.3 JOBOBJECT_BASIC_UI_RESTRICTIONStypedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
DWORD UIRestrictionsClass;
} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;
这个结构体只有一个参数,目的就是制定UI的限制类别。主要是一写禁止复制黏贴,等的UI限制
3.4 JOBOBJECT_SECURITY_LIMIT_INFORMATIONtypedef 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 ;
指明是否不允许管理员访问、不允许无限制的标记访问、强制使用特定的访问标记,或者停用某些安全性标识符和优先权
指向代表用户的主标记的句柄
指明为访问检查停用哪些SID
指明要从访问标记中删除哪些优先权
指明应该添加给访问标记的一组仅为拒绝(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);