private Dictionary <string, DefaultFolderManager.FolderData> ReadFolderData() { MapiFolder mapiFolder = null; StoreSession storeSession = this.Session; bool flag = false; try { if (storeSession != null) { storeSession.BeginMapiCall(); storeSession.BeginServerHealthCall(); flag = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiFolder = this.session.Mailbox.MapiStore.GetNonIpmSubtreeFolder(); } catch (MapiPermanentException ex) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex, storeSession, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex }); } catch (MapiRetryableException ex2) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex2, storeSession, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex2 }); } finally { try { if (storeSession != null) { storeSession.EndMapiCall(); if (flag) { storeSession.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } Dictionary <string, DefaultFolderManager.FolderData> result; using (mapiFolder) { HierarchyTableFlags flags = HierarchyTableFlags.ConvenientDepth; MapiTable mapiTable = null; StoreSession storeSession2 = this.Session; bool flag2 = false; byte[] inboxFolderEntryId; try { if (storeSession2 != null) { storeSession2.BeginMapiCall(); storeSession2.BeginServerHealthCall(); flag2 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiTable = mapiFolder.GetHierarchyTable(flags); inboxFolderEntryId = this.Session.Mailbox.MapiStore.GetInboxFolderEntryId(); } catch (MapiPermanentException ex3) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex3, storeSession2, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex3 }); } catch (MapiRetryableException ex4) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex4, storeSession2, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex4 }); } finally { try { if (storeSession2 != null) { storeSession2.EndMapiCall(); if (flag2) { storeSession2.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } using (mapiTable) { PropTag[] columns = new PropTag[] { (PropTag)InternalSchema.EntryId.PropertyTag, (PropTag)InternalSchema.DisplayName.PropertyTag, (PropTag)InternalSchema.ContainerClass.PropertyTag, (PropTag)InternalSchema.ParentEntryId.PropertyTag, (PropTag)InternalSchema.MapiFolderType.PropertyTag, (PropTag)InternalSchema.AdminFolderFlags.PropertyTag, (PropTag)InternalSchema.IsHidden.PropertyTag, (PropTag)InternalSchema.SystemFolderFlags.PropertyTag, (PropTag)InternalSchema.ExtendedFolderFlagsInternal.PropertyTag, (PropTag)InternalSchema.DefaultFoldersLocaleId.PropertyTag }; PropValue[][] array = null; StoreSession storeSession3 = this.Session; bool flag3 = false; try { if (storeSession3 != null) { storeSession3.BeginMapiCall(); storeSession3.BeginServerHealthCall(); flag3 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiTable.SetColumns(columns); array = mapiTable.QueryRows(StorageLimits.Instance.DefaultFolderDataCacheMaxRowCount); } catch (MapiPermanentException ex5) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex5, storeSession3, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex5 }); } catch (MapiRetryableException ex6) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCannotReadFolderData, ex6, storeSession3, this, "{0}. MapiException = {1}.", new object[] { string.Format("DefaultFolderManager::ReadFolderData.", new object[0]), ex6 }); } finally { try { if (storeSession3 != null) { storeSession3.EndMapiCall(); if (flag3) { storeSession3.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } if (array.Length == StorageLimits.Instance.DefaultFolderDataCacheMaxRowCount) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <int>((long)this.GetHashCode(), "DefaultFolderManager::ReadFolderData. There are too many folders under IpmSubtree. Some of default folders may have been ignored. Query Rows = {0}.", array.Length); } string inboxDisplayName = null; CultureInfo stampedCulture = null; Dictionary <string, DefaultFolderManager.FolderData> dictionary = new Dictionary <string, DefaultFolderManager.FolderData>(); foreach (PropValue[] array3 in array) { byte[] array4 = array3[0].IsError() ? null : array3[0].GetBytes(); string text = array3[1].IsError() ? null : array3[1].GetString(); string containerClass = array3[2].IsError() ? null : array3[2].GetString(); byte[] parentEntryId = array3[3].IsError() ? null : array3[3].GetBytes(); FolderType? arg = array3[4].IsError() ? null : new FolderType?((FolderType)array3[4].GetInt()); ELCFolderFlags? elcFolderFlags = array3[5].IsError() ? null : new ELCFolderFlags?((ELCFolderFlags)array3[5].GetInt()); bool isHidden = !array3[6].IsError() && array3[6].GetBoolean(); SystemFolderFlags?systemFolderFlags = array3[7].IsError() ? null : new SystemFolderFlags?((SystemFolderFlags)array3[7].GetInt()); byte[] extendedFolderFlags = array3[8].IsError() ? null : array3[8].GetBytes(); if (array4 != null && text != null && arg != null) { string key = Convert.ToBase64String(array4); if (dictionary.ContainsKey(key)) { ExTraceGlobals.DefaultFoldersTracer.TraceError <string, string, FolderType?>((long)this.GetHashCode(), "DefaultFolderManager::ReadFolderData. Store returns duplicate entries from hierarch query. Mailbox = {0}. displayName = {1}, folderType = {2}.", this.Session.DisplayName, text, arg); } else { dictionary.Add(key, new DefaultFolderManager.FolderData(text, arg.Value, containerClass, parentEntryId, elcFolderFlags, isHidden, systemFolderFlags, extendedFolderFlags)); if (array4.SequenceEqual(inboxFolderEntryId)) { int?num = new int?(array3[9].GetInt()); if (num != null && num.Value >= 0) { stampedCulture = LocaleMap.GetCultureFromLcid(num.Value); } } } } } this.session.SharedDataManager.DefaultFoldersCulture = this.GetBestCulture(stampedCulture, inboxDisplayName, this.session); result = dictionary; } } return(result); }