Directory Services |
The following C++ code example contains a function that uses ranging to retrieve the members of a group using the IDirectoryObject interface.
//*************************************************************************** // // 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 { wsprintfW(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; }