private List <QueryableObject> QueryEventDispatcher(object[] parameters, QueryFilter filter)
        {
            List <QueryableObject> list            = new List <QueryableObject>(50);
            IList <OnlineDatabase> onlineDatabases = OnlineDiagnostics.Instance.databaseManager.GetOnlineDatabases((Guid?)parameters[0]);

            if (onlineDatabases == null || onlineDatabases.Count != 1)
            {
                throw new ArgumentException("Could not find the database specified by DatabaseGuid", "DatabaseGuid");
            }
            EventControllerPrivate    eventControllerPrivate = (EventControllerPrivate)onlineDatabases[0].EventController;
            IList <MailboxDispatcher> mailboxDispatcher      = eventControllerPrivate.GetMailboxDispatcher((Guid?)parameters[1]);

            if (mailboxDispatcher == null)
            {
                return(list);
            }
            MailboxDispatcher mailboxDispatcher2 = mailboxDispatcher[0];

            foreach (EventDispatcherPrivate eventDispatcherPrivate in mailboxDispatcher2.GetEventDispatcher((Guid?)parameters[2]))
            {
                QueryableEventDispatcher queryableEventDispatcher = new QueryableEventDispatcher();
                eventDispatcherPrivate.ExportToQueryableObject(queryableEventDispatcher);
                if (filter == null || OpathFilterEvaluator.FilterMatches(filter, queryableEventDispatcher))
                {
                    list.Add(queryableEventDispatcher);
                }
            }
            return(list);
        }
Exemple #2
0
        public override CapabilityEvaluationResult Evaluate(ADRawEntry adObject)
        {
            if (adObject == null)
            {
                throw new ArgumentNullException("adObject");
            }
            ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "Entering SimpleCapabilityIdentifierEvaluator.Evaluate('{0}') CapabilityToCheck '{1}'.", adObject.GetDistinguishedNameOrName(), base.Capability.ToString());
            if (!adObject.propertyBag.Contains(SharedPropertyDefinitions.RawCapabilities))
            {
                ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "SimpleCapabilityIdentifierEvaluator.Evaluate('{0}') return '{1}'. CapabilityToCheck '{2}' - object doesn't have the Capabilities property.", adObject.GetDistinguishedNameOrName(), CapabilityEvaluationResult.NotApplicable.ToString(), base.Capability.ToString());
                return(CapabilityEvaluationResult.NotApplicable);
            }
            CapabilityEvaluationResult capabilityEvaluationResult;

            if (OpathFilterEvaluator.FilterMatches(this.filter, adObject))
            {
                capabilityEvaluationResult = CapabilityEvaluationResult.Yes;
            }
            else
            {
                capabilityEvaluationResult = CapabilityEvaluationResult.No;
            }
            ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "SimpleCapabilityIdentifierEvaluator.Evaluate('{0}') return '{1}'. CapabilityToCheck '{2}'", adObject.GetDistinguishedNameOrName(), capabilityEvaluationResult.ToString(), base.Capability.ToString());
            return(capabilityEvaluationResult);
        }
Exemple #3
0
 // Token: 0x060004EB RID: 1259 RVA: 0x0001C344 File Offset: 0x0001A544
 public bool IsMatch(MailboxProvisioningAttributes attributes)
 {
     if (!string.IsNullOrEmpty(this.Value) && this.filter == null)
     {
         this.filter = this.ParseFilter();
     }
     return(string.IsNullOrEmpty(this.Value) || OpathFilterEvaluator.FilterMatches(this.filter, attributes.PropertyBag));
 }
        protected override bool InternalTryValidate(ADRawEntry adObject, out RuleValidationException validationException)
        {
            validationException = null;
            OrganizationValidationRuleDefinition organizationValidationRuleDefinition = base.RuleDefinition as OrganizationValidationRuleDefinition;

            if (!Datacenter.IsMultiTenancyEnabled())
            {
                ExTraceGlobals.AccessCheckTracer.TraceDebug <string, bool>((long)this.GetHashCode(), "OrganizationValidationRule.InternalTryValidate('{0}') return '{1}'. - not datacenter mode.", adObject.GetDistinguishedNameOrName(), true);
                return(true);
            }
            OrganizationId            organizationId            = (OrganizationId)adObject[ADObjectSchema.OrganizationId];
            ADSessionSettings         sessionSettings           = OrganizationId.ForestWideOrgId.Equals(organizationId) ? ADSessionSettings.FromRootOrgScopeSet() : ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId);
            IConfigurationSession     session                   = DirectorySessionFactory.Default.CreateTenantConfigurationSession(adObject.OriginatingServer, true, ConsistencyMode.IgnoreInvalid, sessionSettings, 377, "InternalTryValidate", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\ValidationRules\\ValidationRule.cs");
            ExchangeConfigurationUnit exchangeConfigurationUnit = ProvisioningCache.Instance.TryAddAndGetOrganizationData <ExchangeConfigurationUnit>(CannedProvisioningCacheKeys.OrganizationCUContainer, organizationId, () => session.Read <ExchangeConfigurationUnit>(organizationId.ConfigurationUnit));

            if (exchangeConfigurationUnit == null)
            {
                ExTraceGlobals.AccessCheckTracer.TraceDebug <string, bool>((long)this.GetHashCode(), "OrganizationValidationRule.InternalTryValidate('{0}') return '{1}'. - organization (ExchangeConfigurationUnit) object is not found.", adObject.GetDistinguishedNameOrName(), true);
                return(true);
            }
            foreach (ValidationRuleExpression validationRuleExpression in organizationValidationRuleDefinition.OverridingAllowExpressions)
            {
                bool flag = true;
                foreach (PropertyDefinition propertyDefinition in validationRuleExpression.QueryFilter.FilterProperties())
                {
                    if (!exchangeConfigurationUnit.propertyBag.Contains((ProviderPropertyDefinition)propertyDefinition))
                    {
                        ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "ExpressionFilterValidationRule.InternalTryValidate({0}). Missing Property {1}.", exchangeConfigurationUnit.GetDistinguishedNameOrName(), propertyDefinition.Name);
                        flag = false;
                        break;
                    }
                }
                if (flag && OpathFilterEvaluator.FilterMatches(validationRuleExpression.QueryFilter, exchangeConfigurationUnit))
                {
                    ExTraceGlobals.AccessCheckTracer.TraceDebug <string, bool, string>((long)this.GetHashCode(), "OrganizationValidationRule.InternalTryValidate('{0}') return '{1}'. - matched filter: {2}.", adObject.GetDistinguishedNameOrName(), true, validationRuleExpression.QueryString);
                    return(true);
                }
            }
            foreach (ValidationRuleExpression validationRuleExpression2 in organizationValidationRuleDefinition.RestrictionExpressions)
            {
                bool flag2 = true;
                foreach (PropertyDefinition propertyDefinition2 in validationRuleExpression2.QueryFilter.FilterProperties())
                {
                    if (!exchangeConfigurationUnit.propertyBag.Contains((ProviderPropertyDefinition)propertyDefinition2))
                    {
                        ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "ExpressionFilterValidationRule.InternalTryValidate({0}). Missing Property {1}.", exchangeConfigurationUnit.GetDistinguishedNameOrName(), propertyDefinition2.Name);
                        flag2 = false;
                        break;
                    }
                }
                if (flag2 && OpathFilterEvaluator.FilterMatches(validationRuleExpression2.QueryFilter, exchangeConfigurationUnit))
                {
                    validationException = new RuleValidationException(base.GetValidationRuleErrorMessage(adObject, validationRuleExpression2.QueryString));
                    return(false);
                }
            }
            return(true);
        }
Exemple #5
0
        // Token: 0x060071EF RID: 29167 RVA: 0x00179AD0 File Offset: 0x00177CD0
        internal BudgetCacheHandlerMetadata GetMetadata(string filter)
        {
            QueryFilter queryFilter = null;

            if (!string.IsNullOrEmpty(filter))
            {
                queryFilter = BudgetCache <T> .ParseWhereClause(filter);
            }
            List <T> values = base.Values;
            BudgetCacheHandlerMetadata budgetCacheHandlerMetadata = new BudgetCacheHandlerMetadata();

            budgetCacheHandlerMetadata.TotalCount = base.Count;
            budgetCacheHandlerMetadata.Efficiency = this.CacheEfficiency;
            budgetCacheHandlerMetadata.Budgets    = new List <BudgetHandlerMetadata>();
            foreach (T t in values)
            {
                Budget budget = t;
                if (queryFilter != null)
                {
                    IReadOnlyPropertyBag readOnlyPropertyBag = budget;
                    if (readOnlyPropertyBag != null && !OpathFilterEvaluator.FilterMatches(queryFilter, readOnlyPropertyBag))
                    {
                        continue;
                    }
                }
                if (budget.Owner.IsServiceAccountBudget)
                {
                    budgetCacheHandlerMetadata.ServiceAccountBudgets++;
                }
                BudgetHandlerMetadata budgetHandlerMetadata = new BudgetHandlerMetadata();
                budgetHandlerMetadata.Locked      = false;
                budgetHandlerMetadata.LockedAt    = null;
                budgetHandlerMetadata.LockedUntil = null;
                float balance = budget.CasTokenBucket.GetBalance();
                if (balance >= 0f)
                {
                    budgetCacheHandlerMetadata.NotThrottled++;
                }
                else if (budget.CasTokenBucket.Locked)
                {
                    budgetHandlerMetadata.Locked      = true;
                    budgetHandlerMetadata.LockedAt    = budget.CasTokenBucket.LockedAt.ToString();
                    budgetHandlerMetadata.LockedUntil = budget.CasTokenBucket.LockedUntilUtc.ToString();
                    budgetCacheHandlerMetadata.InCutoff++;
                }
                else
                {
                    budgetCacheHandlerMetadata.InMicroDelay++;
                }
                budgetHandlerMetadata.Key = budget.Owner.ToString();
                budgetHandlerMetadata.OutstandingActions = budget.OutstandingActionsCount;
                budgetHandlerMetadata.Snapshot           = budget.ToString();
                budgetCacheHandlerMetadata.Budgets.Add(budgetHandlerMetadata);
            }
            budgetCacheHandlerMetadata.MatchingCount = budgetCacheHandlerMetadata.Budgets.Count;
            return(budgetCacheHandlerMetadata);
        }
Exemple #6
0
 // Token: 0x060008DD RID: 2269 RVA: 0x00022FB4 File Offset: 0x000211B4
 public ConditionalResults Evaluate(IReadOnlyPropertyBag propertyBag)
 {
     if (this.ShouldEvaluate && OpathFilterEvaluator.FilterMatches(this.QueryFilter, propertyBag))
     {
         Interlocked.Increment(ref this.hits);
         this.LastHitUtc = TimeProvider.UtcNow;
         return(this.FetchData(propertyBag));
     }
     return(null);
 }
Exemple #7
0
        internal bool Matches(IConfigSchema schema, ISettingsContext context)
        {
            if (!this.Enabled || (this.ExpirationDate != DateTime.MinValue && DateTime.UtcNow > this.ExpirationDate))
            {
                return(false);
            }
            Exception   ex;
            QueryFilter filter = this.TryParseFilter(schema, null, out ex);

            return(OpathFilterEvaluator.FilterMatches(filter, null, (PropertyDefinition pdef) => ((SettingsScopeFilterSchema.ScopeFilterPropertyDefinition)pdef).RetrieveValue(context)));
        }
        private List <QueryableObject> QueryDatabaseManager(object[] parameters, QueryFilter filter)
        {
            QueryableDatabaseManager queryableDatabaseManager = new QueryableDatabaseManager();

            OnlineDiagnostics.Instance.databaseManager.ExportToQueryableObject(queryableDatabaseManager);
            List <QueryableObject> list = new List <QueryableObject>(1);

            if (filter == null || OpathFilterEvaluator.FilterMatches(filter, queryableDatabaseManager))
            {
                list.Add(queryableDatabaseManager);
            }
            return(list);
        }
        private List <QueryableObject> QueryAssistantType(object[] parameters, QueryFilter filter)
        {
            List <QueryableObject> list = new List <QueryableObject>(OnlineDiagnostics.Instance.databaseManager.AssistantTypes.Length);

            foreach (AssistantType assistantType in OnlineDiagnostics.Instance.databaseManager.AssistantTypes)
            {
                QueryableEventBasedAssistantType queryableEventBasedAssistantType = new QueryableEventBasedAssistantType();
                assistantType.ExportToQueryableObject(queryableEventBasedAssistantType);
                if (filter == null || OpathFilterEvaluator.FilterMatches(filter, queryableEventBasedAssistantType))
                {
                    list.Add(queryableEventBasedAssistantType);
                }
            }
            return(list);
        }
        private List <QueryableObject> QueryOnlineDatabase(object[] parameters, QueryFilter filter)
        {
            IList <OnlineDatabase> onlineDatabases = OnlineDiagnostics.Instance.databaseManager.GetOnlineDatabases((Guid?)parameters[0]);
            List <QueryableObject> list            = new List <QueryableObject>(onlineDatabases.Count);

            foreach (OnlineDatabase onlineDatabase in onlineDatabases)
            {
                QueryableOnlineDatabase queryableOnlineDatabase = new QueryableOnlineDatabase();
                onlineDatabase.ExportToQueryableObject(queryableOnlineDatabase);
                if (filter == null || OpathFilterEvaluator.FilterMatches(filter, queryableOnlineDatabase))
                {
                    list.Add(queryableOnlineDatabase);
                }
            }
            return(list);
        }
Exemple #11
0
        protected override void WriteResult(IConfigurable dataObject)
        {
            MailboxResourceMonitor mailboxResourceMonitor = (MailboxResourceMonitor)dataObject;

            if (this.inputFilter != null)
            {
                if (OpathFilterEvaluator.FilterMatches(this.inputFilter, mailboxResourceMonitor))
                {
                    base.WriteResult(dataObject);
                    return;
                }
            }
            else
            {
                base.WriteResult(mailboxResourceMonitor);
            }
        }
 public override CapabilityEvaluationResult Evaluate(ADRawEntry adObject)
 {
     if (adObject == null)
     {
         throw new ArgumentNullException("adObject");
     }
     ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "Entering RichCoexistenceCapabilityIdentifierEvaluator.Evaluate('{0}') CapabilityToCheck '{1}'.", adObject.GetDistinguishedNameOrName(), base.Capability.ToString());
     if (!adObject.propertyBag.Contains(IADMailStorageSchema.RemoteRecipientType))
     {
         ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "RichCoexistenceCapabilityIdentifierEvaluator.Evaluate('{0}') return '{1}'. CapabilityToCheck '{2}'. Object doesnt have 'RemoteRecipientType' property", adObject.GetDistinguishedNameOrName(), CapabilityEvaluationResult.NotApplicable.ToString(), base.Capability.ToString());
         return(CapabilityEvaluationResult.NotApplicable);
     }
     if (OpathFilterEvaluator.FilterMatches(RichCoexistenceCapabilityIdentifierEvaluator.filter, adObject))
     {
         ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "RichCoexistenceCapabilityIdentifierEvaluator.Evaluate('{0}') adObject has RemoteRecipientType set. CapabilityToCheck '{1}'. ", adObject.GetDistinguishedNameOrName(), base.Capability.ToString());
         return(base.Evaluate(adObject));
     }
     ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "RichCoexistenceCapabilityIdentifierEvaluator.Evaluate('{0}') return '{1}'. CapabilityToCheck '{2}'", adObject.GetDistinguishedNameOrName(), CapabilityEvaluationResult.No.ToString(), base.Capability.ToString());
     return(CapabilityEvaluationResult.No);
 }
Exemple #13
0
 private bool IsInFilter(MobileDevice device)
 {
     if (this.inputFilter == null)
     {
         throw new InvalidOperationException("The inputFilter should not be null in this case");
     }
     if (device != null)
     {
         try
         {
             return(OpathFilterEvaluator.FilterMatches(this.inputFilter, device));
         }
         catch (FilterOnlyAttributesException)
         {
             return(true);
         }
         return(false);
     }
     return(false);
 }
        protected override bool InternalTryValidate(ADRawEntry adObject, out RuleValidationException validationException)
        {
            validationException = null;
            CapabilityIdentifierEvaluator capabilityIdentifierEvaluator = base.RestrictedCapabilityEvaluators.FirstOrDefault((CapabilityIdentifierEvaluator x) => CapabilityEvaluationResult.Yes == x.Evaluate(adObject));

            ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "ExpressionFilterValidationRule.InternalTryValidate({0}). CurlpritCapability {1}.", adObject.GetDistinguishedNameOrName(), (capabilityIdentifierEvaluator != null) ? capabilityIdentifierEvaluator.Capability.ToString() : "<NULL>");
            if (capabilityIdentifierEvaluator == null)
            {
                return(true);
            }
            foreach (ValidationRuleExpression validationRuleExpression in base.RuleDefinition.Expressions)
            {
                if (validationRuleExpression.ApplicableObjects != null && validationRuleExpression.ApplicableObjects.Count > 0)
                {
                    Type right = validationRuleExpression.ApplicableObjects.FirstOrDefault((Type x) => x.IsAssignableFrom(adObject.GetType()));
                    if (null == right)
                    {
                        ExTraceGlobals.AccessCheckTracer.TraceDebug <string, Type, string>((long)this.GetHashCode(), "ExpressionFilterValidationRule.InternalTryValidate({0}). Object type '{1}' is not on the list of applicable types for expression {2}.", adObject.GetDistinguishedNameOrName(), adObject.GetType(), validationRuleExpression.QueryString);
                        continue;
                    }
                }
                bool flag = true;
                foreach (PropertyDefinition propertyDefinition in validationRuleExpression.QueryFilter.FilterProperties())
                {
                    if (!adObject.propertyBag.Contains((ProviderPropertyDefinition)propertyDefinition))
                    {
                        ExTraceGlobals.AccessCheckTracer.TraceDebug <string, string>((long)this.GetHashCode(), "ExpressionFilterValidationRule.InternalTryValidate({0}). Missing Property {1}.", adObject.GetDistinguishedNameOrName(), propertyDefinition.Name);
                        flag = false;
                        break;
                    }
                }
                if (flag && !OpathFilterEvaluator.FilterMatches(validationRuleExpression.QueryFilter, adObject) && !base.IsOverridingAllowCapabilityFound(adObject))
                {
                    validationException = new RuleValidationException(base.GetValidationRuleErrorMessage(adObject, capabilityIdentifierEvaluator.Capability));
                    return(false);
                }
            }
            return(true);
        }
        public override bool Evaluate(RulesEvaluationContext baseContext)
        {
            ClientAccessRulesEvaluationContext clientAccessRulesEvaluationContext = (ClientAccessRulesEvaluationContext)baseContext;

            if (clientAccessRulesEvaluationContext.UserSchema != null && clientAccessRulesEvaluationContext.User != null)
            {
                try
                {
                    QueryParser queryParser = new QueryParser(this.UserRecipientFilter, clientAccessRulesEvaluationContext.UserSchema, QueryParser.Capabilities.All, null, new QueryParser.ConvertValueFromStringDelegate(QueryParserUtils.ConvertValueFromString));
                    return(OpathFilterEvaluator.FilterMatches(queryParser.ParseTree, clientAccessRulesEvaluationContext.User));
                }
                catch (ParsingException ex)
                {
                    ExTraceGlobals.ClientAccessRulesTracer.TraceDebug(0L, string.Format("Unexpected exception: {0}", ex.ToString()));
                }
                catch (DataSourceOperationException ex2)
                {
                    ExTraceGlobals.ClientAccessRulesTracer.TraceDebug(0L, string.Format("Missing information in property bag to process Monad Filter rule", ex2.ToString()));
                }
                return(false);
            }
            return(false);
        }
 protected override bool MeetsAdditionalCriteria(ADRawEntry entry)
 {
     return(OpathFilterEvaluator.FilterMatches(this.scopeFilter, entry));
 }
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter();
     foreach (Database database in this.databases)
     {
         try
         {
             Guid mailboxGuid = Guid.Empty;
             MailboxTableFlags mailboxTableFlags = MailboxTableFlags.MailboxTableFlagsNone;
             if (null != this.identity)
             {
                 mailboxGuid = this.identity.MailboxGuid;
             }
             if (this.isRunningMailboxStatisticsTask)
             {
                 mailboxTableFlags |= MailboxTableFlags.IncludeSoftDeletedMailbox;
             }
             QueryFilter filter = new MailboxContextFilter(mailboxGuid, (ulong)((long)mailboxTableFlags), this.NoADLookupForMailboxStatistics);
             IEnumerable <TPresentationObject> enumerable = this.mapiSession.FindPaged <TDataObject, TPresentationObject>(filter, MapiTaskHelper.ConvertDatabaseADObjectToDatabaseId(database), QueryScope.SubTree, null, 0, 0);
             foreach (TPresentationObject tpresentationObject in enumerable)
             {
                 try
                 {
                     MailboxId mailboxId = tpresentationObject.Identity as MailboxId;
                     if (this.Identity == null || (null != mailboxId && ((Guid.Empty != this.identity.MailboxGuid && this.identity.MailboxGuid == mailboxId.MailboxGuid) || (!string.IsNullOrEmpty(this.identity.MailboxExchangeLegacyDn) && string.Equals(this.identity.MailboxExchangeLegacyDn, mailboxId.MailboxExchangeLegacyDn, StringComparison.OrdinalIgnoreCase)))))
                     {
                         if (this.isRunningLogonStatisticsTask)
                         {
                             ((LogonStatistics)((object)tpresentationObject)).ServerName   = database.ServerName;
                             ((LogonStatistics)((object)tpresentationObject)).DatabaseName = database.Name;
                         }
                         else if (this.isRunningResourceMonitorDigestTask)
                         {
                             ((MailboxResourceMonitor)((object)tpresentationObject)).ServerName           = this.server.Name;
                             ((MailboxResourceMonitor)((object)tpresentationObject)).DatabaseName         = database.Name;
                             ((MailboxResourceMonitor)((object)tpresentationObject)).IsDatabaseCopyActive = (database.Server.ObjectGuid == this.server.Guid);
                         }
                         else if (this.isRunningMailboxStatisticsTask)
                         {
                             Microsoft.Exchange.Management.MapiTasks.Presentation.MailboxStatistics mailboxStatistics = (Microsoft.Exchange.Management.MapiTasks.Presentation.MailboxStatistics)((object)tpresentationObject);
                             mailboxStatistics.ServerName           = this.server.Name;
                             mailboxStatistics.DatabaseName         = database.Name;
                             mailboxStatistics.Database             = database.Identity;
                             mailboxStatistics.IsDatabaseCopyActive = (database.Server.ObjectGuid == this.server.Guid);
                             MailboxDatabase mailboxDatabase = database as MailboxDatabase;
                             if (mailboxDatabase != null)
                             {
                                 mailboxStatistics.DatabaseIssueWarningQuota        = mailboxDatabase.IssueWarningQuota;
                                 mailboxStatistics.DatabaseProhibitSendQuota        = mailboxDatabase.ProhibitSendQuota;
                                 mailboxStatistics.DatabaseProhibitSendReceiveQuota = mailboxDatabase.ProhibitSendReceiveQuota;
                             }
                             if (mailboxId != null && this.GetMoveHistoryOption() != MoveHistoryOption.None)
                             {
                                 UserMailboxFlags userMailboxFlags = UserMailboxFlags.None;
                                 if (database.Recovery)
                                 {
                                     userMailboxFlags |= UserMailboxFlags.RecoveryMDB;
                                 }
                                 if (mailboxStatistics.IsMoveDestination ?? false)
                                 {
                                     userMailboxFlags |= UserMailboxFlags.MoveDestination;
                                 }
                                 else if (mailboxStatistics.DisconnectReason != null)
                                 {
                                     if (mailboxStatistics.DisconnectReason.Value == MailboxState.SoftDeleted)
                                     {
                                         userMailboxFlags |= UserMailboxFlags.SoftDeleted;
                                     }
                                     else
                                     {
                                         userMailboxFlags |= UserMailboxFlags.Disconnected;
                                     }
                                 }
                                 try
                                 {
                                     mailboxStatistics.MoveHistory = MoveHistoryEntry.LoadMoveHistory(mailboxId.MailboxGuid, database.Id.ObjectGuid, this.GetMoveHistoryOption() == MoveHistoryOption.IncludeMoveHistoryAndReport, userMailboxFlags);
                                 }
                                 catch (LocalizedException exception)
                                 {
                                     base.WriteError(exception, ErrorCategory.ResourceUnavailable, mailboxId);
                                 }
                             }
                         }
                         bool flag = true;
                         if (this.isRunningMailboxStatisticsTask)
                         {
                             Exception ex = null;
                             try
                             {
                                 QueryFilter internalFilter = this.InternalFilter;
                                 if (internalFilter != null && !OpathFilterEvaluator.FilterMatches(internalFilter, (Microsoft.Exchange.Data.Mapi.MailboxStatistics)((object)tpresentationObject)))
                                 {
                                     flag = false;
                                 }
                             }
                             catch (InvalidCastException ex2)
                             {
                                 ex = ex2;
                             }
                             catch (ParsingException ex3)
                             {
                                 ex = ex3;
                             }
                             catch (ArgumentOutOfRangeException ex4)
                             {
                                 ex = ex4;
                             }
                             if (ex != null)
                             {
                                 base.WriteError(new MdbAdminTaskException(Strings.ErrorInvalidMailboxStatisticsFilter(this.InternalFilter.ToString())), ErrorCategory.InvalidArgument, this.InternalFilter);
                             }
                         }
                         if (flag)
                         {
                             this.WriteResult(tpresentationObject);
                         }
                         if (this.Identity != null && this.isRunningMailboxStatisticsTask)
                         {
                             TaskLogger.LogExit();
                             return;
                         }
                     }
                 }
                 finally
                 {
                     if (tpresentationObject != null)
                     {
                         tpresentationObject.Dispose();
                     }
                 }
             }
         }
         catch (DatabaseUnavailableException ex5)
         {
             if (this.Identity == null && this.Database == null)
             {
                 base.WriteWarning(ex5.Message);
             }
             else
             {
                 base.WriteError(ex5, ErrorCategory.ResourceUnavailable, database);
             }
         }
         catch (MapiObjectNotFoundException exception2)
         {
             if (this.Identity == null || !this.isRunningMailboxStatisticsTask)
             {
                 base.WriteError(exception2, ErrorCategory.ObjectNotFound, this.Identity);
             }
         }
     }
     if (this.Identity != null && this.isRunningMailboxStatisticsTask)
     {
         TIdentity tidentity = this.Identity;
         this.WriteWarning(Strings.WarningMailboxNeverBeenLoggedOn(tidentity.ToString(), this.identity.ToString()));
     }
     TaskLogger.LogExit();
 }