在显示说明器中注册上下文菜单 COM 对象

使用 COM 为 Active Directory 目录服务创建上下文菜单扩展 DLL 时,该扩展必须注册到 Windows 注册表和 Active Directory 域 Services,以通知 Active Directory 管理 MMC 管理单元和扩展的 Windows shell。

在 Windows 注册表中注册

与所有 COM 服务器一样,必须在注册表中注册上下文菜单扩展。 扩展在下列项下注册。

HKEY_CLASSES_ROOT
   CLSID
      <clsid>

< clsid > 是由 StringFromCLSID函数生成的 CLSID 的字符串表示形式。 在 < clsid > 键下,有 一个 InProcServer32 键,用于将对象标识为 32 位 proc 服务器。 在 InProcServer32 键下,DLL 的位置在默认值中指定,线程模型在 ThreadingModel 值中指定。 所有上下文菜单扩展都必须使用"单元"线程模型。

注册到 Active Directory 域 Services

上下文菜单扩展注册特定于一个区域设置。 如果上下文菜单扩展适用于所有区域设置,则必须在显示说明符容器的所有区域设置子容器的对象类 displaySpecifier 对象中注册该扩展。 如果上下文菜单扩展插件已本地化为特定区域设置,则必须在区域设置子上下文中的 displaySpecifier 对象中注册该扩展。 有关显示说明符容器和区域设置的信息,请参阅显示 说明符DisplaySpecifiers 容器

上下文菜单扩展项可以在其中注册两个显示说明器属性。 这些是 adminContextMenu 和 shellContextMenu

adminContextMenu属性标识要显示在 Active Directory 管理管理单元中的管理上下文菜单。当用户显示其中一个 Active Directory 管理 MMC 管理单元中相应类对象的上下文菜单时,将显示上下文菜单。

shellContextMenu属性标识要显示在 shell 中的最终用户Windows菜单。 当用户在资源管理器中查看相应类的对象的上下文菜单时,Windows菜单。 从 Windows Server 2003 开始,Windows shell 不再显示 Active Directory 域 服务的对象。

所有这些属性都是多值属性。

注册上下文菜单扩展时 ,adminContextMenushellContextMenu 属性的值需要以下格式。

<order number>,<clsid>

" < 订单号 > "是一个无符号数字,表示上下文菜单中的项位置。 显示上下文菜单时,使用每个值的"订单号"的比较 < 对值 > 进行排序。 如果多个值具有相同的"订单号",则这些上下文菜单扩展插件将按从 Active Directory 服务器读取的顺序 < > 加载。 如果可能,请使用不存在的"订单号",即属性中其他值 < > 尚未使用的订单号。 "订单号"序列中不允许规定起始位置和 < > 间隔。

<"clsid" > 是由 StringFromCLSID函数生成的 CLSID 的字符串表示形式。

在 Windows shell 中,支持多选上下文菜单项。 在这种情况下,将调用每个选定对象的上下文菜单扩展。 在 Active Directory 管理管理单元中,还支持多选上下文菜单扩展项。 在这种情况下 ,DSOBJECTNAMES 结构将包含所选每个目录对象的 DSOBJECT 结构。

重要

对于 Windows shell,显示说明器信息在用户登录时进行检索,并针对用户的会话进行缓存。 对于管理管理单元,在加载管理单元时检索显示说明器数据,并缓存在进程期间。 对于 Windows shell,这意味着在用户注销并再次重新登录后,对显示说明符的更改将生效。 对于管理管理单元,更改将在重新加载管理单元或控制台文件时生效,也就是说,如果启动控制台文件或新 Mmc.exe 实例的新实例并添加管理单元,则检索最新的显示说明器数据。

有关详细信息以及如何实现上下文菜单扩展的代码示例,请参阅实现上下文菜单 COM 对象 的示例代码