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 所有進程的結束代碼