使用 IDirectorySearch 和 IDirectoryObject 进行范围检索
IDirectoryObject 或 IDirectorySearch 接口可用于检索一系列属性值。 要执行此操作,请为查询中请求的某个属性指定属性和范围。
使用 IDirectoryObject 进行范围检索
当调用 IDirectoryObject::GetObjectAttributes 方法时,IDirectoryObject 接口可以通过指定 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 接口进行范围检索的代码示例,请参阅使用 IDirectory Object 确定范围的示例代码。
使用 IDirectorySearch 进行范围检索
当调用 IDirectorySearch::ExecuteSearch 方法时,IDirectorySearch 接口可以通过指定 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 确定范围的示例代码。