Uso de IDirectorySearch e IDirectoryObject para la recuperación de rangos
Las interfaces IDirectoryObject o IDirectorySearch se pueden usar para recuperar un intervalo de valores de propiedad. Para ello, especifique el atributo y el intervalo de uno de los atributos solicitados en la consulta.
Recuperación de intervalos con IDirectoryObject
La interfaz IDirectoryObject se puede usar para la recuperación de intervalos especificando el atributo y el intervalo de uno de los atributos de la matriz pAttributesName al llamar al 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 obtener más información y un ejemplo de código que muestra cómo usar la interfaz IDirectoryObject para la recuperación de rangos, vea Código de ejemplo para Range with IDirectoryObject.
Recuperación de intervalos con IDirectorySearch
La interfaz IDirectorySearch se puede usar para la recuperación de intervalos especificando el atributo y el intervalo de uno de los atributos recuperados en la matriz pAttributesName al llamar al 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);
Al usar la interfaz IDirectorySearch para la recuperación de rangos, hay un problema que debe solucionarse específicamente. Cuando el intervalo solicitado supera el número de valores restantes, IDirectorySearch::GetColumn devolverá E_ADS_COLUMN_NOT_SET. Para recuperar los valores restantes, es necesario usar el carácter comodín de intervalo '*'. Por ejemplo, si un grupo contiene 150 miembros, los valores de miembro 0-100 se pueden recuperar normalmente mediante la recuperación de intervalos. Si se solicita el intervalo 101-200, IDirectorySearch::GetColumn devolverá E_ADS_COLUMN_NOT_SET. Este problema se puede evitar mediante el método IDirectorySearch::GetNextColumnName . Normalmente, GetNextColumnName devolverá la cadena de consulta original. Sin embargo, cuando el intervalo solicitado supera el número de valores restantes, GetNextColumnName devolverá una versión modificada de la cadena de consulta reemplazando el valor de rango alto por el carácter comodín de rango '*'. En el ejemplo anterior, la primera consulta se realizaría con una cadena de atributo de "member;range=0-100" y GetNextColumnName devolverá "member;range=0-100". En la segunda consulta, la cadena de atributo sería "member;range=101-200", pero GetNextColumnName devolverá "member;range=101-*". Este caso se puede determinar comparando la cadena de atributo original con el resultado de GetNextColumnName. Si las cadenas son diferentes, se debe solicitar de nuevo el último bloque de valores con el carácter comodín del intervalo.
Para obtener más información y un ejemplo de código que muestra cómo usar la interfaz IDirectorySearch para la recuperación de rangos, vea Código de ejemplo para Range with IDirectorySearch.