上下文菜单项有可能是 COM 对象,可用标准 COM 范例创建方法激活;也可能是一个应用程序,可用标准 ShellExec 功能调用。与属性页类似,上下文菜单也是多值的,每个元素包含单个 COM 对象或应用程序的描述。
这些属性称为 Admin-Context-Menu (管理上下文菜单)和 Shell-Context-Menu (外壳上下文菜单)。此外,还有一个属性 Context-Menu (上下文菜单),专门用于管理员和最终用户 UI 的公共菜单项。
在系统中注册,并可用标准 COM 范例创建方法激活的类别 UUID,称为 COM 上下文菜单。对象必须实现两个外壳界面:IShellExtInit 和 IContextMenut。
上下文菜单 COM 对象的描述以字符串形式保存在 Display-Specifier (显示说明符)上下文菜单属性中,格式如下:
,,[optional data]
这里:
order-number (序号)决定了上下文菜单项在上下文菜单中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可有一定的跳跃。
CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
COM 对象必须实现 IContextMenu 界面。
optional data (可选数据)将通过 IShellExtInit::Initialize 数据对象传递给 COM 对象。
应用程序的描述以字符串的形式保存在 Display-Specifier (显示说明符)属性中,格式如下:
,,
这里:
order-number (序号)决定了上下文菜单项在上下文菜单中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可以有一定的跳跃。
context menu name (上下文菜单名称)是在上下文菜单中显示的菜单项文本。
program name (程序名称)是要由管理单元执行的应用程序。必须为其指定完全路径,或者应用程序位于搜索路径中。
所选对象的唯一名称和类别分别作为第一个和第二个参数传递。
图标式图像用来代表类别对象,可从显示说明符中读取。而且,每个类别可存储多个图标状态。例如,一个文件夹类别可有多个位图,分别表示打开、关闭及禁用状态。当前版本允许每个类别最多有十六种不同的图标状态。
其属性命名为 Class-Icon(类别图标),可用以下两种方式之一指定:
,
或者
,,
这里:
state (状态)取 0 与 15 之间的整数值,0 定义为默认值,即图标的“关闭”状态。值 1 定义为图标的“打开”状态。值 2 表示禁用状态。其它值由应用程序定义。
ICO-file-name ( ICO 文件名)或 DLL-name ( DLL 名称)必须是本地计算机文件搜索路径中一个文件的名称。
resource-ID (资源 ID )是以 0 为基数的 DLL 资源派生图标列表的索引。
创建一个对象的新范例将会调用对象创建向导。每类对象都可用特定创建向导指定,或者用一个常规创建向导指定。对于一些熟悉的类别(如 user (用户)或 organizationalUnit (部门)),“Active Directory 管理器”管理单元提供了一套标准创建向导。
有两种方法可以扩展创建向导:彻底替换原有向导,或者扩展原有向导。
可用 primary extension (主扩展)来替换原有向导。主扩展提供了第一组页面,并以与本机页相同的方式寄存在主机中。它还支持可延伸性机制,这样就可调用其它创建向导扩展。
可用创建向导扩展来扩展原有向导,创建向导扩展可在本机页或主扩展后添加其它页。
在这两种情况下,扩展 UI 是作为 COM 对象实现的,而且它还必须支持 IDsAdminWizExt 界面。在系统中注册,并可用标准的 COM 范例创建方法激活的类别 UUID,称为创建向导或创建向导扩展。
创建向导 COM 对象的描述以单值字符串的形式保存在 Creation-Wizard (创建向导)属性中,格式如下:
此处 CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
创建向导扩展 COM 对象的描述以多值字符串的形式保存在 Create-Wizard-Ext (创建向导扩展)属性中,格式如下:
,
这里:
order-number (序号)决定了扩展在向导中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可以有一定的跳跃。
CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
与属性页 COM 对象不同,一个创建向导 COM 对象只能支持一个创建向导。
每个对象类别可能还会有一个类别显示名,并且该类别的每个属性都可有一个属性显示名。类别显示名是单值 UNICODE 字符串,保存在 Class-Display-Name (类别显示名)属性中。