共用方式為


使用 IDirectorySearch 和 IDirectoryObject 進行範圍擷取

IDirectoryObjectIDirectorySearch 介面可用來擷取屬性值的範圍。 若要這樣做,請為查詢中要求的其中一個屬性指定屬性和範圍。

使用 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 進行範圍擷取的範例程式代碼。