Синхронные и асинхронные поиски с IDirectorySearch
При выполнении поиска с помощью интерфейса IDirectorySearch метод IDirectorySearch::ExecuteSearch не отправляет запрос поиска на сервер. Этот метод сохраняет только параметры поиска. Запрос на поиск фактически отправляется при вызове IDirectorySearch::GetFirstRow или IDirectorySearch::GetNextRow.
Для поиска Active Directory основное различие между синхронным и асинхронным — при возврате первой строки результата, то есть при первом вызове GetFirstRow или GetNextRow.
В синхронном поиске, если разбиение по страницам не включено, первая строка возвращается при создании и возврате всего результированного набора клиенту. Если разбиение по страницам включено, первая строка возвращается при возврате первой страницы результирующий набор.
В асинхронном поиске, если разбиение по страницам не включено, первая строка возвращается, когда сервер создал первую строку результирующий набор. Если разбиение по страницам включено, первая строка возвращается при возврате первой страницы результирующий набор.
Тип поиска по умолчанию синхронный. Чтобы указать асинхронный поиск, задайте параметр поиска ADS_SEARCHPREF_ASYNCHRONOUS со значением ADSTYPE_BOOLEAN TRUE в массиве ADS_SEARCHPREF_INFO, переданном методу IDirectorySearch::SetSearchPreference. Эта операция показана в следующем примере кода.
ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_ASYNCHRONOUS;
SearchPref.vValue.dwType = ADSTYPE_BOOLEAN;
SearchPref.vValue.Boolean = TRUE;