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

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

[in, out] AbsoluteSecurityDescriptorSize

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

[out] Dacl

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

[in, out] DaclSize

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

[out] Sacl

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

[in, out] SaclSize

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

[out] Owner

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

[in, out] OwnerSize

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

[out] PrimaryGroup

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

[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 参数仅接收绝对安全描述符的主体。 整个绝对安全描述符由此主体以及 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