作业对象安全和访问权限

Microsoft Windows 安全模型使你能够控制对作业对象的访问。 有关安全性的详细信息,请参阅 Access-Control 模型

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

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

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

价值 意义
DELETE (0x00010000L) 需要删除对象。
READ_CONTROL (0x00020000L) 在对象的安全描述符中读取信息(不包括 SACL 中的信息)所必需的。 若要读取或写入 SACL,必须请求 ACCESS_SYSTEM_SECURITY 访问权限。 有关详细信息,请参阅 SACL 访问权限
SYNCHRONIZE (0x001000000L) 使用对象进行同步的权限。 这使线程可以等待对象处于信号状态。
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 访问权限。 有关详细信息,请参阅 Access-Control 列表(ACL)SACL 访问权限

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

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