Windows作业内核事件

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

 

你可能感兴趣的:(windows)