次の方法で共有


範囲取得に IDirectorySearch および IDirectoryObject を使用する

IDirectoryObject または IDirectorySearch インターフェイスを使用して、プロパティ値の範囲を取得できます。 これを行うには、クエリで要求された属性の 1 つに属性と範囲を指定します。

IDirectoryObject を使用した範囲の取得

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 インターフェイスは、IDirectoryObject::GetObjectAttributes メソッドを呼び出すときに 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 インターフェイスを使用する場合、具体的に対処する必要がある問題が 1 つあります。 要求された範囲が残りの値の数を超えると、IDirectorySearch::GetColumnE_ADS_COLUMN_NOT_SET を返します。 残りの値を取得するには、範囲 wildcard '*' を使用する必要があります。 たとえば、グループに 150 のメンバーが含まれている場合、メンバー値 0~100 は、範囲取得を使用して通常取得できます。 範囲 101~200 が要求されると、IDirectorySearch::GetColumnE_ADS_COLUMN_NOT_SET を返します。 この問題は、IDirectorySearch::GetNextColumnName メソッドを使用することによって回避できます。 通常、GetNextColumnName は元のクエリ文字列を返します。 ただし、要求された範囲が残りの値の数を超えると、GetNextColumnName は、高い範囲の値を範囲 wildcard '*' に置き換えることで、クエリ文字列の変更されたバージョンを返します。 上の例では、最初のクエリは "member;range=0-100" という属性文字列で実行され、GetNextColumnName は "member;range=0-100" を返します。 2 番目のクエリでは、属性文字列は "member;range=101-200" になりますが、GetNextColumnName は "member;range=101-*" を返します。 このケースは、元の属性文字列を GetNextColumnName の結果と比較することで判断できます。 文字列が異なる場合は、値の最後のブロックを wildcard の範囲で再度要求する必要があります。

範囲取得に IDirectorySearch インターフェイスを使用する方法を示す詳細とコード例ついては、「IDirectorySearch を使用した範囲取得のコード例」を参照してください。