SepHasCriticalAcesRemoved

NTSTATUS __stdcall SepHasCriticalAcesRemoved(VOID *SecurityDescriptor, VOID *a2, _BYTE *a3, _BYTE *a4){
  __int64 AclSize; 
  PACL v9; 
  PACL v10; 
  PACL v11; 
  unsigned int v12; 
  bool v13; 
  _ACL *v14; 
  unsigned int v15; 
  PACL v16; 
  unsigned int i; 
  unsigned __int16 Control[2]; 
  __int16 v20; 
  unsigned int v21; 
  unsigned int Revision; 
  PACL Dacl; 
  PACL v24; 
  unsigned __int8 DaclPresent; 
  __int16 DaclDefaulted; 

  Dacl = 0i64;
  v24 = 0i64;
  DaclPresent = 0;
  Control[0] = 0;
  *a3 = 0;
  if( a4 )
    *a4 = 0;
  LODWORD(AclSize) = RtlGetDaclSecurityDescriptor(SecurityDescriptor, &DaclPresent, &Dacl, (UINT8 *)&DaclDefaulted);
  if( (int)AclSize >= 0 )
  {
    if( DaclPresent )
    {
      v9 = Dacl;
      if( Dacl )
      {
        LODWORD(AclSize) = RtlGetControlSecurityDescriptor(SecurityDescriptor, Control, (UINT64 *)&Revision);
        if( (int)AclSize >= 0 )
        {
          DaclPresent = 0;
          v20 = Control[0] & 0x400;
          RtlGetDaclSecurityDescriptor(a2, &DaclPresent, &v24, (UINT8 *)&DaclDefaulted);
          RtlGetControlSecurityDescriptor(a2, Control, (UINT64 *)&Revision);
          v10 = v9 + 1;
          Revision = 0;
          LODWORD(AclSize) = v9->AceCount;
          DaclDefaulted = Control[0] & 0x400;
          Control[0] &= 0x1000u;
          v21 = AclSize;
          if( (_DWORD)AclSize )
          {
            v11 = v24;
            v12 = AclSize;
            while( 1 )
            {
              if( v10->AclRevision <= 3u )
              {
                v13 = (v10->Sbz1 & 0x20) == 0;
                v14 = v10 + 1;
                LODWORD(AclSize) = *(_DWORD *)&v10->AceCount;
                LODWORD(Dacl) = AclSize;
                if( !v13 )
                  break;
              }
LABEL_11:
              v10 = (PACL)((char *)v10 + v10->AclSize);
              LODWORD(AclSize) = Revision + 1;
              Revision = AclSize;
              if( (unsigned int)AclSize >= v12 )
                return AclSize;
            }
            if( DaclPresent )
            {
              if( v11 )
              {
                v15 = 0;
                v16 = v11 + 1;
                for( i = v11->AceCount; v15 < i; v16 = (PACL)((char *)v16 + AclSize) )
                {
                  if( v16->AclRevision <= 3u && (v16->Sbz1 & 0x20) != 0 )
                  {
                    if( RtlEqualSid(&v16[1], v14) && *(_DWORD *)&v16->AceCount == (_DWORD)Dacl )
                    {
                      v12 = v21;
                      goto LABEL_11;
                    }
                    v14 = v10 + 1;
                  }
                  AclSize = v16->AclSize;
                  ++v15;
                }
              }
            }
            *a3 = 1;
            if( a4 && v20 && Control[0] && DaclDefaulted )
              *a4 = 1;
          }
        }
      }
    }
  }
  return AclSize;
}

Referenced by:

SepCheckForCriticalAceRemoval