作业对象安全性和访问权限

使用 Microsoft Windows 安全模型可以控制对作业对象的访问。 有关安全性的详细信息,请参阅 访问控制模型

调用 CreateJobObject 函数时,可以为作业对象指定安全描述符。 如果指定 NULL,作业对象将获取默认的安全描述符。 作业对象的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

若要获取或设置作业对象的安全描述符,请调用 GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfoSetSecurityInfo 函数。

作业对象的有效访问权限包括 标准访问权限 和某些特定于作业的访问权限。 下表列出了所有对象使用的标准访问权限。

含义
DELETE (0x00010000L) 删除对象所必需的。
READ_CONTROL (0x00020000L) 需要读取对象的安全描述符中的信息,不包括 SACL 中的信息。 若要读取或写入 SACL,必须请求 ACCESS_SYSTEM_SECURITY 访问权限。 有关详细信息,请参阅 SACL 访问权限
同步 (0x00100000L) 将对象用于同步的权限。 这使线程能够等待对象处于信号状态。
WRITE_DAC (0x00040000L) 需要修改对象的安全描述符中的 DACL。
WRITE_OWNER (0x00080000L) 需要更改对象的安全描述符中的所有者。

 

下表列出了特定于作业的访问权限。

含义
JOB_OBJECT_ALL_ACCESS (0x1F001F) 合并所有有效的作业对象访问权限。
JOB_OBJECT_ASSIGN_PROCESS (0x0001) 需要调用 AssignProcessToJobObject 函数才能将进程分配给作业对象。
JOB_OBJECT_QUERY (0x0004) 需要检索有关作业对象的某些信息,例如属性和记帐信息, (请参阅 QueryInformationJobObjectIsProcessInJob) 。
JOB_OBJECT_SET_ATTRIBUTES (0x0002) 需要调用 SetInformationJobObject 函数来设置作业对象的属性。
JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010) 不支持此标志。 必须为与作业对象关联的每个进程单独设置安全限制。Windows Server 2003 和 Windows XP: 需要使用 JobObjectSecurityLimitInformation 信息类调用 SetInformationJobObject 函数,以便为与作业对象关联的进程设置安全限制。 Windows Vista 和 Windows Server 2008 中删除了对此标志的支持。
JOB_OBJECT_TERMINATE (0x0008) 需要调用 TerminateJobObject 函数来终止作业对象中的所有进程。

 

CreateJobObject 返回的句柄具有对作业对象的JOB_OBJECT_ALL_ACCESS访问权限。 调用 OpenJobObject 函数时,系统会根据对象的安全描述符检查请求的访问权限。 如果作业对象位于 嵌套作业的层次结构中,则有权访问该作业对象的调用方隐式有权访问该层次结构中的所有子作业。

如果要读取或写入对象的 SACL,可以请求对作业对象的 ACCESS_SYSTEM_SECURITY 访问权限。 有关详细信息,请参阅 访问控制列表 (ACL) SACL 访问权限

必须单独为与作业对象关联的每个进程设置安全限制,而不是为作业对象本身设置安全限制。 有关信息,请参阅 处理安全性和访问权限

Windows Server 2003 和 Windows XP: 可以使用 SetInformationJobObject 函数为作业对象设置安全限制。 此功能在 Windows Vista 和 Windows Server 2008 中已删除。