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

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

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

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

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

默认搜索类型是同步的。 若要指定异步搜索,请在传递给 IDirectorySearch::SetSearchPreference 方法的 ADS_SEARCHPREF_INFO 数组中,使用 ADSTYPE_BOOLEANTRUE 值设置 ADS_SEARCHPREF_ASYNCHRONOUS 搜索选项。 下面的代码示例显示了此作。

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