使用 IDirectorySearch 和 IDirectoryObject 進行範圍擷取
IDirectoryObject 或 IDirectorySearch 介面可用來擷取屬性值的範圍。 若要這樣做,請為查詢中要求的其中一個屬性指定屬性和範圍。
使用 IDirectoryObject 擷取範圍
呼叫 IDirectoryObject::GetObjectAttributes 方法時,可以指定 pAttributesName 陣列中其中一個屬性的屬性和範圍,以用於範圍擷取。
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);
如需詳細資訊和示範如何使用 IDirectoryObject 介面進行範圍擷取的程式代碼範例,請參閱使用 IDirectoryObject 進行範圍擷取的範例程序代碼。
使用 IDirectorySearch 擷取範圍
呼叫 IDirectorySearch::ExecuteSearch 方法時,可以指定 pAttributesName 陣列中其中一個擷取屬性和範圍,以用於範圍擷取。
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);
使用 IDirectorySearch 介面進行範圍擷取時,必須特別解決一個問題。 當要求的範圍超過剩餘值的數目時,IDirectorySearch::GetColumn 會傳回E_ADS_COLUMN_NOT_SET。 若要擷取其餘的值,必須使用範圍通配符 『*』。 例如,如果群組包含 150 個成員,則可以使用範圍擷取通常擷取 0-100 的成員值。 如果接著要求範圍 101-200,IDirectorySearch ::GetColumn 會傳回 E_ADS_COLUMN_NOT_SET。 您可以使用 IDirectorySearch::GetNextColumnName 方法來避免此問題。 一般而言, GetNextColumnName 會傳回原始查詢字串。 不過,當要求的範圍超過剩餘值的數目時, GetNextColumnName 會傳回查詢字串的修改版本,方法是將高範圍值取代為範圍通配符 『*』。 在上述範例中,第一個查詢會以 「member」 屬性字串執行;range=0-100“ 和 GetNextColumnName 會傳回 ”member;range=0-100”。 在第二個查詢中,屬性字串會是 「member;range=101-200“,但 GetNextColumnName 會傳回 ”member;range=101-*”。 此案例可藉由比較原始屬性字串與 GetNextColumnName 的結果來判斷。 如果字串不同,則應該使用範圍通配符再次要求最後一個值區塊。
如需詳細資訊和示範如何使用 IDirectorySearch 介面進行範圍擷取的程式碼範例,請參閱使用 IDirectorySearch 進行範圍擷取的範例程式代碼。