ADS_SEARCHPREF_ENUM 枚举 (iads.h)

ADS_SEARCHPREF_ENUM 枚举指定 IDirectorySearch 对象的首选项。 此枚举用于 IDirectorySearch::SetSearchPreference 方法中 ADS_SEARCHPREF_INFO 结构的 dwSearchPref 成员。

语法

typedef enum __MIDL___MIDL_itf_ads_0000_0000_0025 {
  ADS_SEARCHPREF_ASYNCHRONOUS = 0,
  ADS_SEARCHPREF_DEREF_ALIASES,
  ADS_SEARCHPREF_SIZE_LIMIT,
  ADS_SEARCHPREF_TIME_LIMIT,
  ADS_SEARCHPREF_ATTRIBTYPES_ONLY,
  ADS_SEARCHPREF_SEARCH_SCOPE,
  ADS_SEARCHPREF_TIMEOUT,
  ADS_SEARCHPREF_PAGESIZE,
  ADS_SEARCHPREF_PAGED_TIME_LIMIT,
  ADS_SEARCHPREF_CHASE_REFERRALS,
  ADS_SEARCHPREF_SORT_ON,
  ADS_SEARCHPREF_CACHE_RESULTS,
  ADS_SEARCHPREF_DIRSYNC,
  ADS_SEARCHPREF_TOMBSTONE,
  ADS_SEARCHPREF_VLV,
  ADS_SEARCHPREF_ATTRIBUTE_QUERY,
  ADS_SEARCHPREF_SECURITY_MASK,
  ADS_SEARCHPREF_DIRSYNC_FLAG,
  ADS_SEARCHPREF_EXTENDED_DN
} ADS_SEARCHPREF_ENUM;

常量

 
ADS_SEARCHPREF_ASYNCHRONOUS
值: 0
指定应异步执行搜索。 默认情况下,搜索是同步的。

在同步搜索中, IDirectorySearch::GetFirstRowIDirectorySearch::GetNextRow 方法不会返回,直到服务器返回整个结果,或者对于分页搜索,返回整个页面。

异步搜索将一直阻塞,直到搜索结果的一行可用,或直到 ADS_SEARCHPREF_TIMEOUT 搜索首选项指定的超时间隔结束。
ADS_SEARCHPREF_DEREF_ALIASES
指定要解析找到的 对象的别名。 使用 ADS_DEREFENUM 枚举指定如何执行此操作。
ADS_SEARCHPREF_SIZE_LIMIT
指定服务器在搜索期间应遵守的大小限制。 达到大小限制时,服务器停止搜索,并返回累积到该点的结果。 如果此值为零,则大小限制由目录服务确定。 此值的默认值为零。 如果此值大于目录服务确定的大小限制,则优先使用目录服务限制。

对于 Active Directory,大小限制指定搜索要返回的最大对象数。 此外,对于 Active Directory,搜索返回的最大对象数为 1000 个对象。
ADS_SEARCHPREF_TIME_LIMIT
指定服务器等待搜索完成的秒数。 达到时间限制后,服务器将停止搜索并返回累积到该时间点的结果。 如果此值为零,则超时期限为无限期。 此值的默认值为 120 秒。
ADS_SEARCHPREF_ATTRIBTYPES_ONLY
指示搜索应仅获取为其分配值的属性的名称。
ADS_SEARCHPREF_SEARCH_SCOPE
指定服务器应观察到的搜索范围。 有关相应设置的详细信息,请参阅 ADS_SCOPEENUM 枚举。
ADS_SEARCHPREF_TIMEOUT
指定客户端等待服务器返回结果的时间限制(以秒为单位)。 此选项在 ADS_SEARCHPREF_INFO 结构中设置。
ADS_SEARCHPREF_PAGESIZE
指定分页搜索中的页面大小。 对于客户端的每个请求,服务器最多返回由页面大小设置的对象数。 设置页面大小时,无需设置大小限制。 如果设置了大小限制,则页面大小的值必须小于大小限制的值。 如果页面大小的值超过大小限制,则返回 ERROR_DS_SIZELIMIT_EXCEEDED 错误,并返回由大小限制指定的行数。
ADS_SEARCHPREF_PAGED_TIME_LIMIT
指定服务器应等待搜索结果页的秒数,而不是整个搜索的时间限制。 达到时间限制后,服务器将停止搜索,并返回该时间点前获取的结果,以及包含有关恢复搜索位置的数据的 Cookie。 如果此值为零,则页面超时期限是无限期的。 此限制的默认值为 120 秒。
ADS_SEARCHPREF_CHASE_REFERRALS
指定可以追逐引荐。 如果未在服务器的命名上下文中指定根搜索,或者当搜索结果跨命名上下文时(例如,在父域中有子域和搜索时),服务器会向客户端发送一条引荐消息,客户端可以选择忽略或追查该消息。 有关引荐追逐的详细信息,请参阅 ADS_CHASE_REFERRALS_ENUM
ADS_SEARCHPREF_SORT_ON
指定服务器对结果集进行排序。 使用 ADS_SORTKEY 结构指定排序键。 此搜索首选项仅适用于支持服务器端排序的 LDAP 控件的目录服务器。 Active Directory 支持排序控件,但它可能会影响服务器性能,尤其是在结果集很大时。 Active Directory 仅支持单个排序键。
ADS_SEARCHPREF_CACHE_RESULTS
指定是否应在客户端缓存结果。 默认情况下,ADSI 缓存结果集。 对于大型结果集,可能需要禁用此选项。
ADS_SEARCHPREF_DIRSYNC
指定目录同步 (DirSync) 搜索,这将返回自指定状态以来的所有更改。 在 ADSVALUE 结构中,将 dwType 成员设置为 ADS_PROV_SPECIFICProviderSpecific 成员是一个ADS_PROV_SPECIFIC结构,其 lpValue 成员指定指示从中检索更改的状态的 Cookie。 首次使用 DirSync 控件时,请将ADS_PROV_SPECIFIC结构的 dwLengthlpValue 成员分别设置为零和 NULL。 读取搜索返回的结果集,直到 IDirectorySearch::GetNextRow 返回 S_ADS_NOMORE_ROWS,然后调用 IDirectorySearch::GetColumn 以检索包含要用于下一个 DirSync 搜索的 cookie 的 ADS_DIRSYNC_COOKIE 属性。 有关详细信息,请参阅 使用 DirSync 控件轮询更改LDAP_SERVER_DIRSYNC_OID

此标志不能与 ADS_SEARCHPREF_PAGESIZE组合使用。

调用方必须具有 SE_SYNC_AGENT_NAME 特权。
ADS_SEARCHPREF_TOMBSTONE
指定搜索是否还应返回与搜索筛选器匹配的已删除对象。 删除对象后,Active Directory 会将其移动到“已删除的对象”容器。 默认情况下,搜索结果中不包含已删除的对象。 在 ADSVALUE 结构中,将 dwType 成员设置为 ADSTYPE_BOOLEAN。 若要包含已删除的对象,请将 ADSVALUE 结构的布尔成员设置为 TRUE

删除对象时,并非所有属性都会保留。 可以检索 objectGUIDRDN 属性。 distinguishedName 属性是“已删除对象”容器中对象的 DN,而不是以前的 DN。 对于已删除的对象, isDeleted 属性为 TRUE 。 有关详细信息,请参阅 检索已删除的对象
ADS_SEARCHPREF_VLV
指定搜索应使用 LDAP 虚拟列表视图 (VLV) 控件。 ADS_SEARCHPREF_VLV 可用于通过设置适当的字段来访问字符串类型和偏移类型的 VLV 搜索。 无法同时使用这两个选项,因为无法设置 VLV 控件来请求位于特定偏移量且遵循排序序列中特定值的结果集。

若要执行字符串搜索,请将 ADS_VLV 中的 lpszTarget 字段设置为要搜索的字符串。 若要执行偏移类型搜索,请在 ADS_VLV 中设置 dwOffset 字段。 如果使用偏移量搜索,则必须将 lpszTarget 设置为 NULL

使用 ADS_SEARCHPREF_VLV 时,必须将ADS_SEARCHPREF_SORT_ON设置为 TRUE。 搜索结果的排序顺序决定了用于 VLV 搜索的顺序。 如果执行偏移类型搜索,则偏移量将用作排序列表中的索引。 如果执行字符串类型搜索,服务器会尝试根据排序顺序返回大于或等于字符串的第一个条目。

指定 ADS_SEARCHPREF_VLV 时,将禁用搜索结果的缓存。

如果使用 ADS_SEARCHPREF_VLV 分配ADS_SEARCHPREF_CACHE_RESULTSTRUE,则 SetSearchPreference失败并返回错误E_ADS_BAD_PARAMETER
ADS_SEARCHPREF_ATTRIBUTE_QUERY
指定应执行属性范围的查询搜索。 对基对象的指定属性中命名的对象执行搜索。 ADS_SEARCHPREF_INFO 结构的 vValue 成员包含一个ADSTYPE_CASE_IGNORE_STRING值,该值包含要搜索的属性的 lDAPDisplayName。 此属性必须是 ADS_DN_STRING 属性。 只能指定一个属性。 使用此首选项时,搜索范围会自动设置为 ADS_SCOPE_BASE ,否则尝试设置范围将失败, 并E_ADS_BAD_PARAMETER错误。 除了 ADS_SEARCHPREF_VLV 首选项外,指定此首选项时,不允许使用 LDAP 控件的所有其他首选项,例如 ADS_SEARCHPREF_DIRSYNCADS_SEARCHPREF_TOMBSTONE等。
ADS_SEARCHPREF_SECURITY_MASK
指定搜索应返回指定属性的安全访问数据。 ADS_SEARCHPREF_INFO 结构的 vValue 成员包含一个ADS_INTEGER值,该值是以下一个或多个值的组合。






















说明
ADS_SECURITY_INFO_OWNER读取所有者数据。
ADS_SECURITY_INFO_GROUP读取组数据。
ADS_SECURITY_INFO_DACL读取 DACL) (自由访问控制列表。
ADS_SECURITY_INFO_SACL读取 SACL) (系统访问控制列表。

 

如果在未使用 ADS_SEARCHPREF_SECURITY_MASK 显式指定安全掩码的情况下读取安全描述符,则默认为 等效ADS_SECURITY_INFO_OWNER
ADS_SECURITY_INFO_GROUP ADS_SECURITY_INFO_DACL
ADS_SEARCHPREF_DIRSYNC_FLAG
包含与 ADS_SEARCHPREF_DIRSYNC 搜索首选项一起使用的可选标志。 ADS_SEARCHPREF_INFO 结构的 vValue 成员包含一个ADSTYPE_INTEGER值,该值为零或以下一个或多个值的组合。 有关 DirSync 控件的详细信息,请参阅 使用 DirSync 控件轮询更改LDAP_SERVER_DIRSYNC_OID



























标识符说明
LDAP_DIRSYNC_OBJECT_SECURITY1如果此标志不存在,则调用方必须具有复制更改权限。 如果存在此标志,
调用方不需要任何权限,但只允许查看调用方可访问的对象和属性。
LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER2048 (0x00000800) 当父对象将在复制流中稍后出现时,返回子对象之前父对象。
LDAP_DIRSYNC_PUBLIC_DATA_ONLY8192 (0x00002000) 在搜索结果中不返回私有数据。
LDAP_DIRSYNC_INCREMENTAL_VALUES2147483648 (0x80000000) 如果没有此标志,则当任何值发生更改时,将返回多值特性中的所有值(最多到服务器指定的限制)。 如果有此标志,则只返回发生更改的值。
ADS_SEARCHPREF_EXTENDED_DN
搜索应返回 Active Directory 扩展格式的可分辨名称。 如果 DN 字符串的 GUID 和 SID 部分应采用十六进制格式,则 ADS_SEARCHPREF_INFO 结构的 vValue 成员包含一个包含零的 ADSTYPE_INTEGER 值;如果 DN 字符串的 GUID 和 SID 部分应采用标准格式,则为 0。 有关扩展的可分辨名称的详细信息,请参阅 LDAP_SERVER_EXTENDED_DN_OID

注解

若要设置搜索首选项,请将适当的值分配给传递给服务器的 ADS_SEARCHPREF_INFO 结构的字段。 ADS_SEARCHPREF_INFO 结构的 vValue 成员是 ADSVALUE 结构。 以下列表列出了ADS_SEARCHPREF_ENUM值、ADSVALUE 结构的 dwType 成员的相应值,以及用于指定类型的 ADSVALUE 成员。

ADS_SEARCHPREF_ENUM ADSVALUEdwType 成员 ADSVALUE 成员
ADS_SEARCHPREF_ASYNCHRONOUS ADSTYPE_BOOLEAN 布尔值
ADS_SEARCHPREF_DEREF_ALIASES ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_SIZE_LIMIT ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_TIME_LIMIT ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_ATTRIBTYPES_ONLY ADSTYPE_BOOLEAN 布尔值
ADS_SEARCHPREF_SEARCH_SCOPE ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_TIMEOUT ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_PAGESIZE ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_PAGED_TIME_LIMIT ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_CHASE_REFERRALS ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_SORT_ON ADSTYPE_PROV_SPECIFIC ProviderSpecific
ADS_SEARCHPREF_CACHE_RESULTS ADSTYPE_BOOLEAN 布尔值
ADS_SEARCHPREF_DIRSYNC ADSTYPE_PROV_SPECIFIC ProviderSpecific
ADS_SEARCHPREF_TOMBSTONE ADSTYPE_BOOLEAN 布尔值
ADS_SEARCHPREF_VLV ADSTYPE_PROV_SPECIFIC ProviderSpecific
ADS_SEARCHPREF_ATTRIBUTE_QUERY ADSTYPE_CASE_IGNORE_STRING CaseIgnoreString
ADS_SEARCHPREF_SECURITY_MASK ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_DIRSYNC_FLAG ADSTYPE_INTEGER 整数
ADS_SEARCHPREF_EXTENDED_DN ADSTYPE_INTEGER 整数
 

若要设置多个首选项,请使用 ADS_SEARCHPREF_INFO 结构数组。 此枚举的成员值分配给 ADS_SEARCHPREF_INFO 结构的 dwSearchPref 成员。

LDAP 系统提供程序支持所有选项。

由于 VBScript 无法从类型库读取数据,因此 VBScript 应用程序无法识别上面定义的符号常量。 应改用数字常量在 VBScript 应用程序中设置相应的标志。 若要使用符号常量(作为一种良好的编程做法),请在 VBScript 应用程序中显式声明此类常量,如此处所示。

示例

下面的代码示例演示如何使用 ADS_SEARCHPREF_INFO 枚举设置搜索首选项。

HRESULT SetSearchPreferences2(
    DWORD dwScope,// -1 indicates default: subtree.
    DWORD dwOverallTimeOut,// <=0 indicates default: no time out set.
    DWORD dwOverallSizeLimit,// <=0 indicates default: no size limit set.
    DWORD dwOverallTimeLimit,// <=0 indicates default: no time limit set.
    BOOL bCacheResult,// TRUE indicates default.
    BOOL bIsAsynchronous,// FALSE indicates default.
    DWORD dwPageSize,// <=0 indicates default.
    DWORD dwPageTimeLimit,// <=0 indicates default.
    DWORD dwChaseReferral,// <=0 indicates default.
    LPOLESTR szSortKey,// NULL indicates do not sort.
    BOOL bIsDescending,
    BOOL bReturnAttributeNamesOnly,// FALSE indicates default.
    ADS_SEARCHPREF_INFO **ppSearchPref, // Return an array of search preferences.
    DWORD *pdwSearchPrefCount
)
{
   HRESULT hr = S_OK;
   DWORD dwCountPref = 0L;
 
   // Determine size of preferences array.
   DWORD dwTotal = 11L;
 
   if(dwScope==-1)
       dwTotal--;
   if(dwOverallTimeOut<=0)
       dwTotal--;
   if(dwOverallSizeLimit<=0)
       dwTotal--;
   if(dwOverallTimeLimit<=0)
       dwTotal--;
   if(bCacheResult)
       dwTotal--;
   if(!bIsAsynchronous)
       dwTotal--;
   if(dwPageSize<=0)
       dwTotal--;
   if(dwPageTimeLimit<=0)
       dwTotal--;
   if(dwChaseReferral<=0)
       dwTotal--;
   if(!bReturnAttributeNamesOnly)
       dwTotal--;
   if (!szSortKey)
       dwTotal--;
 
   ADS_SEARCHPREF_INFO *prefInfo = new ADS_SEARCHPREF_INFO[ dwTotal ];
   ADS_SORTKEY SortKey;

    if(!prefInfo)
    {
        return E_OUTOFMEMORY;
    }
 
    //////////////////
    // Search Scope
    //////////////////
    if(dwScope>=0)
    {
        prefInfo[dwCountPref].dwSearchPref =
                         ADS_SEARCHPREF_SEARCH_SCOPE;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;
        prefInfo[dwCountPref].vValue.Integer = dwScope;
        dwCountPref++;
    }
 
    //////////////////
    // Time Out
    //////////////////
    if(dwOverallTimeOut>0)
    {
       prefInfo[dwCountPref].dwSearchPref = ADS_SEARCHPREF_TIMEOUT;
       prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;
       prefInfo[dwCountPref].vValue.Integer = dwOverallTimeOut;
       dwCountPref++;
    }
 
    ///////////////
    // Size Limit
    ///////////////
    if(dwOverallSizeLimit>0)
    {
       prefInfo[dwCountPref].dwSearchPref = ADS_SEARCHPREF_SIZE_LIMIT;
       prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;
       prefInfo[dwCountPref].vValue.Integer = dwOverallSizeLimit;
       dwCountPref++;
    }
 
    ///////////////
    // Time Limit
    ///////////////
    if(dwOverallTimeLimit>0) 
    {
       prefInfo[dwCountPref].dwSearchPref = ADS_SEARCHPREF_TIME_LIMIT;
       prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;
       prefInfo[dwCountPref].vValue.Integer = dwOverallTimeLimit;
       dwCountPref++;
    }
 
    /////////////////
    // Cache Result
    /////////////////
 
    if (!bCacheResult)
    {
        prefInfo[dwCountPref].dwSearchPref =
                              ADS_SEARCHPREF_CACHE_RESULTS;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_BOOLEAN;
        prefInfo[dwCountPref].vValue.Boolean = bCacheResult;
        dwCountPref++;
    }
 
    //////////////
    // Page Size
    //////////////
    if(dwPageSize>0)
    {
        prefInfo[dwCountPref].dwSearchPref = ADS_SEARCHPREF_PAGESIZE;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;;
        prefInfo[dwCountPref].vValue.Integer = dwPageSize;
        dwCountPref++;
    }
 
    //////////////////
    // Page Time Limit
    //////////////////
    if(dwPageTimeLimit>0)
    {
        prefInfo[dwCountPref].dwSearchPref = 
                                      ADS_SEARCHPREF_PAGED_TIME_LIMIT;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;;
        prefInfo[dwCountPref].vValue.Integer = dwPageTimeLimit;
        dwCountPref++;
    }
 
    ///////////////////
    // Chase Referrals
    ///////////////////
    if(dwChaseReferral>0)
    {
        prefInfo[dwCountPref].dwSearchPref =
                                      ADS_SEARCHPREF_CHASE_REFERRALS;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_INTEGER;
        prefInfo[dwCountPref].vValue.Integer = dwChaseReferral;
        dwCountPref++;
    }
 
    /////////////
    // Sort
    /////////////
    if (szSortKey)
    {
        prefInfo[dwCountPref].dwSearchPref = ADS_SEARCHPREF_SORT_ON;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_PROV_SPECIFIC;
        SortKey.pszAttrType = (LPWSTR)LocalAlloc(
                        LPTR,
                        wcslen(szSortKey)*sizeof(WCHAR) +sizeof(WCHAR)
                        );
        wcscpy_s(SortKey.pszAttrType,szSortKey);
        SortKey.pszReserved = NULL;
        SortKey.fReverseorder = 0;
        prefInfo[dwCountPref].vValue.ProviderSpecific.dwLength = 
                                                 sizeof(ADS_SORTKEY);
        prefInfo[dwCountPref].vValue.ProviderSpecific.lpValue = 
                                                 (LPBYTE) &SortKey;
        dwCountPref++;
    }
    
    /////////////////
    // Asynchronous
    /////////////////
    if(bIsAsynchronous)
    {
        prefInfo[dwCountPref].dwSearchPref =
                                     ADS_SEARCHPREF_ASYNCHRONOUS;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_BOOLEAN;
        prefInfo[dwCountPref].vValue.Integer = bIsAsynchronous;
        dwCountPref++;
    }
 
    ////////////////////////
    // Attribute Type Only
    ////////////////////////
    if(bReturnAttributeNamesOnly)
    {
        prefInfo[dwCountPref].dwSearchPref =
                                  ADS_SEARCHPREF_ATTRIBTYPES_ONLY;
        prefInfo[dwCountPref].vValue.dwType = ADSTYPE_BOOLEAN;
        prefInfo[dwCountPref].vValue.Integer = 
                                  bReturnAttributeNamesOnly;
        dwCountPref++;
    }
 
    if (SUCCEEDED(hr))
    {
        *pdwSearchPrefCount = dwCountPref;
        *ppSearchPref  = prefInfo;
    }
    else
    {
        *pdwSearchPrefCount = 0L;
        *ppSearchPref  = NULL;
    }
 
 
    return hr;
}

要求

   
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
标头 iads.h

另请参阅

ADSI 枚举

ADSVALUE

ADS_CHASE_REFERRALS_ENUM

ADS_DEREFENUM

ADS_PROV_SPECIFIC

ADS_SCOPEENUM

ADS_SEARCHPREF_INFO

ADS_SORTKEY

ADS_VLV

IDirectorySearch::GetColumn

IDirectorySearch::GetNextRow

IDirectorySearch::SetSearchPreference

使用 DirSync 控件轮询更改

检索已删除的对象