RtlValidAcl

VOID __fastcall RtlValidAcl(_ACL *Acl, VOID *SystemArgument1, VOID *SystemArgument2){
  unsigned __int16 *p_AclSize; 
  unsigned int v5; 
  _ACE_HEADER *v6; 
  int v7; 
  _ACE_HEADER *v8; 
  USHORT *p_AceSize; 
  unsigned __int64 v10; 
  unsigned int AceType; 
  __int64 AceFlags; 

  if( (unsigned __int8)(Acl->AclRevision - 2) <= 2u )
  {
    p_AclSize = &Acl->AclSize;
    if( (unsigned __int16 *)(((unsigned __int64)&Acl->AclSize + 1) & 0xFFFFFFFFFFFFFFFEui64) == &Acl->AclSize
      && *p_AclSize >= 8u )
    {
      v5 = 0;
      v6 = (_ACE_HEADER *)&Acl[1];
      if( Acl->AceCount )
      {
        v7 = 1730063;
        do
        {
          v8 = (_ACE_HEADER *)((char *)Acl + *p_AclSize);
          if( &v6[1] >= v8 )
            break;
          p_AceSize = &v6->AceSize;
          if( (USHORT *)(((unsigned __int64)&v6->AceSize + 1) & 0xFFFFFFFFFFFFFFFEui64) != &v6->AceSize )
            break;
          v10 = *p_AceSize;
          if( (_ACE_HEADER *)((char *)v6 + v10) > v8 )
            break;
          AceType = v6->AceType;
          if( (unsigned __int8)AceType <= 0x14u && _bittest(&v7, AceType) )
          {
            if( ((v10 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v10 )
              return;
            if( (unsigned int)v10 < 0x10 )
              return;
            if( v6[2].AceType != 1 )
              return;
            AceFlags = v6[2].AceFlags;
            if( (unsigned __int8)AceFlags > 0xFu || v10 < 4 * AceFlags + 16 )
              return;
          }
          else if( (_BYTE)AceType == 4 )
          {
            if( Acl->AclRevision < 3u || !RtlpValidCompoundAce(v6) )
              return;
          }
          else if( (unsigned __int8)(AceType - 5) <= 3u
                 || (unsigned __int8)(AceType - 11) <= 1u
                 || (unsigned __int8)(AceType - 15) <= 1u )
          {
            if( Acl->AclRevision < 4u || !RtlpValidObjectAce(v6) )
              return;
          }
          else if( (_BYTE)AceType == 18 )
          {
            if( !RtlpValidAttributeAce(v6) )
              return;
          }
          else if( (_BYTE)AceType == 21 )
          {
            if( !RtlpValidAccessFilterAce((INT64)v6) )
              return;
          }
          else if( (unsigned int)v10 < 4 )
          {
            return;
          }
          ++v5;
          v6 = (_ACE_HEADER *)((char *)v6 + *p_AceSize);
        }
        while( v5 < Acl->AceCount );
      }
    }
  }
}

Referenced by:

CMFCreateSecurityDescriptor
RtlAddAccessFilterAce
RtlAddAce
RtlAddMandatoryAce
RtlAddProcessTrustLabelAce
RtlAddResourceAttributeAce
RtlDeleteAce
RtlValidRelativeSecurityDescriptor
RtlValidSecurityDescriptor
RtlpAddKnownAce
RtlpAddKnownObjectAce
SddlAddAccessFilterAce
SddlAddMandatoryAce
SddlAddProcessTrustLabelAce
SddlAddScopedPolicyIDAce
SeCaptureSecurityDescriptor
SeValidSecurityDescriptor
SepCheckAcl