// Token: 0x06000010 RID: 16 RVA: 0x0000274C File Offset: 0x0000094C private static bool IsDisabled(string assistantName) { if (InfoworkerAssistants.disabledAssistantsNames == null) { InfoworkerAssistants.disabledAssistantsNames = InfoworkerAssistants.ReadDisabledAssistants(); } return(InfoworkerAssistants.disabledAssistantsNames.Contains(assistantName)); }
// Token: 0x06000012 RID: 18 RVA: 0x000029F4 File Offset: 0x00000BF4 internal static T[] CreateAssistantTypes <T>(InfoworkerAssistants.AssistantConstructor <T>[] assistantTypes) { List <T> list = new List <T>(); foreach (InfoworkerAssistants.AssistantConstructor <T> assistantConstructor in assistantTypes) { if (!InfoworkerAssistants.IsDisabled(assistantConstructor.Name) && (assistantConstructor.IsEnabledDelegate == null || assistantConstructor.IsEnabledDelegate())) { bool flag = false; Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_CreatingAssistant, null, new object[] { assistantConstructor.Name }); try { list.Add(assistantConstructor.ConstructorDelegate()); flag = true; } finally { if (!flag) { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_FailCreateAssistant, null, new object[] { assistantConstructor.Name }); } } InfoworkerAssistants.TracerPfd.TracePfd <int, string>(3L, "PFD IWS {0} Assistant {1} is Enabled", 18839, assistantConstructor.Name); } else { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_DisabledAssistant, null, new object[] { assistantConstructor.Name }); } } return(list.ToArray()); }
// Token: 0x06000011 RID: 17 RVA: 0x000028D4 File Offset: 0x00000AD4 internal static void DeleteWatermarksForDisabledAndDeprecatedAssistants(object stateNotUsed) { List <Guid> disabledEventAssistants = new List <Guid>(InfoworkerAssistants.EventBasedAssistantTypes.Length); foreach (InfoworkerAssistants.EventAssistantConstructor eventAssistantConstructor in InfoworkerAssistants.EventBasedAssistantTypes) { if (InfoworkerAssistants.IsDisabled(eventAssistantConstructor.Name)) { ExTraceGlobals.AssistantBaseTracer.TraceDebug <string>(0L, "[InfoworkerAssistants]: Event assistant '{0}' is disabled.", eventAssistantConstructor.Name); disabledEventAssistants.Add(eventAssistantConstructor.Identity); } } disabledEventAssistants.AddRange(InfoworkerAssistants.deprecatedAssistants); if (disabledEventAssistants.Count == 0) { ExTraceGlobals.AssistantBaseTracer.TraceDebug(0L, "[InfoworkerAssistants]: There are no disabled or deprecated assistants."); return; } ExTraceGlobals.AssistantBaseTracer.TraceDebug <int>(0L, "[InfoworkerAssistants]: There are {0} disabled and/or deprecated assistants.", disabledEventAssistants.Count); Exception exception = null; try { GrayException.MapAndReportGrayExceptions(delegate() { try { using (ExRpcAdmin exRpcAdmin = ExRpcAdmin.Create("Client=EBA", null, null, null, null)) { MdbStatus[] array = exRpcAdmin.ListMdbStatus(false); foreach (MdbStatus mdbStatus in array) { if (DatabaseManager.IsOnlineDatabase(mdbStatus)) { foreach (Guid guid in disabledEventAssistants) { MapiEventManager mapiEventManager = MapiEventManager.Create(exRpcAdmin, guid, mdbStatus.MdbGuid); ExTraceGlobals.AssistantBaseTracer.TraceDebug <Guid, string>(0L, "[InfoworkerAssistants]: Deleting watermarks for consumer {0} on database {1}.", guid, mdbStatus.MdbName); mapiEventManager.DeleteWatermarks(); } } } } } catch (MapiExceptionVersion exception2) { exception = exception2; } catch (MapiExceptionMdbOffline exception3) { exception = exception3; } catch (MapiExceptionExiting exception4) { exception = exception4; } catch (MapiExceptionNetworkError exception5) { exception = exception5; } catch (MapiExceptionADUnavailable exception6) { exception = exception6; } catch (MapiExceptionNoAccess exception7) { exception = exception7; } }); } catch (GrayException exception) { GrayException exception8; exception = exception8; } if (exception != null) { ExTraceGlobals.AssistantBaseTracer.TraceError <Exception>(0L, "[InfoworkerAssistants]: Failed to cleanup the watermarks at this time. Exception: {0}", exception); } }
// Token: 0x0600000F RID: 15 RVA: 0x00002740 File Offset: 0x00000940 public static ITimeBasedAssistantType[] CreateTimeBasedAssistantTypes() { return(InfoworkerAssistants.CreateAssistantTypes <ITimeBasedAssistantType>(InfoworkerAssistants.TimeBasedAssistantTypes)); }
// Token: 0x0600000E RID: 14 RVA: 0x0000272E File Offset: 0x0000092E public static IEventBasedAssistantType[] CreateEventBasedAssistantTypes() { InfoworkerAssistants.DeleteWatermarksForDisabledAndDeprecatedAssistants(null); return(InfoworkerAssistants.CreateAssistantTypes <IEventBasedAssistantType>(InfoworkerAssistants.EventBasedAssistantTypes)); }
// Token: 0x06000004 RID: 4 RVA: 0x0000223C File Offset: 0x0000043C protected override void OnStartInternal(string[] args) { if (AssistantsService.debugBreakOnStart) { Debugger.Break(); } using (Process currentProcess = Process.GetCurrentProcess()) { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ServiceStarting, null, new object[] { currentProcess.Id, "Microsoft Exchange", "15.00.1497.010" }); } AssistantsService.TracerPfd.TracePfd <int, DateTime>((long)this.GetHashCode(), "PFD IWS {0} Starting the Mailbox Assistants Service {1} ", 28055, DateTime.UtcNow); AssistantsLog.LogServiceStartEvent(this.activityId); bool flag = false; try { ADSession.DisableAdminTopologyMode(); SettingOverrideSync.Instance.Start(true); ProcessAccessManager.RegisterComponent(SettingOverrideSync.Instance); AssistantsService.TracerPfd.TracePfd <int>((long)this.GetHashCode(), "PFD IWS {0} Initializing the Assistant Infrastructure", 27479); this.databaseManager = new DatabaseManager("MSExchangeMailboxAssistants", 50, InfoworkerAssistants.CreateEventBasedAssistantTypes(), InfoworkerAssistants.CreateTimeBasedAssistantTypes(), true); this.databaseManager.Start(); MailboxSearchServer.StartServer(); Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ServiceStarted, null, new object[0]); AssistantsService.TracerPfd.TracePfd <int>((long)this.GetHashCode(), "PFD IWS {0} Mailbox Assistants Service is started successfully ", 23959); if (Configuration.MemoryMonitorEnabled) { this.memoryMonitor = new MemoryMonitor(); this.memoryMonitor.Start((ulong)Configuration.MemoryBarrierPrivateBytesUsageLimit, (uint)Configuration.MemoryBarrierNumberOfSamples, Configuration.MemoryBarrierSamplingDelay, Configuration.MemoryBarrierSamplingInterval, delegate(ulong memoryInUse) { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ServiceOutOfMemory, null, new object[] { memoryInUse }); throw new ServiceOutOfMemoryException(); }); } this.watermarkCleanupTimer = new Timer(new TimerCallback(InfoworkerAssistants.DeleteWatermarksForDisabledAndDeprecatedAssistants), null, Configuration.WatermarkCleanupInterval, Configuration.WatermarkCleanupInterval); ProcessAccessManager.RegisterComponent(this); flag = true; } finally { if (!flag) { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ServiceFailedToStart, null, new object[0]); } } }