使用 IDirectorySearch 和 IDirectoryObject 进行范围检索

IDirectoryObjectIDirectorySearch 接口可用于检索一系列属性值。 要执行此操作,请为查询中请求的某个属性指定属性和范围。

使用 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 确定范围的示例代码