Platform SDK: Active Directory, ADSI, and Directory Services |
The IADsCollection::get__NewEnum method gets a dependent enumerator object that implements IEnumVARIANT for this ADSI collection object. Notice that there are two underscore characters in the function name (get__NewEnum).
HRESULT IADsCollection::get__NewEnum( IUnknown ** ppEnumerator );
This method supports the standard return values including S_OK, E_FAIL, or E_NOTIMPL. For other return values, see ADSI Error Codes.
When a server supports paged search and the client has specified the page limit greater than the maximum search results allowed on the server, the IADsCollection::get__NewEnum method returns errors in the following ways:
In Visual Basic®, the For Each …In … Next statement invokes this method implicitly. For example,
Dim fso as IADsFileServiceOperations Set fso = GetObject("WinNT://myComputer/LanmanServer") Dim coll as IADsCollection Set coll = fso.Sessions ' The following statement invokes IADsCollection::get__NewEnum. For Each session In coll MsgBox "Session name: " & session.Name Next session
The following C++ code snippet shows how IADsColection::get__NewEnum is used to enumerate active file service sessions.
HRESULT EnumCollection(IADsCollection *); HRESULT GetACollectionOfSessions() { LPWSTR adspath = L"WinNT://myComputer/LanmanServer"; HRESULT hr; IADsCollection *pColl; // bind to file service operations IADsFileServiceOperations *pFso; hr = ADsGetObject(adspath, IID_IADsFileServiceOperations, (void**)&pFso); if(FAILED(hr)) return hr; // get the pointer to the collection hr = pFso->Sessions(&pColl); if(FAILED(hr)) return hr; pFso->Release(); hr = EnumCollection(pColl); if(pColl) pColl->Release(); return hr; } HRESULT EnumCollectioin(IADsCollection *pColl) { IUnknown *pUnk=NULL; HRESULT hr; // get the Enumerator object on the collection object. hr = pColl->get__NewEnum(&pUnk); if (FAILED(hr) ) return hr; pColl->Release(); IEnumVARIANT *pEnum; hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum); if (FAILED(hr)) return hr; pUnk->Release(); // Now Enumerate the collection BSTR bstr; VARIANT var; IADs *pADs; ULONG lFetch; IDispatch *pDisp; VariantInit(&var); hr = pEnum->Next(1, &var, &lFetch); while(hr == S_OK) { if (lFetch == 1) { pDisp = V_DISPATCH(&var); pDisp->QueryInterface(IID_IADs, (void**)&pADs); pADs->get_Name(&bstr); printf("Session name: %S\n",bstr); SysFreeString(bstr); pADs->Release(); } VariantClear(&var); pDisp=NULL; hr = pEnum->Next(1, &var, &lFetch); }; hr = pEnum->Release(); return S_OK; }
Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with DSClient).
Windows 95/98: Requires Windows 95 or later (with DSClient).
Header: Declared in Iads.h.