绝对和Self-Relative安全描述符

安全描述符可以采用绝对格式或自相对格式。 在绝对格式中,安全描述符包含指向其信息的指针,而不是信息本身。 在自相对格式中,安全描述符将 SECURITY_DESCRIPTOR 结构和关联的安全信息存储在连续的内存块中。 若要确定安全描述符是自相对的还是绝对的,请调用 GetSecurityDescriptorControl 函数并检查SECURITY_DESCRIPTOR_CONTROL参数的SE_SELF_RELATIVE标志。 可以使用 MakeSelfRelativeSDMakeAbsoluteSD 函数在这两种格式之间进行转换。

在生成安全描述符并具有指向所有组件的指针时,例如,当所有者、组和任意 ACL 的默认设置可用时,绝对格式非常有用。 在这种情况下,可以调用 InitializeSecurityDescriptor 函数来初始化 SECURITY_DESCRIPTOR 结构,然后调用 SetSecurityDescriptorDacl 等函数以将 ACL 和 SID 指针分配给安全描述符。

在自相对格式中,安全描述符始终以 SECURITY_DESCRIPTOR 结构开头,但安全描述符的其他组件可以按任意顺序跟随结构。 安全描述符的组件由描述符开头的偏移量标识,而不是使用内存地址。 当安全描述符必须存储在磁盘上、通过通信协议传输或复制到内存中时,此格式非常有用。

MakeAbsoluteSD 外,返回安全描述符的所有函数都使用自相对格式。 作为参数传递给函数的安全描述符可以是自相对形式,也可以是绝对形式。 有关详细信息,请参阅 函数的文档。