RtlSelfRelativeToAbsoluteSD 函数 (ntifs.h)

RtlSelfRelativeToAbsoluteSD 例程使用自相对格式的安全描述符作为模板,以绝对格式创建新的安全描述符。

语法

NTSYSAPI NTSTATUS RtlSelfRelativeToAbsoluteSD(
  [in]      PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
  [out]     PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
  [in, out] PULONG               AbsoluteSecurityDescriptorSize,
  [out]     PACL                 Dacl,
  [in, out] PULONG               DaclSize,
  [out]     PACL                 Sacl,
  [in, out] PULONG               SaclSize,
  [out]     PSID                 Owner,
  [in, out] PULONG               OwnerSize,
  [out]     PSID                 PrimaryGroup,
  [in, out] PULONG               PrimaryGroupSize
);

参数

[in] SelfRelativeSecurityDescriptor

指向调用方分配的缓冲区的指针,该缓冲区包含自相对格式的SECURITY_DESCRIPTOR结构。 RtlSelfRelativeToAbsoluteSD 以绝对格式创建此安全描述符的版本,而无需修改原始版本。

[out] AbsoluteSecurityDescriptor

指向调用方分配的缓冲区的指针,该缓冲区接收绝对格式安全描述符的main正文。 此信息的格式设置为SECURITY_DESCRIPTOR结构。

[in, out] AbsoluteSecurityDescriptorSize

指向调用方分配的变量的指针,该变量指定 AbsoluteSecurityDescriptor 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小不足以容纳安全描述符, RtlSelfRelativeToAbsoluteSD 将返回STATUS_BUFFER_TOO_SMALL并将此变量设置为所需的最小大小。

[out] Dacl

指向调用方分配的缓冲区的指针,该缓冲区接收绝对格式安全描述符的 DACL。 绝对格式安全描述符的main正文引用此指针。

[in, out] DaclSize

指向调用方分配的变量的指针,该变量指定 Dacl 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小不足以容纳 DACL,RtlSelfRelativeToAbsoluteSD 将返回STATUS_BUFFER_TOO_SMALL并将此变量设置为所需的最小大小。

[out] Sacl

指向调用方分配的缓冲区的指针,该缓冲区接收绝对格式安全描述符的 SACL。 绝对格式安全描述符的main正文引用此指针。

[in, out] SaclSize

指向调用方分配的变量的指针,该变量指定 Sacl 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小不足以保存 SACL,RtlSelfRelativeToAbsoluteSD 将返回STATUS_BUFFER_TOO_SMALL并将此变量设置为所需的最小大小。

[out] Owner

指向调用方分配的缓冲区的指针,该缓冲区接收绝对格式安全描述符所有者的 SID。 绝对格式安全描述符的main正文引用此指针。

[in, out] OwnerSize

指向调用方分配的变量的指针,该变量指定 Owner 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小不足以容纳 SID,RtlSelfRelativeToAbsoluteSD 将返回STATUS_BUFFER_TOO_SMALL并将此变量设置为所需的最小大小。

[out] PrimaryGroup

指向调用方分配的缓冲区的指针,该缓冲区接收绝对格式安全描述符的主组的 SID。 绝对格式安全描述符的main正文引用此指针。

[in, out] PrimaryGroupSize

指向调用方分配的变量的指针,该变量指定 PrimaryGroup 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小不足以容纳 SID,RtlSelfRelativeToAbsoluteSD 将返回STATUS_BUFFER_TOO_SMALL并将此变量设置为所需的最小大小。

返回值

RtlSelfRelativeToAbsoluteSD 返回STATUS_SUCCESS或适当的 NTSTATUS 值,例如以下值之一:

返回代码 说明
STATUS_BAD_DESCRIPTOR_FORMAT
AbsoluteSecurityDescriptor 参数指向的缓冲区不包含绝对格式的SECURITY_DESCRIPTOR结构。 STATUS_BAD_DESCRIPTOR_FORMAT是错误代码。
STATUS_BUFFER_TOO_SMALL
AbsoluteSecurityDescriptorDaclSaclOwnerPrimaryGroup 参数指向的缓冲区太小。 STATUS_BUFFER_TOO_SMALL是错误代码。

注解

绝对格式的安全描述符包含指向信息的指针,而不是包含信息本身。 采用自我相对格式的安全描述符包含连续内存块中的信息。 在自相对安全描述符中,SECURITY_DESCRIPTOR结构始终启动信息,但安全描述符的其他组件可以按任何顺序遵循SECURITY_DESCRIPTOR结构。 安全描述符的组成部分不使用内存地址,而是由安全描述符开头的偏移来标识。 当安全描述符必须存储在软盘上或通过通信协议传输时,此格式非常有用。

请注意,AbsoluteSecurityDescriptor 参数仅接收绝对安全描述符的main正文。 整个绝对安全描述符由此main正文以及 DaclSaclOwnerPrimaryGroup 缓冲区中返回的所有安全描述符组件组成。 因此,调用方在调用 RtlSelfRelativeToAbsoluteSD 后无法释放这些缓冲区,因为这样做会使绝对安全描述符失效。

若要通过使用绝对格式的安全描述符作为模板,以自相对格式创建新的安全描述符,请使用 RtlAbsoluteToSelfRelativeSD

有关安全性和访问控制的详细信息,请参阅Microsoft Windows SDK文档。

要求

要求
最低受支持的客户端 Windows Server 2003 SP1
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

ACL

RtlAbsoluteToSelfRelativeSD

RtlCreateSecurityDescriptor

RtlLengthSecurityDescriptor

RtlSetDaclSecurityDescriptor

RtlSetOwnerSecurityDescriptor

RtlValidSecurityDescriptor