注册服务提供程序唯一标识符

适用于:Outlook 2013 | Outlook 2016

通讯簿、消息存储和传输提供程序使用称为 MAPIUID 的唯一标识符注册到各种类型的服务对象。 MAPIUID 是包含 GUID 的 16 字节标识符。 可以使用以下过程创建 MAPIUID

  1. 定义常量。

  2. 调用 Visual Studio*创建 GUID** 工具。

例如,通讯簿提供程序可以在头文件中包含以下常量来定义 MAPIUID

#define AB_UID_PROVIDER { 0Xe3, 0x3c, 0x67, 0xa0, \ 0xc8, 0x1f, 0x11, 0xce, \ 0xb2, 0xe4, 0x0, 0xaa, \ 0x0, 0x51, 0xe, 0x3b }

如果提供程序是通讯簿或消息存储提供程序,则注册 MAPIUID

  1. 调用 IMAPISupport::SetProviderUID

  2. 为实例化的每个登录对象注册 一个 MAPIUID ,并将此 MAPIUID 包含在你创建的每个条目标识符的前 16 个字节的 ab 成员中。 MAPI 使用 MAPIUID 结构将对象与服务提供程序相关联。 当客户端调用 IMAPISession::OpenEntry 方法打开对象时,MAPI 会检查条目标识符的 MAPIUID 部分,将其与已注册的 MAPIUID 进行匹配,以确定哪个登录对象应接收打开的请求。

  3. 如果提供程序是传输方,请在 MAPI 调用 IXPLogon::AddressTypes 方法时注册一个或多个 MAPIUID 结构。 MAPI 使用传输提供程序注册的 MAPIUID 结构来分配消息传递的责任。

尽管服务提供商通常注册单个 MAPIUID,但你可以注册多个 MAPIUID 结构。 如果通讯簿或消息存储提供程序支持多个登录对象(可能通过允许用户将提供程序的多个实例添加到其配置文件),则可能需要为每个登录对象实现不同的 MAPIUID 。 支持多个 MAPIUID 的其他原因如下:

  • 必须支持多个版本的提供程序,并且条目标识符必须表示相应的版本。 为每个版本分配不同的 MAPIUID

  • 你希望区分你支持的对象类型。 例如,通讯簿提供程序可能需要注册一个 MAPIUID 以用于其消息用户对象的条目标识符,以及用于通讯组列表的其他 MAPIUID

如果有多个同时处于活动状态的登录对象,则每个登录对象都有唯一 的 MAPIUID 结构是有意义的。 这提高了 MAPI 与服务提供程序的条目标识符匹配的准确性,并节省一些工作。 当每个登录对象都有自己的唯一标识符时,MAPI 可以保证它路由到登录对象的任何请求都可以由该对象处理。 当登录对象共享 MAPIUID 结构时,MAPI 会将请求路由到 MAPIUID 标识的第一个登录对象。 如果其中一个登录对象收到由于不处理条目标识符而无法处理的请求,请在返回错误之前将请求传递到下一个登录对象。

另请参阅

实现服务提供程序登录