//使用作业的目的就是为了限制和管理一组进程。在程序中可以使用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));