摘要
本白皮书对 Microsoft Windows 2000 Active Directory 显示说明符做了一个介绍。显示说明符 (Display Specifier) 是指包含 Active Directory 用户界面 (UI) 信息的对象,这些对象可提供灵活的 UI 机制,满足分布式网络中不同用户组的需要。
引言
Active Directory 是一种复杂的自适应目录服务,它允许通过大量的用户定义以满足特定的商业和组织需要。例如,可通过更改对象包含的属性组,来修改现有对象类别。还可创建新属性,并可在一定范围内删除现有属性。
此外,还可创建新对象类别,创建时可让它继承现有一个或多个类别的特征,也可添加新属性。对 Active Directory 进行这些更改都比较简单。因而,用来访问这些对象的用户界面 (UI) 也应相对易于扩展和自定义。
管理员和最终用户对用户界面有不同的要求。许多属性和操作对最终用户毫无意义,但对管理员却非常重要。此外,Active Directory 拥有一个精确的安全模型,允许把一些权限向下定义到个别的属性级别,还允许把管理任务委派给不同的用户。因此,Active Directory 支持这样一种 UI:它满足管理员和最终用户的需求;可以扩展以支持对架构的修改;能反映精确的安全模型。
管理型 UI 表现为不同的 Microsoft 管理控制台 (MMC) 管理单元,即 Active Directory 管理器、Active Directory 站点和服务管理器、Active Directory 树管理器,以及 Active Directory 架构管理器。
而最终用户将通过 Windows 外壳查看目录。用户可通过桌面上的“网上邻居”,或“开始”菜单中的“查找”对话框,来浏览存储在 Active Directory 中的对象。
虽然管理员和用户的用户界面及其使用 Active Directory 的经验会有所不同,但是他们都要求用户界面能够显示目录对象。因而,一种灵活的 UI 机制不但要达到本地化、可延伸性、易于顾客修改等普通 UI 目标,还要满足不同用户组的需要。
存储在目录中的 UI 元素规范
用户界面信息保存在 Active Directory 中。UI 规范在每对象类别的级别精度上做了规定,目录中的 schema (架构)部分定义了对象类别。这些对象称为“架构类别对象”。每个架构类别对象都有一个唯一的与之相关的 UI 显示规范信息。
Windows 2000 Active Directory 能够基于每对象指定不同的 UI 元素。这些元素包括:属性页、上下文菜单、图标、创建向导、本地化类别以及属性名称。
显示规范系统存储了属性页、上下文菜单、图标、创建向导、本地化类别以及属性名称等元素的信息。显示规范系统可用这些信息为管理员和最终用户建立不同的用户界面(一组元素,如属性页、上下文菜单等可与管理应用程序相关联;而另一组元素则与最终用户应用程序相关联)。
这些 UI 信息保存在称为 Display-Specifier (显示说明符)的 Active Directory 对象中。每个 Display-Specifier 对象都包含了特定 UI 界面所含不同 UI 元素的描述信息。每个 Display-Specifier 对象都保存在与 Windows 2000 所支持的各语言环境对应的 Display-Specifier 容器中。
Display-Specifier 对象的每个属性页都是一个“组件对象模型” (COM) 对象。COM 对象的描述(统一唯一标识符,即 UUID)保存在 Display-Specifier 对象的属性中。这些属性页属性是多值的,而每个元素包含单个 COM 对象的描述。这些属性页属性称为 Admin-Property-Pages (管理属性页)和 Shell-Property-Pages (外壳属性页)。
在系统中注册,并可用标准的 COM 范例创建方法激活的类别 UUID 称为 COM 属性页。对象必须实现两个外壳界面:IShellExtInit 和 IShellPropSheetExt。
属性页 COM 对象的描述以字符串的形式保存在 Display-Specifier 属性中,格式如下:
,,[optional data]
这里:
order-number (序号)决定了页面位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可以有一定的跳跃。
CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
optional data (可选数据)将通过 IShellExtInit::Initialize 数据对象传递给 COM 对象。目前,剪贴板数据格式命名为 CFSTR_DSPROPERTYPAGEINFO;但该名称在 Windows 2000 最终交付使用前会有所改变。
每个 COM 对象都可实现不止一个属性页。optional data 可以用于命名待显示页。这样,实施者就可灵活地决定创建页面时需要的 COM 对象个数。
上下文菜单项有可能是 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 (类别显示名)属性中。属性显示名是多值 UNICODE 字符串,保存在 Attribut