コード例 #1
0
        protected override void InternalProcessRecord()
        {
            bool flag;

            if ("Exchange Control Panel".Equals(base.Host.Name, StringComparison.OrdinalIgnoreCase))
            {
                flag = ServerCache.Instance.InitializeIfNeeded(HostId.ECPApplicationPool);
            }
            else
            {
                flag = ServerCache.Instance.InitializeIfNeeded(HostId.PowershellApplicationPool);
            }
            if (!flag)
            {
                Utils.HandleError(this, "Cannot initialize AD configuration", CoreStrings.TrackingErrorFailedToInitialize, this.BypassDelegateChecking, false, ErrorCategory.ObjectNotFound, null);
            }
            DirectoryContext directoryContext = null;
            int num = 0;
            TrackingEventBudget trackingEventBudget     = null;
            bool                  flag2                 = false;
            ClientContext         clientContext         = null;
            ClientSecurityContext clientSecurityContext = null;

            try
            {
                TrackingEventBudget.AcquireThread();
                if (this.TraceLevel == TraceLevel.High)
                {
                    CommonDiagnosticsLogTracer traceWriter = new CommonDiagnosticsLogTracer();
                    TraceWrapper.SearchLibraryTracer.Register(traceWriter);
                    BaseTrace.CurrentThreadSettings.EnableTracing();
                }
                if (base.ExchangeRunspaceConfig == null)
                {
                    ExTraceGlobals.TaskTracer.TraceError((long)this.GetHashCode(), "Search-MessageTrackingReport permissions cannot be retrieved because the ExchangeRunspaceConfiguration is null");
                    this.HandleError("Search-MessageTrackingReport permissions cannot be retrieved because the ExchangeRunspaceConfiguration is null", CoreStrings.TrackingSearchNotAuthorized);
                }
                MultiValuedProperty <CultureInfo> executingUserLanguages = base.ExchangeRunspaceConfig.ExecutingUserLanguages;
                CultureInfo clientCulture = (executingUserLanguages != null && executingUserLanguages.Count > 0) ? executingUserLanguages[0] : CultureInfo.InvariantCulture;
                try
                {
                    clientSecurityContext = Utils.GetSecurityContextForUser(base.ExchangeRunspaceConfig.SecurityAccessToken, base.ExchangeRunspaceConfig.DelegatedPrincipal, this.trackedMailbox.ADUser);
                    clientContext         = ClientContext.Create(clientSecurityContext, base.CurrentOrganizationId, null, null, clientCulture, null);
                    OrganizationId          currentOrganizationId = base.TenantGlobalCatalogSession.SessionSettings.CurrentOrganizationId;
                    TrackingErrorCollection errors = new TrackingErrorCollection();
                    TimeSpan timeout = Utils.GetTimeout(this.BypassDelegateChecking);
                    trackingEventBudget = new TrackingEventBudget(errors, timeout);
                    directoryContext    = new DirectoryContext(clientContext, base.TenantGlobalCatalogSession.SessionSettings.CurrentOrganizationId, base.GlobalConfigSession, this.ConfigurationSession, base.TenantGlobalCatalogSession, trackingEventBudget, SearchMessageTrackingReport.GetDiagnosticsLevel(this.TraceLevel, base.Fields.IsModified("TraceLevel")), errors, false);
                    directoryContext.Acquire();
                    flag2 = true;
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Task, Names <DeliveryReportsTask> .Map[0]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[0]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Usr, this.trackedMailbox.SmtpAddress.ToString());
                    string value = Names <DeliveryReportsSource> .Map[this.IsOwaJumpOffPointRequest ? 0 : 1];
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Src, value);
                    if (this.BypassDelegateChecking)
                    {
                        ADObjectId adobjectId;
                        if (base.TryGetExecutingUserId(out adobjectId))
                        {
                            directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.ExUser, adobjectId.Name);
                        }
                        else
                        {
                            ExTraceGlobals.TaskTracer.TraceDebug((long)this.GetHashCode(), "ExecutingUserId is null.");
                        }
                    }
                    if (this.Sender != null)
                    {
                        directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Sender, this.Sender.ToString());
                    }
                    if (this.MessageId != null)
                    {
                        directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Mid, this.MessageId.ToString());
                    }
                    directoryContext.DiagnosticsContext.WriteEvent();
                    this.searchMessageTracking = new SearchMessageTrackingReportImpl(directoryContext, SearchScope.World, this.trackedMailbox, this.trackedSender, null, this.trackedRecipients, null, this.Subject, this.MessageId, this.ResultSize, false, false, true, false);
                    this.searchMessageTracking.Execute();
                }
                catch (AuthzException ex)
                {
                    this.HandleError("AutzException occurred:" + ex.Message, CoreStrings.TrackingSearchNotAuthorized);
                }
                List <MessageTrackingSearchResult> list = this.searchMessageTracking.RunAuthorizationFilter(this.IsOwaJumpOffPointRequest, this.clientSubmitTime, this.storeItemSubject);
                if (list != null)
                {
                    list = this.searchMessageTracking.FilterResultsBySubjectAndRecipients(list, executingUserLanguages);
                }
                num = (int)Math.Min(this.ResultSize.Value, 4096U);
                num = Math.Min(num, (list == null) ? 0 : list.Count);
                List <MessageTrackingSearchResult> list2 = new List <MessageTrackingSearchResult>(num);
                for (int i = 0; i < num; i++)
                {
                    MessageTrackingSearchResult internalMessageTrackingSearchResult = list[i];
                    MessageTrackingSearchResult messageTrackingSearchResult         = new MessageTrackingSearchResult(internalMessageTrackingSearchResult);
                    if (!this.TrackingAsSender)
                    {
                        messageTrackingSearchResult.RecipientAddresses = new SmtpAddress[]
                        {
                            this.trackedMailbox.SmtpAddress
                        };
                        messageTrackingSearchResult.RecipientDisplayNames = new string[]
                        {
                            this.trackedMailbox.DisplayName
                        };
                    }
                    list2.Add(messageTrackingSearchResult);
                }
                if (list2.Count == 0 && this.IsOwaJumpOffPointRequest)
                {
                    if (this.searchMessageTracking.Errors.Errors.Count == 0)
                    {
                        this.HandleZeroResultsFromJumpOffPoint();
                    }
                }
                else
                {
                    MessageTrackingSearchResult.FillDisplayNames(list2, base.TenantGlobalCatalogSession);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Op, Names <Operations> .Map[7]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[0]);
                    directoryContext.DiagnosticsContext.WriteEvent();
                    foreach (MessageTrackingSearchResult messageTrackingSearchResult2 in list2)
                    {
                        directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Time, messageTrackingSearchResult2.SubmittedDateTime);
                        directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Mid, messageTrackingSearchResult2.MessageTrackingReportId.ToString());
                        directoryContext.DiagnosticsContext.WriteEvent();
                        this.WriteResult(messageTrackingSearchResult2);
                    }
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Op, Names <Operations> .Map[7]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[1]);
                    directoryContext.DiagnosticsContext.WriteEvent();
                }
            }
            catch (TrackingTransientException ex2)
            {
                Utils.HandleTrackingException(directoryContext, ex2, this, !this.IsOwaJumpOffPointRequest, this.BypassDelegateChecking);
            }
            catch (TrackingFatalException ex3)
            {
                Utils.HandleTrackingException(directoryContext, ex3, this, !this.IsOwaJumpOffPointRequest, this.BypassDelegateChecking);
            }
            catch (DataSourceOperationException ex4)
            {
                Utils.HandleError(this, ex4.ToString(), ex4.LocalizedString, this.BypassDelegateChecking, false, ErrorCategory.InvalidData, null);
            }
            catch (DataValidationException ex5)
            {
                Utils.HandleError(this, ex5.ToString(), ex5.LocalizedString, this.BypassDelegateChecking, false, ErrorCategory.InvalidData, null);
            }
            catch (TransientException ex6)
            {
                Utils.HandleError(this, ex6.ToString(), ex6.LocalizedString, this.BypassDelegateChecking, true, ErrorCategory.InvalidData, null);
            }
            finally
            {
                if (directoryContext != null)
                {
                    Utils.WriteWarnings(this, directoryContext, this.BypassDelegateChecking, directoryContext.Errors.Errors);
                }
                if (trackingEventBudget != null)
                {
                    trackingEventBudget.Dispose();
                }
                if (directoryContext != null)
                {
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Task, Names <DeliveryReportsTask> .Map[0]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[1]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Cnt, num);
                    directoryContext.DiagnosticsContext.WriteEvent();
                    Utils.WriteDiagnostics(this, directoryContext.DiagnosticsContext, base.NeedSuppressingPiiData);
                    if (flag2)
                    {
                        directoryContext.Yield();
                    }
                }
                if (this.TraceLevel == TraceLevel.High)
                {
                    TraceWrapper.SearchLibraryTracer.Unregister();
                    BaseTrace.CurrentThreadSettings.DisableTracing();
                }
                TrackingEventBudget.ReleaseThread();
                if (directoryContext == null || Utils.AreAnyErrorsLocalToThisForest(directoryContext.Errors.Errors))
                {
                    PerfCounterData.ResultCounter.AddFailure();
                }
                else if (!this.IsOwaJumpOffPointRequest)
                {
                    PerfCounterData.ResultCounter.AddSuccess();
                }
                if (ServerCache.Instance.HostId == HostId.ECPApplicationPool)
                {
                    InfoWorkerMessageTrackingPerformanceCounters.MessageTrackingFailureRateTask.RawValue = (long)PerfCounterData.ResultCounter.FailurePercentage;
                }
                if (clientContext != null)
                {
                    clientContext.Dispose();
                }
                if (clientSecurityContext != null)
                {
                    clientSecurityContext.Dispose();
                }
            }
        }
コード例 #2
0
        protected override void InternalProcessRecord()
        {
            bool flag;

            if ("Exchange Control Panel".Equals(base.Host.Name, StringComparison.OrdinalIgnoreCase))
            {
                flag = ServerCache.Instance.InitializeIfNeeded(HostId.ECPApplicationPool);
            }
            else
            {
                flag = ServerCache.Instance.InitializeIfNeeded(HostId.PowershellApplicationPool);
            }
            if (!flag)
            {
                Utils.HandleError(this, "Cannot initialize AD configuration", CoreStrings.TrackingErrorFailedToInitialize, this.BypassDelegateChecking, false, ErrorCategory.ObjectNotFound, null);
            }
            DirectoryContext directoryContext = null;
            int num = 0;
            MessageTrackingReport messageTrackingReport = null;
            TrackingEventBudget   trackingEventBudget   = null;

            try
            {
                TrackingEventBudget.AcquireThread();
                if (this.TraceLevel == TraceLevel.High)
                {
                    CommonDiagnosticsLogTracer traceWriter = new CommonDiagnosticsLogTracer();
                    TraceWrapper.SearchLibraryTracer.Register(traceWriter);
                    BaseTrace.CurrentThreadSettings.EnableTracing();
                }
                if (base.ExchangeRunspaceConfig == null)
                {
                    ExTraceGlobals.TaskTracer.TraceError((long)this.GetHashCode(), "Get-MessageTrackingReport permissions cannot be retrieved because the ExchangeRunspaceConfiguration is null");
                    base.WriteError(new TrackingSearchException(CoreStrings.TrackingSearchNotAuthorized), ErrorCategory.InvalidOperation, this.Identity);
                }
                ReportConstraints reportConstraints   = new ReportConstraints();
                SmtpAddress[]     recipientPathFilter = null;
                if (base.Fields.Contains("RecipientPathFilter"))
                {
                    recipientPathFilter = new SmtpAddress[]
                    {
                        this.RecipientPathFilter
                    };
                }
                reportConstraints.BypassDelegateChecking = this.BypassDelegateChecking;
                reportConstraints.DetailLevel            = this.DetailLevel;
                reportConstraints.DoNotResolve           = this.DoNotResolve;
                reportConstraints.RecipientPathFilter    = recipientPathFilter;
                reportConstraints.Recipients             = this.Recipients;
                reportConstraints.ReportTemplate         = this.ReportTemplate;
                reportConstraints.ResultSize             = this.ResultSize;
                reportConstraints.TrackingAsSender       = this.Identity.IsSender;
                reportConstraints.Sender = SmtpAddress.Empty;
                ReportConstraints reportConstraints2 = reportConstraints;
                _DeliveryStatus?  deliveryStatus     = this.status;
                int?num2 = (deliveryStatus != null) ? new int?((int)deliveryStatus.GetValueOrDefault()) : null;
                reportConstraints2.Status           = ((num2 != null) ? new DeliveryStatus?((DeliveryStatus)num2.GetValueOrDefault()) : null);
                reportConstraints.ReturnQueueEvents = this.ShouldReturnQueueEvents();
                if (this.Identity.IsSender)
                {
                    ADRecipient adrecipient = base.TenantGlobalCatalogSession.FindByExchangeGuid(this.Identity.UserGuid);
                    if (adrecipient != null)
                    {
                        reportConstraints.Sender = adrecipient.PrimarySmtpAddress;
                    }
                }
                MultiValuedProperty <CultureInfo> executingUserLanguages = base.ExchangeRunspaceConfig.ExecutingUserLanguages;
                CultureInfo           clientCulture         = (executingUserLanguages != null && executingUserLanguages.Count > 0) ? executingUserLanguages[0] : CultureInfo.InvariantCulture;
                ClientContext         clientContext         = null;
                ClientSecurityContext clientSecurityContext = null;
                bool flag2 = false;
                try
                {
                    clientSecurityContext = Utils.GetSecurityContextForUser(base.ExchangeRunspaceConfig.SecurityAccessToken, base.ExchangeRunspaceConfig.DelegatedPrincipal, this.trackedUser.ADUser);
                    clientContext         = ClientContext.Create(clientSecurityContext, base.CurrentOrganizationId, null, null, clientCulture, null);
                    OrganizationId          currentOrganizationId = base.TenantGlobalCatalogSession.SessionSettings.CurrentOrganizationId;
                    TrackingErrorCollection errors = new TrackingErrorCollection();
                    TimeSpan timeout = Utils.GetTimeout(this.BypassDelegateChecking);
                    trackingEventBudget = new TrackingEventBudget(errors, timeout);
                    directoryContext    = new DirectoryContext(clientContext, currentOrganizationId, base.GlobalConfigSession, this.ConfigurationSession, base.TenantGlobalCatalogSession, trackingEventBudget, SearchMessageTrackingReport.GetDiagnosticsLevel(this.TraceLevel, base.Fields.IsModified("TraceLevel")), errors, false);
                    directoryContext.Acquire();
                    flag2 = true;
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Task, Names <DeliveryReportsTask> .Map[1]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[0]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Mid, this.Identity.ToString());
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Data1, Names <ReportTemplate> .Map[(int)this.ReportTemplate]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Usr, this.trackedUser.SmtpAddress.ToString());
                    if (this.BypassDelegateChecking)
                    {
                        ADObjectId adobjectId;
                        if (base.TryGetExecutingUserId(out adobjectId))
                        {
                            directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.ExUser, adobjectId.Name);
                        }
                        else
                        {
                            ExTraceGlobals.TaskTracer.TraceDebug((long)this.GetHashCode(), "ExecutingUserId is null.");
                        }
                    }
                    directoryContext.DiagnosticsContext.WriteEvent();
                    LogCache logCache = new LogCache(DateTime.MinValue, DateTime.MaxValue, directoryContext.TrackingBudget);
                    this.getMessageTrackingReport = new GetMessageTrackingReportImpl(directoryContext, SearchScope.World, this.Identity.InternalMessageTrackingReportId, logCache, reportConstraints);
                    MessageTrackingReport             messageTrackingReport2 = this.getMessageTrackingReport.Execute();
                    MultiValuedProperty <CultureInfo> userLanguages;
                    if (this.executingUser != null)
                    {
                        userLanguages = (this.executingUser[ADUserSchema.Languages] as MultiValuedProperty <CultureInfo>);
                    }
                    else
                    {
                        userLanguages = new MultiValuedProperty <CultureInfo>(Thread.CurrentThread.CurrentUICulture);
                    }
                    bool flag3 = false;
                    if (messageTrackingReport2 == null)
                    {
                        base.WriteError(new TrackingExceptionNoResultsDueToLogsExpired(), ErrorCategory.ObjectNotFound, this.Identity);
                    }
                    else
                    {
                        if (messageTrackingReport2.HasHandedOffPaths && !this.Identity.IsSender)
                        {
                            flag3 = true;
                            bool flag4 = this.TryGetReportForRecipientOrganization(directoryContext, logCache, reportConstraints, userLanguages, out messageTrackingReport2);
                            if (flag4 && messageTrackingReport2 == null)
                            {
                                base.WriteError(new TrackingExceptionNoResultsDueToUntrackableMessagePath(), ErrorCategory.ObjectNotFound, this.Identity);
                            }
                            else if (!flag4)
                            {
                                base.WriteError(new TrackingExceptionNoResultsDueToLogsNotFound(), ErrorCategory.ObjectNotFound, this.Identity);
                            }
                        }
                        messageTrackingReport = MessageTrackingReport.Create(this.ConfigurationSession, base.TenantGlobalCatalogSession, userLanguages, this.ReportTemplate == ReportTemplate.Summary, this.DetailLevel == MessageTrackingDetailLevel.Verbose, this.Identity.IsSender, messageTrackingReport2, this.DoNotResolve, this.getMessageTrackingReport.Errors.Errors.Count == 0);
                        if (messageTrackingReport == null)
                        {
                            ExTraceGlobals.TaskTracer.TraceDebug <int>((long)this.GetHashCode(), "Report is null while internalReport is not null and has {0} events", (messageTrackingReport2.RecipientTrackingEvents == null) ? 0 : messageTrackingReport2.RecipientTrackingEvents.Length);
                            base.WriteError(new TrackingExceptionNoResultsDueToLogsNotFound(), ErrorCategory.ObjectNotFound, this.Identity);
                        }
                        else
                        {
                            num = ((messageTrackingReport.RecipientTrackingEvents == null) ? 0 : messageTrackingReport.RecipientTrackingEvents.Length);
                            messageTrackingReport = this.FilterReport(messageTrackingReport);
                            if (messageTrackingReport == null && !flag3 && !this.Identity.IsSender)
                            {
                                bool flag5 = this.TryGetReportForRecipientOrganization(directoryContext, logCache, reportConstraints, executingUserLanguages, out messageTrackingReport2);
                                if (!flag5)
                                {
                                    base.WriteError(new TrackingExceptionNoResultsDueToLogsNotFound(), ErrorCategory.ObjectNotFound, this.Identity);
                                }
                                else if (flag5 && messageTrackingReport2 == null)
                                {
                                    base.WriteError(new TrackingExceptionNoResultsDueToUntrackableMessagePath(), ErrorCategory.ObjectNotFound, this.Identity);
                                }
                                else
                                {
                                    messageTrackingReport = MessageTrackingReport.Create(this.ConfigurationSession, base.TenantGlobalCatalogSession, userLanguages, this.ReportTemplate == ReportTemplate.Summary, this.DetailLevel == MessageTrackingDetailLevel.Verbose, this.Identity.IsSender, messageTrackingReport2, this.DoNotResolve, this.getMessageTrackingReport.Errors.Errors.Count == 0);
                                    messageTrackingReport = this.FilterReport(messageTrackingReport);
                                    if (messageTrackingReport == null)
                                    {
                                        base.WriteError(new TrackingExceptionNoResultsDueToUntrackableMessagePath(), ErrorCategory.ObjectNotFound, this.Identity);
                                    }
                                }
                            }
                            if (messageTrackingReport != null)
                            {
                                if (base.NeedSuppressingPiiData)
                                {
                                    Utils.RedactRecipientTrackingEvents(messageTrackingReport.RecipientTrackingEvents, this);
                                }
                                this.WriteResult(messageTrackingReport);
                            }
                        }
                    }
                }
                catch (AuthzException)
                {
                    base.WriteError(new TrackingSearchException(CoreStrings.TrackingSearchNotAuthorized), ErrorCategory.InvalidOperation, this.Identity);
                }
                finally
                {
                    if (directoryContext != null && flag2)
                    {
                        directoryContext.Yield();
                    }
                    if (clientContext != null)
                    {
                        clientContext.Dispose();
                    }
                    if (clientSecurityContext != null)
                    {
                        clientSecurityContext.Dispose();
                    }
                }
            }
            catch (TrackingTransientException ex)
            {
                Utils.HandleTrackingException(directoryContext, ex, this, false, this.BypassDelegateChecking);
            }
            catch (TrackingFatalException ex2)
            {
                Utils.HandleTrackingException(directoryContext, ex2, this, false, this.BypassDelegateChecking);
            }
            catch (DataSourceOperationException ex3)
            {
                Utils.HandleError(this, ex3.ToString(), ex3.LocalizedString, this.BypassDelegateChecking, false, ErrorCategory.InvalidData, null);
            }
            catch (DataValidationException ex4)
            {
                Utils.HandleError(this, ex4.ToString(), ex4.LocalizedString, this.BypassDelegateChecking, false, ErrorCategory.InvalidData, null);
            }
            catch (TransientException ex5)
            {
                Utils.HandleError(this, ex5.ToString(), ex5.LocalizedString, this.BypassDelegateChecking, true, ErrorCategory.InvalidData, null);
            }
            finally
            {
                if ((this.BypassDelegateChecking || this.ReportTemplate == ReportTemplate.RecipientPath || messageTrackingReport == null || messageTrackingReport.RecipientTrackingEvents == null || messageTrackingReport.RecipientTrackingEvents.Length == 0) && this.getMessageTrackingReport != null)
                {
                    Utils.WriteWarnings(this, directoryContext, this.BypassDelegateChecking, this.getMessageTrackingReport.Errors.Errors);
                }
                if (trackingEventBudget != null)
                {
                    trackingEventBudget.Dispose();
                }
                if (directoryContext != null)
                {
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Task, Names <DeliveryReportsTask> .Map[1]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.OpType, Names <OpType> .Map[1]);
                    directoryContext.DiagnosticsContext.AddProperty(DiagnosticProperty.Cnt, num);
                    directoryContext.DiagnosticsContext.WriteEvent();
                    Utils.WriteDiagnostics(this, directoryContext.DiagnosticsContext, base.NeedSuppressingPiiData);
                }
                if (this.TraceLevel == TraceLevel.High)
                {
                    TraceWrapper.SearchLibraryTracer.Unregister();
                    BaseTrace.CurrentThreadSettings.DisableTracing();
                }
                TrackingEventBudget.ReleaseThread();
                if (directoryContext == null || Utils.AreAnyErrorsLocalToThisForest(directoryContext.Errors.Errors))
                {
                    PerfCounterData.ResultCounter.AddFailure();
                }
                else
                {
                    PerfCounterData.ResultCounter.AddSuccess();
                }
                if (ServerCache.Instance.HostId == HostId.ECPApplicationPool)
                {
                    InfoWorkerMessageTrackingPerformanceCounters.MessageTrackingFailureRateTask.RawValue = (long)PerfCounterData.ResultCounter.FailurePercentage;
                }
            }
        }