绝对和Self-Relative安全描述符

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

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

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

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