class FAR CNDSNamespaceEnum : public CNDSEnumVariant
{
public:

    // IEnumVARIANT methods
    STDMETHOD(Next)(ULONG cElements,
                    VARIANT FAR* pvar,
                    ULONG FAR* pcElementFetched);

    static
    HRESULT
    Create(
        CNDSNamespaceEnum FAR* FAR*,
        VARIANT var,
        CCredentials& Credentials
        );

    CNDSNamespaceEnum();
    ~CNDSNamespaceEnum();

    HRESULT
    PrepBuffer();

    HRESULT
    FetchNextObject(
        IDispatch ** ppDispatch
        );

    HRESULT
    FetchObjects(
        ULONG cElements,
        VARIANT FAR* pvar,
        ULONG FAR* pcElementFetched
        );

    HRESULT
    CNDSNamespaceEnum::EnumObjects(
        ULONG cElements,
        VARIANT FAR* pvar,
        ULONG FAR* pcElementFetched
        );

    HRESULT
    CNDSNamespaceEnum::EnumObjects(
        DWORD ObjectType,
        ULONG cElements,
        VARIANT FAR * pvar,
        ULONG FAR * pcElementFetched
        );


private:

    ObjectTypeList FAR *_pObjList;

    DWORD _dwEntriesRead;
    DWORD _dwCurrentEntry;
    HANDLE _hEnum;
    LPVOID _pBuffer;
    LPVOID _pBufferEnd;


    CCredentials _Credentials;
};