您的位置:首页 > 其它

作业(Job)内核对象

2017-06-21 15:21 197 查看
Windows提供了一个作业(job)内核对象,它允许你将进程组合在一起并创建一个"沙箱"来限制进程能够做什么.最好将作业对象想象成一个进程容器.但是,即使作业中只包含一个进程,也是非常有用的,因为这样可以对进程施加平时不能施加的限制.

1、CreateJobObject

功能:创建一个新的作业内核对象(若该作业已经存在,则返回一个指向该作业的句柄)

函数定义:

HANDLE WINAPI CreateJobObject(

__in  LPSECURITY_ATTRIBUTES lpJobAttributes,

__in  LPCTSTR lpName

);

__in LPSECURITY_ATTRIBUTES lpJobAttributes       改作业的安全描述符

__in  LPCTSTR lpName      作业名字


2、OpenJobObject


功能:打开一个作业内核对象

函数定义:

HANDLE WINAPI OpenJobObject(

__in          DWORD dwDesiredAccess,

__in          BOOL bInheritHandles,

__in          LPCTSTR lpName

);

__in          DWORD dwDesiredAccess           对该作业的访问权限 

__in          BOOL bInheritHandles                  指示该作业是否可被子进程继承       

__in          LPCTSTR lpName                         作业对象名


3、IsProcessInJob 


功能:验证某一个进程是否存在于作业中

函数定义:

BOOL WINAPI IsProcessInJob(

__in          HANDLE ProcessHandle,

__in          HANDLE JobHandle,

__out         PBOOL Result

);

__in          HANDLE ProcessHandle        被测试进程的句柄

__in          HANDLE JobHandle               作业的句柄,若为空,则测试进程是否存在于任一作业中

__out         PBOOL Result                      存储测试结果的指针


4、SetInformationJobObject


功能:给作业加上各种限制

函数定义:

BOOL WINAPI SetInformationJobObject(

__in          HANDLE hJob,

__in          JOBOBJECTINFOCLASS JobObjectInfoClass,

__in          LPVOID lpJobObjectInfo,

__in          DWORD cbJobObjectInfoLength

);

__in          HANDLE hJob       标识要限制的作业    

__in          JOBOBJECTINFOCLASS JobObjectInfoClass   枚举类型,用于指明要使用的限制类型

__in          LPVOID lpJobObjectInfo     包含限制设置值的数据结构的地址

__in          DWORD cbJobObjectInfoLength        指明第三个参数的大小
限制类型
第二个参数的值
第三个参数的结构
基本限制
JobObjectBasicLimitInformation
JOBOBJECT_BASIC_LIMIT_INFORMATION
扩展基本限制
JobObjectExtendedLimitInformation
JOBOBJECT_EXTENDED_LIMIT_INFORMATION
基本UI限制
JobObjectBasicUIRestrictions
JOBOBJECT_BASIC_UI_RESTRICTIONS
安全性限制
JobObjectSecurityLimitInformation
JOBOBJECT_SECURITY_LIMIT_INFORMATION
关联完成端口限制
JobObjectAssociateCompletionPortInformation
JOBOBJECT_ASSOCIATE_COMPLETION_PORT
5、QueryInformationJobObject 

功能:查询作业对象的信息

函数定义:

BOOL WINAPI QueryInformationJobObject(

__in          HANDLE hJob,

__in          JOBOBJECTINFOCLASS JobObjectInfoClass,

__out         LPVOID lpJobObjectInfo,

__in          DWORD cbJobObjectInfoLength,

__out         LPDWORD lpReturnLength

);

__in          HANDLE hJob        标识要查询的作业   

__in          JOBOBJECTINFOCLASS JobObjectInfoClass     枚举类型,用于指明要使用的限制类型

__out         LPVOID lpJobObjectInfo                                     包含限制设置值的数据结构的地址   

__in          DWORD cbJobObjectInfoLength                         指明第三个参数的大小

__out         LPDWORD lpReturnLength   指明多少字节放入了缓存,如果你愿意的话,可以(并且通常)为该参数传递N U L L

其中,第三个和第四个参数也有和 SetInformationJobObject中同样的关系。


6、AssignProcessToJobObject

功能:将进程放入作业

函数定义:

BOOL WINAPI AssignProcessToJobObject(

__in          HANDLE hJob,

__in          HANDLE hProcess

);

__in          HANDLE hJob           存放进程的作业

__in          HANDLE hProcess    将放作业的进程


7、TerminateJobObject
功能:杀死作业内的所有进程

函数定义:

BOOL WINAPI TerminateJobObject(

__in          HANDLE hJob,

__in          UINT uExitCode

);

__in          HANDLE hJob     将要执行该操作的作业

__in          UINT uExitCode   所有进程的退出代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  作业内核对象