RtlpGenerateInheritAcl

NTSTATUS __stdcall RtlpGenerateInheritAcl(
        _ACL *Acl,
        UINT8 IsDirectoryObject,
        UINT8 AutoInherit,
        VOID *ClientOwnerSid,
        VOID *ClientGroupSid,
        VOID *ServerOwnerSid,
        VOID *ServerGroupSid,
        _GENERIC_MAPPING *GenericMapping,
        _GUID **pNewObjectType,
        UINT64 GuidCount,
        _SEP_ACL_TYPE AclType,
        UINT8 PreviousAclOverflowed,
        UINT64 *NewAclSizeParam,
        _ACL *NewAcl,
        UINT8 *ObjectAceInherited){
  int v15; 
  _ACL *v16; 
  unsigned int v17; 
  unsigned int v19; 
  _ACL *v20; 
  int v21; 
  _GUID **v22; 
  NTSTATUS result; 
  UINT64 v24; 
  char v25; 
  UINT64 NewAceLength[10]; 
  UINT8 v27; 
  UINT8 v28; 
  UINT8 v29; 
  VOID *ClientOwnerSida; 

  ClientOwnerSida = ClientOwnerSid;
  v29 = AutoInherit;
  v28 = IsDirectoryObject;
  v15 = 0;
  v16 = Acl + 1;
  v17 = 0;
  NewAceLength[0] = 0i64;
  v19 = 0;
  v27 = 0;
  v25 = 0;
  *ObjectAceInherited = 0;
  if( Acl->AceCount )
  {
    v20 = NewAcl;
    v21 = GuidCount;
    v22 = pNewObjectType;
    while( 1 )
    {
      if( v16->AclRevision == 17 )
      {
        if( AclType == SepAclTypeMacl )
        {
          if( RtlFindAceByType(v20, 0x11ui64, 0i64) )
          {
LABEL_13:
            if( !v25 )
              break;
LABEL_21:
            result = -1073741789;
            *(_DWORD *)NewAclSizeParam = v17 + v15;
            return result;
          }
LABEL_5:
          LODWORD(v24) = v21;
          result = RtlpGenerateInheritedAce(
                     v16,
                     v28,
                     v29,
                     ClientOwnerSida,
                     ClientGroupSid,
                     ServerOwnerSid,
                     ServerGroupSid,
                     GenericMapping,
                     v22,
                     v24,
                     NewAceLength,
                     v20,
                     (UINT64 *)((char *)NewAceLength + 4),
                     &v27);
          if( result == -1073741789 )
          {
            v25 = 1;
          }
          else if( result < 0 )
          {
            return result;
          }
          if( v27 )
            *ObjectAceInherited = 1;
          v15 += LODWORD(NewAceLength[0]);
          if( LODWORD(NewAceLength[0]) > v17 || (v17 -= LODWORD(NewAceLength[0]), v17 <= HIDWORD(NewAceLength[0])) )
            v17 = HIDWORD(NewAceLength[0]);
        }
      }
      else if( AclType != SepAclTypeMacl )
      {
        goto LABEL_5;
      }
      ++v19;
      v16 = (_ACL *)((char *)v16 + v16->AclSize);
      if( v19 >= Acl->AceCount )
        goto LABEL_13;
    }
  }
  if( PreviousAclOverflowed )
    goto LABEL_21;
  *(_DWORD *)NewAclSizeParam = v15;
  return 0;
}

Referenced by:

RtlpInheritAcl2