private static ADSessionSettings GetADSessionSettings(IExchangePrincipal exchangePrincipal)
        {
            OrganizationId organizationId = exchangePrincipal.MailboxInfo.OrganizationId;

            if (organizationId == null)
            {
                organizationId = OrganizationId.ForestWideOrgId;
            }
            ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId);
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.PartiallyConsistent, sessionSettings, 367, "GetADSessionSettings", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Contacts\\DirectoryPersonSearcher.cs");

            DirectoryPersonSearcher.Tracer.TraceDebug <Guid, OrganizationId>(0L, "Searching for mailbox {0} in organization {1}", exchangePrincipal.MailboxInfo.MailboxGuid, organizationId);
            ADUser aduser = tenantOrRootOrgRecipientSession.FindByExchangeGuid(exchangePrincipal.MailboxInfo.MailboxGuid) as ADUser;

            if (aduser == null)
            {
                DirectoryPersonSearcher.Tracer.TraceError(0L, "Unable to get FromOrganizationIdWithAddressListScopeServiceOnly because ExchangePrincipal is not complete.");
                return(null);
            }
            IConfigurationSession    tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 380, "GetADSessionSettings", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Contacts\\DirectoryPersonSearcher.cs");
            AddressBookMailboxPolicy addressBookMailboxPolicy             = null;

            if (aduser.AddressBookPolicy != null)
            {
                addressBookMailboxPolicy = tenantOrTopologyConfigurationSession.Read <AddressBookMailboxPolicy>(aduser.AddressBookPolicy);
            }
            ADObjectId adobjectId;

            if (addressBookMailboxPolicy != null)
            {
                adobjectId = addressBookMailboxPolicy.GlobalAddressList;
            }
            else
            {
                adobjectId = null;
            }
            if (adobjectId != null)
            {
                DirectoryPersonSearcher.Tracer.TraceDebug <ADObjectId>(0L, "Using GAL from ABP {0} for directory search.", adobjectId);
                return(ADSessionSettings.FromOrganizationIdWithAddressListScope(ADSystemConfigurationSession.GetRootOrgContainerIdForLocalForest(), organizationId, adobjectId, null));
            }
            DirectoryPersonSearcher.Tracer.TraceDebug(0L, "Using organization scope for directory search.");
            return(ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId));
        }