Provider Tables

Last modified: July 23, 2011

Applies to: Outlook

A provider table contains information about service providers. There are two different provider tables, both implemented by MAPI and used by clients. The first table, accessed by calling the IMsgServiceAdmin::GetProviderTable method, holds information about all of the providers for the current profile. The second table, accessed through IProviderAdmin::GetProviderTable, creates a table that stores information about all of the service providers for a message service.

These two tables have another difference. The provider table available through IMsgServiceAdmin::GetProviderTable contains only rows that represent service providers while the table available through IProviderAdmin::GetProviderTable may include rows that represent additional information associated with a service provider. This extra information is added to the profile with the "Sections" keyword of MAPISVC.INF. When a provider has extra profile sections, it stores the MAPIUID values for these sections in the PR_SERVICE_EXTRA_UIDS (PidTagServiceExtraUids) property. PR_SERVICE_EXTRA_UIDS is saved in the message service profile section.

The following properties make up the required column set in both types of provider tables:

PR_INSTANCE_KEY (PidTagInstanceKey)

PR_DISPLAY_NAME (PidTagDisplayName)

PR_PROVIDER_DISPLAY (PidTagProviderDisplay)

PR_PROVIDER_DLL_NAME (PidTagProviderDllName)

PR_PROVIDER_ORDINAL (PidTagProviderOrdinal)

PR_PROVIDER_UID (PidTagProviderUid)

PR_RESOURCE_FLAGS (PidTagResourceFlags)

PR_RESOURCE_TYPE (PidTagResourceType)

PR_SERVICE_NAME (PidTagServiceName)

PR_SERVICE_UID (PidTagServiceUid)

The provider table can be used to display the current transport order or to change it. To display the current order, build a restriction to retrieve only those rows with the PR_RESOURCE_TYPE property set to MAPI_TRANSPORT_PROVIDER. Then use PR_PROVIDER_ORDINAL as a sort key to sort the table and retrieve all the rows with either the IMAPITable::QueryRows method or the HrQueryAllRows function.

To change the transport order, apply the same restriction and retrieve the rows. Then create an array of values from the PR_PROVIDER_UID property that represents the unique identifiers for the transport providers. When the identifiers are in the desired order, pass them to the IMsgServiceAdmin::MsgServiceTransportOrder method.

After a provider table has been made available, it will not reflect subsequent changes, such as the addition or deletion of a provider.