Classificando os resultados da pesquisa com IDirectorySearch

Por padrão, os resultados de uma pesquisa são retornados sem ordem garantida. A preferência ADS_SEARCHPREF_SORT_ON instrui o servidor a classificar o conjunto de resultados em um valor de atributo especificado antes que ele seja retornado ao cliente.

Recomenda-se que os atributos indexados sejam usados para classificação. Caso contrário, o servidor deve recuperar o conjunto de resultados completo e classificá-lo antes de enviar qualquer resultado para o cliente. Isso também se aplica a pesquisas paginadas. Lembre-se de que o desempenho de uma pesquisa classificada será aumentado se o filtro incluir um atributo indexado e esse atributo for especificado como a chave de classificação; nesse caso, o Active Directory pode satisfazer a classificação durante o processamento do filtro. Por exemplo, uma consulta de classificação eficiente para um conjunto de usuários poderia ter um filtro que incluísse (sn smith) e uma chave de classificação de sn>.

A classificação do lado do servidor com a opção de pesquisa ADS_SEARCHPREF_SORT_ON reduzirá o desempenho do servidor. Se você estiver executando muitas pesquisas, considere classificar os resultados manualmente no lado do cliente para reduzir a carga de trabalho no servidor.

Por padrão, a classificação de resultados está desabilitada. Para habilitar a classificação de resultados, defina uma opção de pesquisa ADS_SEARCHPREF_SORT_ON com um ADSTYPE_PROV_SPECIFIC que aponte para uma estrutura ADS_SORTKEY na matriz ADS_SEARCHPREF_INFO passada para o método IDirectorySearch::SetSearchPreference . A estrutura ADS_SORTKEY é usada para especificar o atributo a ser classificado e a ordem da classificação.

O exemplo de código a seguir mostra como habilitar a classificação de resultados.

ADS_SORTKEY SortKey;
SortKey.pszAttrType = L"cn";
SortKey.pszReserved = NULL;
SortKey.fReverseorder = FALSE;

ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_SORT_ON;
SearchPref.vValue.dwType = ADSTYPE_PROV_SPECIFIC;
SearchPref.vValue.ProviderSpecific.dwLength = sizeof(SortKey);
SearchPref.vValue.ProviderSpecific.lpValue = (LPBYTE)&SortKey;

O Active Directory não oferece suporte à classificação em atributos construídos, portanto, não é possível especificar um atributo construído para classificação. O atributo distinguishedName também não pode ser usado para classificação. O Active Directory também não permite a classificação em mais de um atributo, portanto, a opção de pesquisa ADS_SEARCHPREF_SORT_ON só pode conter uma estrutura ADS_SORTKEY.