Fonction RtlNormalizeSecurityDescriptor (ntddk.h)

Cette routine examine un descripteur de sécurité pour trouver des moyens de modifier sa disposition, dans le but que deux descripteurs de sécurité équivalents puissent être instance unique dans $SDS aussi souvent que possible, et un objectif secondaire que le descripteur de sécurité stocké doit être aussi petit que possible.

Syntaxe

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

Paramètres

SecurityDescriptor

Pointeur vers un pointeur vers le SECURITY_DESCRIPTOR à normaliser. Le descripteur de sécurité doit être au format auto-relatif. Si NewSecurityDescriptor n’est pas fourni, cet emplacement peut être mis à jour avec un descripteur de sécurité nouvellement alloué à partir d’un pool paginé (libérant le descripteur de sécurité d’origine) si des modifications ont été apportées.

SecurityDescriptorLength

Longueur en octets du descripteur de sécurité à normaliser.

NewSecurityDescriptor

S’il est présent et pointe vers NULL, reçoit un pointeur vers un descripteur de sécurité nouvellement alloué à partir d’un pool paginé si des modifications ont été apportées, au lieu de mettre à jour SecurityDescriptor.

S’il est présent et pointe vers non NULL, un descripteur de sécurité modifié est construit directement dans la mémoire tampon (supposée être au moins de longueur SecurityDescriptorLength) fournie par l’appelant.

NewSecurityDescriptorLength

Reçoit éventuellement la longueur en octets du descripteur de sécurité modifié si cette routine apporte des modifications.

CheckOnly

Valeur BOOLEAN qui, si TRUE spécifie que la routine ne doit prendre aucune action lorsque des modifications seraient effectuées. Dans ce cas, aucun descripteur de sécurité modifié n’est créé.

Valeur retournée

Retourne TRUE si des modifications ont été apportées ou auraient été apportées et FALSE dans le cas contraire (y compris l’échec).

Remarques

Si cette routine apporte des modifications, elle retourne le descripteur de sécurité modifié, sauf si l’appelant spécifie CheckOnly indiquant qu’il souhaite uniquement savoir si des modifications sont apportées.

Les transformations actuellement prises en charge sont les suivantes :

  • Organisez les sections dans l’ordre Sacl => Dacl => Owner => Group.

  • Éliminez les remplissages inutiles (au-delà du simple alignement) entre les sections.

  • Zéro les octets d’alignement entre les sections.

  • Éliminez les sacl qui ne contiennent pas d’AE.

  • Éliminez les AIC ALLOW en double dans sacl et dacl.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 2004
En-tête ntddk.h (incluez Ntddk.h)
IRQL APC_LEVEL