第5章-作业--对作业中的进程施加限制

对作业中的进程施加限制


代码示例

    // 设置作业的一些基本限制
    JOBOBJECT_BASIC_LIMIT_INFORMATION jobli = { 0 };
    jobli.PriorityClass = IDLE_PRIORITY_CLASS;      // 作业的优先级数
    jobli.PerJobUserTimeLimit.QuadPart = 10000;     // 作业的用户态执行时间
    // 这里的Flags将决定了结构体中的哪些成员生效
    jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS
        | JOB_OBJECT_LIMIT_JOB_TIME;    

    // 真正的将限制实施在作业内核对象上
    SetInformationJobObject(hjob, JobObjectBasicLimitInformation, &jobli,
        sizeof(jobli));

JOBOBJECT_BASIC_LIMIT_INFORMATION

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
  LARGE_INTEGER PerProcessUserTimeLimit;
  LARGE_INTEGER PerJobUserTimeLimit;
  DWORD         LimitFlags;
  SIZE_T        MinimumWorkingSetSize;
  SIZE_T        MaximumWorkingSetSize;
  DWORD         ActiveProcessLimit;
  ULONG_PTR     Affinity;
  DWORD         PriorityClass;
  DWORD         SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;
  • PerProcessUserTimeLimit

    • 作业内核对象每个进程用户态的执行时间限制
  • PerJobUserTimeLimit

    • 作业内核对象用户态的执行时间限制(作业内核对象中所有进程总共的时间)
  • LimitFlags

    • 标记结构体JOBOBJECT_BASIC_LIMIT_INFORMATION中哪些成员生效
  • MinimumWorkingSetSize

    • 作业内核对象中进程的工作集最小限制
    • 如果MaximumWorkingSetSize非0,则MinimumWorkingSetSize也必须非0
  • MaximumWorkingSetSize

    • 作业内核对象中进程的工作集最大限制
    • 如果进程的工作集超过了这个限制,则会发生页面转换
    • 如果MinimumWorkingSetSize非0,则MaximumWorkingSetSize也必须非0
  • PriorityClass

    • 作业内核对象中进程的优先级数
    • 进程和线程不允许改变他们的优先级数,所以调用进程必须拥SE_INC_BASE_PRIORITY_NAME的权限

代码示例

    // 设置作业的UI限制
    JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
    jobuir.UIRestrictionsClass = JOB_OBJECT_UILIMIT_NONE;
    // 作业中的进程不能注销系统(比如使用ExitWindows或ExitWindowsEx)
    jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_EXITWINDOWS; 
    // 作业中的进程不能访问被其它作业中进程使用的句柄
    jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_HANDLES;     

    // 真正的将限制实施在作业内核对象上
    SetInformationJobObject(hjob, JobObjectBasicUIRestrictions, &jobuir,
        sizeof(jobuir));

JOBOBJECT_BASIC_UI_RESTRICTIONS

typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
  DWORD UIRestrictionsClass;
} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;
  • UIRestrictionsClass

    • 作业内核对象基本用户界面的限制
    • 值得注意的是该参数的类型为DWORD,通过位运算来设置限制。
  • 标志参数与作用如下

标志 描述
JOB_OBJECT_UILIMIT_NONE 什么也没用,只是大多数情况用于初始化的时候
JOB_OBJECT_UILIMIT_EXITWINDOWS 阻止作业中的进程通过ExitWindowsEx注销,关机,重启,断开系统电源
JOB_OBJECT_UILIMIT_HANDLES 阻止作业中的进程使用其它作业中的进程所拥有的用户对象句柄

猜你喜欢

转载自blog.csdn.net/Pig_Pig_Bang/article/details/80571240
今日推荐