IDirectoryObjectを使用した範囲指定のコード例
次のコード例では、IDirectoryObjectインターフェイスを使用して、範囲を使用してグループのメンバーを取得します。
//***************************************************************************
//
// EnumGroupWithIDirectoryObject()
//
//***************************************************************************
HRESULT EnumGroupWithIDirectoryObject(LPCWSTR pwszGroupDN,
LPCWSTR pwszUsername,
LPCWSTR pwszPassword)
{
if(NULL == pwszGroupDN)
{
return E_POINTER;
}
HRESULT hr;
IDirectoryObject *pdo;
hr = ADsOpenObject( pwszGroupDN,
pwszUsername,
pwszPassword,
ADS_SECURE_AUTHENTICATION,
IID_IDirectoryObject,
(void**)&pdo);
if(SUCCEEDED(hr))
{
PADS_ATTR_INFO pAttrInfo;
const DWORD dwStep = 1000;
DWORD dwLowRange;
DWORD dwHighRange;
DWORD dwRetrieved;
WCHAR wszAttr[MAX_PATH];
LPWSTR rgAttrs[1];
rgAttrs[0] = wszAttr;
dwLowRange = 0;
dwHighRange = dwLowRange + (dwStep - 1);
do
{
swprintf_s(wszAttr, L"member;range=%d-%d", dwLowRange, dwHighRange);
hr = pdo->GetObjectAttributes(rgAttrs, 1, &pAttrInfo, &dwRetrieved);
if(SUCCEEDED(hr))
{
DWORD i;
for(i = 0; i < dwRetrieved; i++)
{
DWORD x;
for(x = 0; x < pAttrInfo[i].dwNumValues; x++)
{
wprintf(L"%s\n", pAttrInfo[i].pADsValues[x].CaseIgnoreString);
}
}
FreeADsMem(pAttrInfo);
dwLowRange = dwHighRange + 1;
dwHighRange = dwLowRange + (dwStep - 1);
}
if(0 == dwRetrieved)
{
break;
}
}while(SUCCEEDED(hr));
pdo->Release();
}
return hr;
}