Använda IDirectorySearch och IDirectoryObject för intervallhämtning
Gränssnitten IDirectoryObject eller IDirectorySearch kan användas för att hämta ett intervall med egenskapsvärden. Det gör du genom att ange attributet och intervallet för ett av de attribut som begärs i frågan.
Intervallhämtning med IDirectoryObject
Gränssnittet IDirectoryObject kan användas för intervallhämtning genom att ange attributet och intervallet för ett av attributen i matrisen pAttributesName när du anropar IDirectoryObject::GetObjectAttributes-metoden.
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);
Mer information och ett kodexempel som visar hur du använder gränssnittet IDirectoryObject för att hämta intervall finns i Exempelkod för intervallhämtning med IDirectoryObject.
Intervallhämtning med IDirectorySearch
Gränssnittet IDirectorySearch kan användas för intervallhämtning genom att ange attributet och intervallet för ett av de hämtade attributen i matrisen pAttributesName när du anropar metoden 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);
När du använder IDirectorySearch-gränssnittet för intervallhämtning, finns det ett problem som måste åtgärdas specifikt. När det begärda intervallet överskrider antalet återstående värden returnerar IDirectorySearch::GetColumnE_ADS_COLUMN_NOT_SET. Om du vill hämta de återstående värdena måste du använda intervallets jokertecken *. Om en grupp till exempel innehåller 150 medlemmar kan medlemsvärdena 0–100 hämtas normalt med intervallbaserad hämtning. Om intervallet 101–200 sedan begärs returnerar IDirectorySearch::GetColumnE_ADS_COLUMN_NOT_SET. Det här problemet kan undvikas med hjälp av metoden IDirectorySearch::GetNextColumnName. Normalt returnerar GetNextColumnName den ursprungliga frågesträngen. Men när det begärda intervallet överskrider antalet återstående värden returnerar GetNextColumnName en modifierad version av frågesträngen genom att ersätta värdet för högt intervall med intervallets jokertecken *. I exemplet ovan utförs den första frågan med attributsträngen "member; range=0-100" och GetNextColumnName returnerar "member; range=0-100". I den andra frågan skulle attributsträngen vara "member; range=101-200", men GetNextColumnName returnerar "member; range=101-*". Det här fallet kan fastställas genom att jämföra den ursprungliga attributsträngen med resultatet av GetNextColumnName. Om strängarna skiljer sig bör det sista blocket med värden begäras igen med intervallets jokertecken.
Mer information och ett kodexempel som visar hur du använder gränssnittet IDirectorySearch för intervallhämtning finns i Exempelkod för Intervall med IDirectorySearch.