//使用作业的目的就是为了限制和管理一组进程。在程序中可以使用CreateJobObject函数来创建作业对象,函数语法如下:
HANDLE CreateJobObject(
LPSECURITY_ATTRIBUTES lpJobAttributes, // 表示作业对象的安全属性,可以为NULL
LPCTSTR lpName // 作业对象的名称,其他进程可以通过该名称访问作业对象
);
//在有些操作系统中并不能直接使用CreateJobObject函数,需要用户从“Kernel32.dll”中导入。创建作业对象的代码如下:
typedef HANDLE (__stdcall* funCreateJobObject)(LPSECURITY_ATTRIBUTES lpJobAttributes, LPCTSTR lpName);
HINSTANCE hInstance = LoadLibrary(“Kernel32.dll”);
funCreateJobObject CreateJobObject = (funCreateJobObject)GetProcAddress(hInstance, “CreateJobObjectA”);
m_hJob = CreateJobObject(NULL, “ProcessGroup”);
FreeLibrary(hInstance);
//为了将进程放入作业对象中,需要在程序中调用AssignProcessToJobObject函数,该函数语法如下:
BOOL AssignProcessToJobObject(
HANDLE hJob, // 表示作业对象句柄
HANDLE hProcess // 表示向作业中添加的进程句柄
);
//示例代码:
//(1)创建进程:
STARTUPINFO stInfo;
memset(&stInfo, 0, sizeof(STARTUPINFO));
PROCESS_INFORMATION procInfo;
memset(&procInfo, 0, sizeof(PROCESS_INFORMATION);
CreateProcess(NULL, “notepad.exe”, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &stInfo, &procInfo);
//(2)向作业添加进程:
BOOL ret = AssignProcessToJobObject(m_hJob, procInfo.hProcess);
if(ret)
MessageBox(“向作业添加进程成功!”);
//终止作业中的进程:
//作业能够管理一组进程,当然也可以终止作业中的进程。在程序中可以使用TerminateJobObject函数终止作业中的所有进程,该函数语法如下:
BOOL TerminateJobObject(
HANDLE hJob, // 表示作业对象句柄
UINT uExitCode // 表示进程退出代码
);
//下面的代码将终止作业中的所有进程:
TermianteJobObject(m_hJob, 0);
//限制作业中的进程:
//在程序中可以调用SetInfomationJobObject函数可以为作业添加各种限制,该函数语法如下:
BOOL SetInfomationJobObject(
HANDLE hJob, // 作业句柄
JOBOBJECTINFOCLASS jobObjectInformationClass, // 一个枚举值,表示限制的类型
LPVOID lpJobObjectInformation, // 为作业对象设置的限制
DWORD cbJobObjectInformationLength // lpJobObjectInfomation占用的字节大小
);
//向作业中添加限制读取剪贴板的信息:
JOBOBJECT_BASIC_UI_RESTRICTIONS limitInfo;
limitInfo.UIRestrictionsClass = JOB_OBJECT_UILIMIT_READCLIPBOARD;
SetInformationJobObject(m_hJob, JobObjectBasicUIRestrictions,&limitInfo, sizeof(JOBOBJECT_BASIC_UI_RESTRICTIONS));
转载于:https://www.cnblogs.com/login007/archive/2011/08/13/2137049.html