RtlNormalizeSecurityDescriptor 函数 (ntddk.h)

此例程检查安全描述符以修改其布局的方法,目标是任何两个等效的安全描述符应能够尽可能频繁地在$SDS中单独实例,以及存储的安全描述符应尽可能小的辅助目标。

语法

NTSYSAPI BOOLEAN RtlNormalizeSecurityDescriptor(
  PSECURITY_DESCRIPTOR *SecurityDescriptor,
  ULONG                SecurityDescriptorLength,
  PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
  PULONG               NewSecurityDescriptorLength,
  BOOLEAN              CheckOnly
);

参数

SecurityDescriptor

指向要规范化的SECURITY_DESCRIPTOR的指针的指针。 安全描述符必须采用相对格式。 如果未提供 NewSecurityDescriptor,则如果进行了修改,则可能会使用新分配的安全描述符从分页池更新此位置(释放原始安全描述符)。

SecurityDescriptorLength

要规范化的安全描述符的长度(以字节为单位)。

NewSecurityDescriptor

如果存在并指向 NULL,则从分页池接收指向新分配的安全描述符的指针(如果进行了修改)而不是更新 SecurityDescriptor

如果存在并指向非 NULL,则直接在缓冲区中构造经过修改的安全描述符(假定其长度至少为调用方提供的长度 SecurityDescriptorLength)。

NewSecurityDescriptorLength

(可选)如果此例程进行了修改,则接收修改后的安全描述符的长度(以字节为单位)。

CheckOnly

一个 BOOLEAN 值,如果 TRUE 指定在进行修改时例程不应采取任何作。 在这种情况下,不会创建修改的安全描述符。

返回值

如果进行了修改或本来会进行修改,则返回 TRUE;否则返回 FALSE(包括失败)。

言论

如果此例程进行任何修改,它将返回修改后的安全描述符,除非调用方指定 CheckOnly,指示他们只想知道是否将进行修改。

当前支持的转换包括:

  • 按 Sacl => Dacl => Owner => Group 的顺序排列节。

  • 消除节之间的不必要的填充(超出简单对齐)。

  • 零节之间的任何对齐字节。

  • 消除不包含 ACE 的任何 Sacl。

  • 消除 Sacl 和 Dacl 中的重复 ALLOW ACE。

要求

要求 价值
最低支持的客户端 Windows 10 版本 2004
标头 ntddk.h (包括 Ntddk.h)
IRQL APC_LEVEL