Поделиться через


Функция 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 => Владелец => Группа.

  • Исключите ненужное заполнение (помимо простого выравнивания) между разделами.

  • Ноль любых байтов выравнивания между разделами.

  • Удалите все элементы Sacl, которые не содержат ACE.

  • Исключите повторяющиеся ACE ALLOW в Sacl и Dacl.

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 2004
Верхняя часть ntddk.h (включая Ntddk.h)
IRQL APC_LEVEL