摘要
本白皮书对 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 属性中,格式如下:
<order-number>,<CLSID>,[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 (显示说明符)上下文菜单属性中,格式如下:
<order-number>,<CLSID>,[optional data]
这里:
order-number (序号)决定了上下文菜单项在上下文菜单中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可有一定的跳跃。
CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
COM 对象必须实现 IContextMenu 界面。
optional data (可选数据)将通过 IShellExtInit::Initialize 数据对象传递给 COM 对象。
应用程序的描述以字符串的形式保存在 Display-Specifier (显示说明符)属性中,格式如下:
<order-number>,<context menu name>,<program name>
这里:
order-number (序号)决定了上下文菜单项在上下文菜单中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可以有一定的跳跃。
context menu name (上下文菜单名称)是在上下文菜单中显示的菜单项文本。
program name (程序名称)是要由管理单元执行的应用程序。必须为其指定完全路径,或者应用程序位于搜索路径中。
所选对象的唯一名称和类别分别作为第一个和第二个参数传递。
图标式图像用来代表类别对象,可从显示说明符中读取。而且,每个类别可存储多个图标状态。例如,一个文件夹类别可有多个位图,分别表示打开、关闭及禁用状态。当前版本允许每个类别最多有十六种不同的图标状态。
其属性命名为 Class-Icon(类别图标),可用以下两种方式之一指定:
<state>,<ICO-file-name>
或者
<state>,<DLL-name>,<resource-ID>
这里:
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>
此处 CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。
创建向导扩展 COM 对象的描述以多值字符串的形式保存在 Create-Wizard-Ext (创建向导扩展)属性中,格式如下:
<order-number>,<CLSID>
这里:
order-number (序号)决定了扩展在向导中的位置。order-number 根据一种符号标记的相对关系进行排序,这样,就不必规定起始位置,且中间可以有一定的跳跃。
CLSID,即类别标识符,必须是 UUID 的字符串表示,加上尖括号。 与属性页 COM 对象不同,一个创建向导 COM 对象只能支持一个创建向导。
每个对象类别可能还会有一个类别显示名,并且该类别的每个属性都可有一个属性显示名。类别显示名是单值 UNICODE 字符串,保存在 Class-Display-Name (类别显示名)属性中。属性显示名是多值 UNICODE 字符串,保存在 Attribute-Display-Name (属性显示名)属性中,其中每个元素由一个逗号分隔的名称对组成。(首先是属性 LDAP 显示名,接着是逗号,然后是相应的 UI 显示名)。
任何 Active Directory 对象都可能成为其它对象的容器。这会给 UI 造成混乱;因此可以声明特定类别在默认情况下按“叶”元素显示。 Treat-As-Leaf (视为“叶”)属性包含一个布尔值,如果为 True,则表明类别的对象应看作叶元素。
显示说明符容器
Configuration (配置)容器存储了 DisplaySpecifiers (显示说明符)容器;而 DisplaySpecifiers 容器反过来存储了与每个本地语言环境对应的容器。这些语言环境容器是用语言环境 LCID 的十六进制表示来命名的。因此,美国英语语言环境命名为 409,德语语言环境命名为 407,日语语言环境命名为 411,以此类推。
每个本地语言环境容器存储了类别 Display-Specifier 的对象。 Display-Specifier 对象命名的方法是:在类别对象的“LDAP 显示名”后加上字符串“-Display”。
例如,user (用户)类相应的 Display-Specifier 对象名为“user-Display”。因而,当您要查找某个类别的对象时,就可以在当前语言环境中,根据与类别相同的名称来查找 Display-Specifier 对象。
当遇到一个新类别时,将会检出显示信息并保存结果,用于显示同一类别的其它对象。缓存是基于每进程的,并且是暂时性的。
本地化
每个本地语言环境容器都包含已本地化的 Display-Specifier 对象。Active Directory UI 应用程序首先在本地语言环境容器中查找(该容器是按照当前用户会话的语言环境标识符命名的)。如果未找到具有此名称的文件夹,则会使用美国英语语言环境的容器。
COM 对象可用以下方法本地化:让每种语言拥有不同的二进制名称,或者在一个库中包含多种语言资源。
与此类似,类别和属性显示名也将被翻译。每个语言环境可用不同的图标表示。
客户修改
用户可以自定义 Active Directory,使其适合自己的独特需求。用户界面也可按照自己的需要做出更改。Active Directory 允许通过创建新的类别及属性,或修改现有类别,对架构做出修改。显示说明符也可以被修改,使其能够反映架构修改所需的新用户界面元素。
对新类别,还会创建一个 Display-Specifier 对象。如果有多个语言环境,则会为每个支持的语言环境都创建新 Display-Specifier 对象。如果新类别是由父类别导出的,而且父类别已经有一个可以接受的 UI,则该 UI 可作为指定的 UI,并可为新属性添加其它页、菜单项以及显示名称。否则,则可以创建一个全新的 UI,并把它指定为 UI。无论哪种情况,均可使用新图标和类别显示名。
新属性可以添加至现有类别中。新的 UI 组件(页面、菜单项及属性显示名)也可添加现有 UI,或者替换掉现有 UI。还有可能设计新属性页,使之显示更少的类别属性;或者创建含更少操作的上下文菜单。
显示说明符示例
以下是 Windows 2000 Active Directory 中一个实际的显示说明符示例:
[group-Display]
objectClass = displaySpecifier
ObjectCategory = Display-Specifier
cn = group-Display
adminPropertyPages = 1,{6dfe6489-a212-11d0-bcd5-00c04fd8d5b6}
adminPropertyPages = 2,{6dfe648b-a212-11d0-bcd5-00c04fd8d5b6}
adminPropertyPages = 3,{6dfe6488-a212-11d0-bcd5-00c04fd8d5b6}
adminPropertyPages = 4,{4E40F770-369C-11d0-8922-00A024AB2DBB}
shellPropertyPages = 1,{f5d121ee-c8ac-11d0-bcdb-00c04fd8d5b6}
shellPropertyPages = 2,{dde2c5e9-c8ae-11d0-bcdb-00c04fd8d5b6}
contextMenu = 0,{62AE1F9A-126A-11D0-A14B-0800361B1103}
adminContextMenu = 1,{08eb4fa6-6ffd-11d1-b0e0-00c04fd8dca6}
classDisplayName = Group
attributeDisplayNames = cn,Name
attributeDisplayNames = c,Country Abbreviation
attributeDisplayNames = description,Description
attributeDisplayNames = distinguishedName,X500 Distinguished Name
attributeDisplayNames = l,City
attributeDisplayNames = managedBy,Managed By
attributeDisplayNames = member,Members
attributeDisplayNames = notes,Notes
attributeDisplayNames = physicalDeliveryOfficeName,Delivery Office
attributeDisplayNames = url,Web Page Address
treatAsLeaf=True
更多信息
有关 Windows NT Server 的更多信息,请查阅 Microsoft TechNet 或万维网站点 http://www.microsoft.com/ntserver ,以及 Microsoft Network 上的 Windows NT Server Forum ( Windows NT Server 论坛) (GO WORD:MSNTS)。
有关 COM、Microsoft 管理控制台 (MMC) 及 Active Directory 的详细编程信息,请参见 Microsoft Windows Platform SDK。
© 1999 Microsoft Corporation.版权所有。
本文档包含的信息代表了在发行之日,Microsoft Corporation 对所讨论问题的当前看法。因为 Microsoft 必须顺应不断变化的市场条件,故该文档不应理解为 Microsoft 一方的承诺,Microsoft 不保证所给信息在发布之日以后的准确性。
本白皮书仅供参考。在本文档中 MICROSOFT 不做任何明示的或默示的保证。
BackOffice 徽标、Microsoft、Windows 和 Windows NT 是 Microsoft Corporation 的注册商标。
此处提到的其它产品或公司名称可能是其所有者的商标。
Microsoft Corporation • One Microsoft Way • Redmond,WA 98052-6399 • USA
1999