1、Windows提供了一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么。
2、可以把作业对象想像成一个进程容器,创建只包含一个进程的作业同样有用,因为这样可以对进程施加平时不能施加的限制。
3、IsProcessInJob(HANDLE hProcess,HANDLE hJob, PBOOL pbInJob);判断是否与一个作业相关联,在msdn上找不到太多资料,估计只是在windows vista中有吧。
4、HANDLE CreateJobObject(PSECURITY_ATTRIBYTES psa,PCTSTR pszName);创建一个新的作业内核对象。
5、OpenJobObject(DWORD dwDesiredAccess,BOOL bInheritHandle,PCTSTR pszName);用来访问一个作业内核对象。
6、关闭作业的句柄会导致所有进程都不可以访问此作业,即使这个作业仍然存在。
7、对作业中的进程施加限制-----几种类型的限制:
1)、基本限制和扩展基本限制,用于防止作业中的进程独占系统资源。
2)、基本的UI限制,用于防止作业内的进程更改用户界面。
3)、安全限额,用于防止作业内的进程访问安全资源(文件、注册表子项等)。
8、BOOL SetInformationJobObject(HANDLE hJob,JOBOBJECTINFOCLASS JobObjectInformationClass,PVOID pJobObjectInformation,DWORD cbJobObjectInformationSize);
通过调用该函数向作业施加限制。第一个参数是指定要限制的作业。第二个参数是一个枚举类型,指定了要施加的限制类型。
第三个参数是一个数据结构地址,包含具体的限制设置,第四个数据结构大小。
9、限制类型与对应的数据结构:
JobObjectBasicLimitInformation-------------JOBOBJECT_BASIC_LIMIT_INFORMATION(基本限额)
JobObjectExtendedLimitInformation----------JOBOBJECT_EXTENDED_LIMIT_INFORMATION(扩展后的基本限额)
JobObjectBasicUIRestrictions---------------JOBOBJECT_BASIC_UI_RESTRICTIONS(基本的UI限制)
JobObjectSecurityLimitInformation----------JOBOBJECT_SECURITY_LIMIT_INFORMATION(安全限制)
10、可以通过下面的函数查询限制
BOOL QueryInformationJobObject(HANDLE hJob,JOBOBJECTINFOCLASS JobObjectInformationClass,PVOID pvJobObjectInformation,DWORD cbJobObjectInformationSize,PDWORD pdwReturnSize);
2、可以把作业对象想像成一个进程容器,创建只包含一个进程的作业同样有用,因为这样可以对进程施加平时不能施加的限制。
3、IsProcessInJob(HANDLE hProcess,HANDLE hJob, PBOOL pbInJob);判断是否与一个作业相关联,在msdn上找不到太多资料,估计只是在windows vista中有吧。
4、HANDLE CreateJobObject(PSECURITY_ATTRIBYTES psa,PCTSTR pszName);创建一个新的作业内核对象。
5、OpenJobObject(DWORD dwDesiredAccess,BOOL bInheritHandle,PCTSTR pszName);用来访问一个作业内核对象。
6、关闭作业的句柄会导致所有进程都不可以访问此作业,即使这个作业仍然存在。
7、对作业中的进程施加限制-----几种类型的限制:
1)、基本限制和扩展基本限制,用于防止作业中的进程独占系统资源。
2)、基本的UI限制,用于防止作业内的进程更改用户界面。
3)、安全限额,用于防止作业内的进程访问安全资源(文件、注册表子项等)。
8、BOOL SetInformationJobObject(HANDLE hJob,JOBOBJECTINFOCLASS JobObjectInformationClass,PVOID pJobObjectInformation,DWORD cbJobObjectInformationSize);
通过调用该函数向作业施加限制。第一个参数是指定要限制的作业。第二个参数是一个枚举类型,指定了要施加的限制类型。
第三个参数是一个数据结构地址,包含具体的限制设置,第四个数据结构大小。
9、限制类型与对应的数据结构:
JobObjectBasicLimitInformation-------------JOBOBJECT_BASIC_LIMIT_INFORMATION(基本限额)
JobObjectExtendedLimitInformation----------JOBOBJECT_EXTENDED_LIMIT_INFORMATION(扩展后的基本限额)
JobObjectBasicUIRestrictions---------------JOBOBJECT_BASIC_UI_RESTRICTIONS(基本的UI限制)
JobObjectSecurityLimitInformation----------JOBOBJECT_SECURITY_LIMIT_INFORMATION(安全限制)
10、可以通过下面的函数查询限制
BOOL QueryInformationJobObject(HANDLE hJob,JOBOBJECTINFOCLASS JobObjectInformationClass,PVOID pvJobObjectInformation,DWORD cbJobObjectInformationSize,PDWORD pdwReturnSize);
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;//指定能够运行进程的CPU子集
DWORD PriorityClass;//指定关联的所有进程的优先集
DWORD SchedulingClass;//为作业中的线程指定一个相对时间量差
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;
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;
typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
DWORD UIRestrictionsClass;//标志位
} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;
typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
DWORD SecurityLimitFlags;//是否不允许程序员访问
HANDLE JobToken;//由作业中所有进程使用的访问令牌
PTOKEN_GROUPS SidsToDisable;//指定要禁止对哪些SID进行访问检查
PTOKEN_PRIVILEGES PrivilegesToDelete;//指定从访问令牌中删除哪些特权
PTOKEN_GROUPS RestrictedSids;//指定将一组只能拒绝的SID
} JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION;