代码改变世界

第五章 作业

2018-01-29 20:50  szn好色仙人  阅读(174)  评论(0)    收藏  举报
https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms684161(v=vs.85).aspx
http://blog.csdn.net/ddupd/article/details/26962039

//1.
(A):windows 提供了一个作业内核对象,允许我们将进程组合在一起来限制进程能够做什么
(B):如果一个进程已与一个作业关联,就无法将此进程或其子进程从作业中除去,一旦进程已属于作业的一部分,就不能在移动到另一个作业中,
	当作业中的进程生成了子进程,这个子进程也会自动属于这个作业(可以通过设置一系列操作来避免子进程的这个行为)

//2.
IsProcessInJob 验证进程是否在一个现有作业中
CreateJobObject 创建一个作业内核对象
OpenJobObject 打开一个作业内核对象

//3.
创建好一个作业之后,可以为其中的进程添加如下限制:	SetInformationJobObject	第二个参数							第三个参数
(A):基本限额,用于防止作业中的进程独占系统资源								JobObjectBasicLimitInformation		JOBOBJECT_BASIC_LIMIT_INFORMATION
(B):扩张限额,用于防止作业中的进程独占系统资源								JobObjectExtendedLimitInformation	JOBOBJECT_EXTENDED_LIMIT_INFORMATION
(C):基本UI限制,用于防止作业内的进程更改用户界面							JobObjectBasicUIRestrictions		JOBOBJECT_BASIC_UI_RESTRICTIONS
(D):安全限额,用于防止作业内的进程访问安全资源(文件、注册表子项等)			JobObjectSecurityLimitInformation	JOBOBJECT_SECURITY_LIMIT_INFORMATION
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx

SetInformationJobObject 向作业施加限制
BOOL
WINAPI
SetInformationJobObject(
__in HANDLE hJob,
__in JOBOBJECTINFOCLASS JobObjectInformationClass,
__in_bcount(cbJobObjectInformationLength) LPVOID lpJobObjectInformation,
__in DWORD cbJobObjectInformationLength
);

//4.
AssignProcessToJobObject 将进程放入作业
TerminateJobObject 杀死作业中所有进程
QueryInformationJobObject 查询作业中的限制,还可以获取作业的统计信息

//5.
//(与作业不相关)
GetProcessIoCounters 可以用于获取进程I/O使用信息
GetProcessTimes 可以用于获取进程CUP占用信息