目录对象选取器

使用目录对象选择器对话框,用户可以从全局目录、域或计算机或工作组中选择一个或多个对象。 用户可以选择的对象类型包括用户、联系人、组和计算机对象。 有关 Active Directory 域服务的详细信息,请参阅 Active Directory 域服务

若要显示对象选取器对话框,请执行以下操作:

  1. 调用 CoCreateInstanceCoCreateInstanceEx 函数,以创建 IDsObjectPicker 接口的实例。
  2. 调用 IDsObjectPicker::Initialize 方法以初始化对话框。
  3. 调用 IDsObjectPicker::InvokeDialog 方法以显示对话框。
  4. 调用对象选取器对话框返回的 IDataObject 实例的 IDataObject::GetData 方法,以检索 CFSTR_DSOP_DS_SELECTION_LIST 数据。 CFSTR_DSOP_DS_SELECTION_LIST 剪贴板格式提供包含 DS_SELECTION_LIST 结构的 HGLOBALDS_SELECTION_LIST 结构包含有关对象选取器对话框中所选项的数据。

如果对象需要安全标识符(SID),则应通过将 objectSID 属性添加到要检索所选对象的属性列表中,直接从对象选取器请求此标识符。 不建议将返回的对象名称传递给 LsaLookupNamesLookupAccountName 函数,因为名称查找将冗余,且在某些情况下可能会失败。

如果将保存对任何选定对象的引用,则不应保存可分辨名称,因为对象可能会移动、重命名或由于区域设置差异而更改。 对于安全主体,应为对象请求 objectSID,并妥善保存。 如果稍后需要安全主体的名称,可以使用 LookupAccountSid 函数检索。 对于所有其他对象,应请求 objectGUID,并妥善保存。

初始化

初始化对象选择器对话框时,将指定一组作用域类型和筛选器。 例如,指定的作用域类型确定用户可以从中选择对象的位置、域或计算机。 筛选器确定用户可以从给定的作用域类型中选择的对象类型。 有关详细信息,请参阅下面的“作用域和筛选器”部分。

默认情况下,用户可以在“目录对象选择器”对话框中选择单个对象。 若要启用多个选择,请在对话框初始化时,在 DSOP_INIT_INFO 结构的 flOptions 成员中设置 DSOP_FLAG_MULTISELECT 标志。

作用域和筛选器

查找下拉列表包含用户可以从中选择对象的作用域。 范围是一个域、计算机、工作组或全局目录,用于存储一组可用对象的数据并提供对这些对象的访问。 作用域列表中的条目取决于上次调用 IDsObjectPicker::Initialize 方法以初始化对象选择器对话框时指定的作用域类型和目标计算机。

作用域类型是作用域的一般类别,例如目标计算机所属的企业中的所有域、目标计算机所在企业的全局目录或目标计算机本身。 对于每个指定的作用域类型,对话框使用目标计算机的上下文来确定作用域列表条目。

IDsObjectPicker::Initialize 方法采用指向包含 DSOP_SCOPE_INIT_INFO 结构的数组的 DSOP_INIT_INFO 结构的指针。 DSOP_SCOPE_INIT_INFO 数组中的每个条目指定一个或多个作用域类型以及适用的筛选器和其他属性。 筛选器确定用户可以从给定的作用域类型中选择的对象类型,如用户、组、联系人和计算机。 当用户从列表中选择一个作用域时,对话框将应用该作用域类型的筛选器,以显示用户可以从中选择的对象列表。

每个 DSOP_SCOPE_INIT_INFO 结构都包含一个 DSOP_FILTER_FLAGS 结构,该结构指定该作用域类型的筛选器。 DSOP_FILTER_FLAGS 结构区分上层作用域和下层作用域:

  • 上层作用域是支持 ADSI LDAP 提供程序的全局目录或域。
  • 下层作用域包括工作组和所有单独的计算机。 对话框使用 ADSI WinNT 提供程序访问下层作用域。

定义用于 DSOP_FILTER_FLAGS 结构的筛选器标志集有两组:一组用于上层作用域,一组用于下层作用域。 DSOP_FILTER_FLAGS 结构的 Uplevel 成员是一个 DSOP_UPLEVEL_FILTER_FLAGS 结构,用于指定上层作用域的筛选器。 DSOP_FILTER_FLAGS 结构的 flDownlevel 成员是一组标志,用于指定下层作用域的筛选器。