Offline Address List Generation Overview


上一次修改主题: 2005-11-11

By Dave Goldman, Messaging Escalation Engineer

Microsoft® Exchange Server 2003 System Attendant uses OABGen.dll to generate the Offline Address Book (OAB). OABGen is a MAPI application that uses Name Service Provider Interface (NSPI) calls to read from the Active Directory® directory service . A healthy and properly configured Active Directory is a necessary component for offline address book generation to work correctly.

In addition to address lists and the objects that make up those lists, the offline address book has its own directory attributes. Issues with Active Directory could result in issues with the offline address book. For example, interruptions in, or a failure of, Active Directory replication could prevent newly added directory objects from appearing in the offline address book.

Several Exchange Server components work with Active Directory to generate and maintain offline address books. After an offline address book has been created (either automatically by Exchange Setup or manually by an administrator using Exchange System Manager), Exchange Server and Active Directory work together to maintain the offline address book, thereby keeping it in sync with changes that may be made in the directory.

After the offline address books are generated, they are stored in the public folder store in a system folder. You can use tools like MFCMapi or Exchange System Manager to view these system folders.

Issues with Active Directory can result in issues with the OAB. For example, a Microsoft Windows® account and associated Exchange mailbox are created. There are multiple global catalog servers in the environment. In this example, Active Directory replication is disrupted between the global catalog servers for maintenance procedures. The Exchange server generating the offline address book connects to a global catalog server that does not have the new account information. Therefore, the new account is not listed in the OAB.

For more information about the tools and resources available to troubleshoot Active Directory issues including the event log, dcdiag.exe, and netdiag.exe, see the following Microsoft Knowledge Base articles:

The following components may be involved when you work to resolve OAB issues:

  • Exchange Store   The Exchange store is responsible for storing the OAB system folders listed directly under the offline address book. Each time a new OAB is created, the corresponding OAB system folders are created including the containers, such as /o=<Organization Name>/cn=addrlists/cn=oabs/cn=<name of Offline Address List> during nightly online maintenance. You can use tools such as OABInteg, MFCMapi and Exchange System Manager to view these messages and attachments.
  • Directory servers   Active Directory domain controllers are used in OAB generation. OAB configuration data is stored in the Configuration Naming Context partition in Active Directory, which makes it available to all domain controllers. In addition, global address list information is stored in global catalog servers.
  • Recipient Update Service   Although OAB generation does not require the Recipient Update Service (RUS), address lists do require this component. The System Attendant calls the RUS, which in turn maintains the address list membership on recipients. If the address list is blank, OAB generation will fail.
  • System Attendant   System Attendant invokes OABGen.dll into the process.
  • OABGen.dll   OABGen is a MAPI application that makes NSPI calls to Active Directory to query for address list information. The first time an offline address book is generated, the OABGen process creates the OAB Version 2 and OAB Version 3a folders.
    Every time OABGen runs, it performs several tasks:
    • It creates the files for all offline address book versions.
    • It sorts and compresses the files.
    • It creates posts in the system folders for each version of the offline address it is configured to generate. The OAB files are saved as attachments on the posts in the folders.
    • It creates incremental OAB files containing daily changes. The default setting on Exchange Server is to generate an OAB incremental file every morning at 05:00.

Exchange Server 2003 generates the following two Microsoft Office Outlook® 2003 Offline Address Books:

  • Unicode Offline Address Book (OAB Version 3)   This offline address book is new for Exchange Server 2003 and has additional information that helps Microsoft Outlook to reduce server Remote Procedure Calls (RPCs). Additionally, the Unicode offline address book has new features that permit Outlook to use the correct sorting rule for the language locale with the offline address book.
  • American National Standards Institute (ANSI) Offline Address Book   This Offline Address Book format is used with both Exchange Server version 5.5 and Exchange 2000 Server. Exchange Server 2003 also supports the ANSI offline address book. There are some known issues with the ANSI offline address book, especially with those offline address books that have multiple sort locales.

An address list can be rebuilt by using Exchange System Manager or on a specific schedule. System Attendant invokes OABGen.dll directly and passes along information about the OAB that is to be built. The following steps describe this process.

  1. After System Attendant invokes OABGen.dll, template information is obtained and two template files are written. For each client language that the Exchange server supports, two associated files are created (one will be in Windows format (lngXXX.oab) and the other will be Macintosh format (macXXX.oab)).
  2. After System Attendant completes the template file processing, it uses NSPI to query Active Directory for the address list information and reads through all the address list entries.
  3. At the end of the query, System Attendant processes the data and writes out the information to a temporary location on disk (the system temp directory).
  4. The final step in this process is to compress the message attachments (Browse.Oab, Details.Oab, Anrdex.Oab, Rdndex.Oab, and one template file Tmplts.Oab), and post them to the respective OAB system folder.
  5. At this point, the OAB files are ready to be downloaded by the client. 
The data that these files contain can change only if an Exchange Administrator with access either changes or modifies the addressing or display templates.

On the client side, the individual files that contain OAB data can be found at C:\Documents and Settings\UserName\Local Settings\Application Data\Microsoft\Outlook.

  • Anrdex.oab   This file is an index for resolving ambiguous names.
  • Browse.oab   This is the core file. This file contains the object type, the display name, and a pointer in the Details.oab file for each object.
  • Details.oab   This file contains all the object details (those that were included in the generation of the offline address book), except for the display name.
  • Pdndex.oab   This file contains the changes to domain names and the lists thereof.
  • Rdndex.oab   This file is an index for resolving relative distinguished names.
  • Tmplts.oab   This file contains strings for dialog boxes and for any other items that are static in the offline address book. This file does not increase if you add additional objects to your directory.

Additionally, there are six Unicode file types:

  • Uanrdex.oab   This file is the Unicode version of the Anrdex.oab file.
  • Ubrowse.oab   This file is the Unicode version of the Browse.oab file.
  • Udetails.oab   This file is the Unicode version of the Details.oab file.
  • Updndex.oab   This file is the Unicode version of the Pdndex.oab file.
  • Urdndex.oab   This file is the Unicode version of the Rdndex.oab file.
  • Utmplts.oab   This file is the Unicode version of the Tmplts.oab file.

The following attributes are required in an offline address list:

  • addressBookRoots   Exchange uses this attribute to configure trees of address book containers to show up in the MAPI address book. This attribute can be found on the properties of the Exchange Config Object, and lists all roots of the address book container trees.
  • offlineABContainers   This attribute is a multiple-valued distinguished name attribute that stores a list of distinguished names of address lists that should be included in this offline address book.
  • offlineABServer   This attribute is a single-valued distinguished name attribute that stores the distinguished name of the server that is responsible for generating this offline address book. The server must be running Exchange 2000 Server.
  • doOABVersion   This attribute is a single-valued integer attribute that stores compatibility information of this specific address book with different versions of Exchange Server. This attribute can be set to either 0 or 1. Any other value is reserved for future use. A value of 0 indicates that this address book is not required to be compatible with Exchange Server 4.0 and Exchange Server 5.0. A value of 1 indicates that this address book should be compatible with Exchange Server 4.0 and Exchange Server 5.0, in addition to Exchange Server 5.5 and Exchange 2000 Server.
  • msExchOABFolder   This attribute is a single-valued octet string attribute that is always set to a variant array with one element that stores a zero-byte array. Its existence is solely due to earlier versions of Exchange Server.
  • offlineABSchedule   This attribute is a single-valued octet string attribute that is set to a byte array of size 84 that stores the offline address book update interval schedule. Each bit in this structure represents a 15-minute increment, starting from 12:00 AM Sunday. Each byte in this structure represents a 2-hour increment. Set the bit to 1 to schedule it to run at the 15-minute interval.
  • offlineABStyle   This attribute is a single-valued integer attribute that indicates more general Exchange Server schedule information, as follows:
    • 0 = Never run. This is the same as setting each byte in the schedule blob in offlineABSchedule attribute to 0x00.
    • 1 = Run as specified by the schedule blob stored in the offlineABSchedule attribute.
    • 2 = Run always. This is the same as setting each byte in the schedule blob in offlineABSchedule attribute to 0xFF.
  • legacyExchangeDN   This attribute is a single-valued distinguished name attribute that stores the legacyExchangeDN attribute of the Exchange organization to which this address list belongs. Exchange System Manager creates it as <legacy domain name of the organization>/cn=addrlists/cn=oabs/cn=<legacy container name for the oab>.
  • msExchOABDefault   This attribute is a single-valued Boolean attribute that stores a value of either True or False. If set to True, it indicates that this is the default offline address book for any mailbox store if not explicitly specified for that store. Only one offline address book should have this value set to True.
  • systemFlags   This attribute is a single-valued integer attribute that stores system information regarding the directory object. Although this attribute is optional, it must be set at creation time as well. This attribute is set by passing a value that is defined by the ADS_SYSTEMFLAG_ENUM enumeration, which is documented in the MSDN® Library at ADS_SYSTEMFLAG_ENUM.
  • siteFolderGUID   This attribute is a single-valued octet string attribute that is set to a random unique globally unique identifier (GUID) value for the offline address book.
  • siteFolderServer   This attribute is a single-valued distinguished name attribute that stores the distinguished name of the public folder store where you want the offline address book to exist. The public folder store should be on the same server as offLineABServer to avoid network traffic.
  • msExchPurportedSearcyUIArray   This attribute is a multiple-valued attribute that stores the parameters necessary to rebuild the Exchange System Manager's offline address book query filter for this offline address book. This attribute does not have to be set. If it does not have a value set, the Modify button on the offline address book's properties would be disabled, when viewed through Exchange System Manager. Modifying this attribute is not supported and there is no documentation on how to customize this property. The best way to customize it programmatically is to create an OAB using a similar query filter from Exchange System Manager, copy the values of this attribute, and paste them into your code to make a new OAB that you are creating programmatically.