Windows作业

来源:互联网 发布:js gzip 解压缩字符串 编辑:程序博客网 时间:2024/04/19 12:37
        Windows 2000提供了一个新的作业内核对象,使你能够将进程组合在一起,并且创建一个“沙框”,以便限制进程能够进行的操作。
        最好是将作业对象视为一个进程的容器。但是创建包含单个进程的作业是有用的,因为这样一来,就可以对该进程加上通常情况下不能加的限制。

创建一个新作业内核对象。
HANDLE CreateJobObject(
    PSECURITY_ATTRIBUTE  psa,//安全信息
    PCTSTR    pszName);  //给作业命名,使它可以供另一个进程通过OpenJobObject函数进程访问。

HANDLE OpenJobObject(
    DWORD dwDesiredAccess,
    BOOL   bInheritHandle,
    PSTSTR pszName);

    与其他的内核对象一样,如果进程不需要访问代码中的作业对象,那么需要调用CloseHandle来关闭句柄。
    关闭作业对象并不会迫使作业中的所有进程终止运行。改作业对象实际上做了删除标记,只有当作业中的所有进程全部终止运行后,该作业对象才会被自动撤销。
   注意: 关闭作业的句柄后,尽管作业任然存在,但是该作业将无法被所有进程访问。
    
    对作业进程的限制
    可以对作业加上若干不同类型的限制:
        1.基本限制和扩展基本限制,用于防止作业中的进程垄断系统的资源。
        2.基本的UI的限制,用于防止作业中的进程改变用户界面。
        3.安全性限制,用于防止作业中的进程访问保密资源(文件,注册表子关键字)
    为作业加上各种限制:
    SetInformationJobObject(
        HANDLE hJob,//标识要限制的作业
        JOBOBJECTINFOCLASS JobObjectInformationClass,//枚举类型,用于要指明的限制类型
        PVOID pJobObjectInformation,//包含限制设置值的数据结构地址
        DWORD cbJobObjectInformationLength);//用于指明该结构的大小(用于确定版本)
                                    第二个参数                                        第三个参数
    基本限制             JobObjectBasicLimitInformation        JOBOBJECT_BASIC_LIMIT_INFORMATION
    扩展基本限制      JobObjectExtentedLimitInformation   JOBOBJECT_EXTENTED_LIMIT_INFORMATION
    基本UI限制         JobObjectBasicUIRestrictions              JOBOBJECT_BASIC_UI_RESTRICTIONS
    安全性限制         JobObjectSecurityLimitInformation     JOBOBJECT_SECURITY_LIMIT_INFORMATION 
    JOBOBJECT_BASIC_UI_RESTRICTIONS job;
    例如:SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&job,sizeof(job));

    BOOL AssignProcessToJobObject(
        HANDLE hJob,//作业句柄
        HANDLE hProcess);//进程句柄
    此函数告诉系统,将该进程(由hProcess标识)视为现有作业(由hJob标识)的一部分。
    注意:此函数只允许将尚未被赋予任何作业的进程赋予一个作业。一旦进程成为一个作业的组成部分,它就不能转到另一个作业,并且不能是无作业的进程。另外,当作为作业的一部分的进程生成另一个进程的时候,新进程将自动成为父作业的一部分。

    撤销作业中的进程:
    BOOL TerminateJobObject(
        HANDLE hJob,
        UINT uExitCode);
    获取对作业的当前限制信息:
    BOOL WINAPI QueryInformationJobObject(
  __in          HANDLE hJob,  __in          JOBOBJECTINFOCLASS JobObjectInfoClass,//  __out         LPVOID lpJobObjectInfo,//获取作业的统计信息  __in          DWORD cbJobObjectInfoLength,  __out         LPDWORD lpReturnLength);











    


















    
    
0 0
原创粉丝点击