使用 IDirectorySearch 进行同步与异步搜索

使用 IDirectorySearch 接口执行搜索时,IDirectorySearch::ExecuteSearch 方法不会将搜索请求发送到服务器。 此方法仅保存搜索参数。 调用 IDirectorySearch::GetFirstRowIDirectorySearch::GetNextRow 时,实际上会发送搜索请求。

对于 Active Directory 搜索,同步和异步之间的主要区别在于返回结果的第一行,即第一个 GetFirstRowGetNextRow 调用返回的时间。

在同步搜索中,如果未启用分页,则当服务器构建并将整个结果集返回给客户端时,将返回第一行。 如果启用了分页,则在返回结果集的第一页时返回第一行。

在异步搜索中,如果未启用分页,则当服务器构建了结果集的第一行时,将返回第一行。 如果启用了分页,则在返回结果集的第一页时返回第一行。

默认搜索类型为同步搜索。 要指定异步搜索,请在传递给 IDirectorySearch::SetSearchPreference 方法的 ADS_SEARCHPREF_INFO 数组中,设置 ADS_SEARCHPREF_ASYNCHRONOUS 搜索选项,其中 ADSTYPE_BOOLEAN 值为 TRUE。 下面的代码示例对此操作进行了演示。

ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_ASYNCHRONOUS;
SearchPref.vValue.dwType = ADSTYPE_BOOLEAN;
SearchPref.vValue.Boolean = TRUE;