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