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 值,例如以下值之一:
返回代码 | 说明 |
---|---|
|
AbsoluteSecurityDescriptor 参数指向的缓冲区不包含绝对格式的SECURITY_DESCRIPTOR结构。 STATUS_BAD_DESCRIPTOR_FORMAT是错误代码。 |
|
AbsoluteSecurityDescriptor 、Dacl、Sacl、Owner 或 PrimaryGroup 参数指向的缓冲区太小。 STATUS_BUFFER_TOO_SMALL是错误代码。 |
注解
绝对格式的安全描述符包含指向信息的指针,而不是包含信息本身。 采用自我相对格式的安全描述符包含连续内存块中的信息。 在自相对安全描述符中,SECURITY_DESCRIPTOR结构始终启动信息,但安全描述符的其他组件可以按任何顺序遵循SECURITY_DESCRIPTOR结构。 安全描述符的组成部分不使用内存地址,而是由安全描述符开头的偏移来标识。 当安全描述符必须存储在软盘上或通过通信协议传输时,此格式非常有用。
请注意,AbsoluteSecurityDescriptor 参数仅接收绝对安全描述符的main正文。 整个绝对安全描述符由此main正文以及 Dacl、Sacl、Owner 和 PrimaryGroup 缓冲区中返回的所有安全描述符组件组成。 因此,调用方在调用 RtlSelfRelativeToAbsoluteSD 后无法释放这些缓冲区,因为这样做会使绝对安全描述符失效。
若要通过使用绝对格式的安全描述符作为模板,以自相对格式创建新的安全描述符,请使用 RtlAbsoluteToSelfRelativeSD。
有关安全性和访问控制的详细信息,请参阅Microsoft Windows SDK文档。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Server 2003 SP1 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |