15,471
社区成员
发帖
与我相关
我的任务
分享
//创建一个作业内核对象
HANDLE hJob = CreateJobObject(NULL, NULL); //
//为作业添加一些基本限制
//基本限制结构体
JOBOBJECT_BASIC_LIMIT_INFORMATION jobli = { 0 };
//作业的优先级
jobli.PriorityClass = NORMAL_PRIORITY_CLASS; //
//作业的CPU时间限制
//jobli.PerJobUserTimeLimit.QuadPart = 10000000; //1秒,单位是100纳秒
//指明限制条件
jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME;
//设定作业限制
SetInformationJobObject(hJob, JobObjectBasicLimitInformation, &jobli, sizeof(jobli));
////////////////////////////////////////////////////////////
//为作业添加一些基本UI限制
//基本UI限制结构体
JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
//初始无限制
jobuir.UIRestrictionsClass = JOB_OBJECT_UILIMIT_NONE; //
//增加限制:作业(进程)不能注销操作系统
//jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_EXITWINDOWS;
//jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS;
//增加限制:作业(进程)不能访问 系统的用户对象(如其他窗口)
//jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_HANDLES;
//jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_READCLIPBOARD;//禁止进程读取剪切板内容
//设定作业限制
SetInformationJobObject(hJob, JobObjectBasicUIRestrictions, &jobuir, sizeof(jobuir));
////////////////////////////////////////////////////////////
//创建进程,并添加到作业中。进程初始化时必须是挂起状态,保证在添加到作业前不会执行任何代码
//创建进程
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
TCHAR sz[] = TEXT("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
CreateProcess(NULL, sz, NULL, NULL,
FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
//唤醒进程(的主线程)
ResumeThread(pi.hThread);
//关闭句柄
CloseHandle(pi.hThread);