Compartilhar via


Usando IDirectorySearch e IDirectoryObject para recuperação de intervalo

As interfaces IDirectoryObject ou IDirectorySearch podem ser usadas para recuperar um intervalo de valores de propriedade. Para fazer isso, especifique o atributo e o intervalo para um dos atributos solicitados na consulta.

Recuperação de intervalo com IDirectoryObject

A interface IDirectoryObject pode ser usada para recuperação de intervalo especificando o atributo e o intervalo para um dos atributos na matriz pAttributesName ao chamar o método IDirectoryObject::GetObjectAttributes.

PADS_ATTR_INFO pAttrInfo;
DWORD dwRetrieved;
LPWSTR pszAttrs[2];
 
pszAttrs[0] = L"Name";
pszAttrs[1] = L"member;range=0-100";

hr = pdo->GetObjectAttributes(pszAttrs, 2, &pAttrInfo, &dwRetrieved);

Para obter mais informações e um exemplo de código que mostra como usar a interface IDirectoryObject para recuperação de intervalo, consulte Código de exemplo para intervalo com IDirectoryObject.

Recuperação de intervalo com IDirectorySearch

A interface IDirectorySearch pode ser usada para recuperação de intervalo especificando o atributo e o intervalo para um dos atributos recuperados na matriz pAttributesName ao chamar o método IDirectorySearch::ExecuteSearch.

ADS_SEARCH_HANDLE hSearch;
LPWSTR pszAttrs[2];
 
pszAttrs[0] = L"Name";
pszAttrs[1] = L"member;range=0-100";

hr = pdo->ExecuteSearch(L"(objectClass=user)", pszAttrs, 2, &hSearch);

Ao usar a interface IDirectorySearch para recuperação de intervalo, há um problema que deve ser resolvido especificamente. Quando o intervalo solicitado exceder o número de valores restantes, IDirectorySearch::GetColumn retornará E_ADS_COLUMN_NOT_SET. Para recuperar os valores restantes, é necessário usar o curinga do intervalo '*'. Por exemplo, se um grupo contiver 150 membros, os valores de membro de 0 a 100 poderão ser recuperados normalmente usando a recuperação variada. Se o intervalo 101-200 for solicitado, IDirectorySearch::GetColumn retornará E_ADS_COLUMN_NOT_SET. Esse problema pode ser evitado usando o IDirectorySearch::GetNextColumnName método. Normalmente, GetNextColumnName retornará a cadeia de caracteres de consulta original. No entanto, quando o intervalo solicitado exceder o número de valores restantes, GetNextColumnName retornará uma versão modificada da cadeia de caracteres de consulta substituindo o valor de intervalo alto pelo curinga de intervalo '*'. No exemplo acima, a primeira consulta seria executada com uma cadeia de caracteres de atributo "member; range=0-100" e GetNextColumnName retornará "member; intervalo=0-100". Na segunda consulta, a cadeia de caracteres de atributo seria "member; range=101-200", mas GetNextColumnName retornará "member; intervalo=101-*". Esse caso pode ser determinado comparando a cadeia de caracteres do atributo original com o resultado de GetNextColumnName. Se as cadeias de caracteres forem diferentes, o último bloco de valores deverá ser solicitado novamente com o curinga do intervalo.

Para obter mais informações e um exemplo de código que mostra como usar a interface IDirectorySearch para recuperação de intervalo, consulte Código de exemplo para intervalo com IDirectorySearch.