/*++

Copyright (c) 1995  Microsoft Corporation

Module Name:

    cfshare.hxx

Abstract:
 Contains definitions for

 CFPNWFSFileShareGeneralInfo,
 CFPNWFSFileShareBindingInfo and
 CFPNWFileShare


Author:

    Ram Viswanathan (ramv) 02/15/96

Revision History:

--*/

class CFPNWFSFileShareGeneralInfo;
class CPropertyCache;

class CFPNWFileShare: INHERIT_TRACKING,
                       public ISupportErrorInfo, 
                       public IADsFileShare,
                       public IADsPropertyList,
                       public CCoreADsObject,
                       public INonDelegatingUnknown,
                       public IADsExtension
{

friend class CFPNWFSFileShareGeneralInfo;

public:
    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ;

    STDMETHODIMP_(ULONG) AddRef(void);

    STDMETHODIMP_(ULONG) Release(void);

    // INonDelegatingUnknown methods

    STDMETHOD(NonDelegatingQueryInterface)(THIS_
        const IID&,
        void **
        );

    DECLARE_NON_DELEGATING_REFCOUNTING

    DECLARE_IDispatch_METHODS;

    DECLARE_ISupportErrorInfo_METHODS;

    DECLARE_IADs_METHODS;

    DECLARE_IADsFileShare_METHODS;

    DECLARE_IADsPropertyList_METHODS;

    DECLARE_IADsExtension_METHODS

    //
    // constructor and destructor
    //

    CFPNWFileShare::CFPNWFileShare();

    CFPNWFileShare::~CFPNWFileShare();

    static HRESULT Create(LPTSTR pszADsParent,
                          LPTSTR pszServerName,
                          LPTSTR pszServiceName,
                          LPTSTR pszShareName,
                          DWORD  dwObject,
                          REFIID riid,
                          CWinNTCredentials& Credentials,
                          LPVOID * ppvoid
                          );

    static HRESULT AllocateFileShareObject(LPTSTR pszADsParent,
                                           LPTSTR pszServerName,
                                           LPTSTR pszServiceName,
                                           LPTSTR pszShareName,
                                           CFPNWFileShare ** ppFileShare
                                           );


    STDMETHOD(GetInfo)(THIS_ DWORD dwApiLevel, BOOL fExplicit);

    STDMETHOD(ImplicitGetInfo)(void);

   //
   // helper functions
   //


   HRESULT MarshallAndSet(PNWVOLUMEINFO pVolumeInfo);

protected:

    //
    // helper functions
    //

    HRESULT FPNWAddFileShare(void);

    CFPNWFSFileShareGeneralInfo  *_pGenInfo;
    CAggregatorDispMgr  * _pDispMgr;
    CADsExtMgr FAR * _pExtMgr;
    LPWSTR            _pszShareName;
    LPWSTR            _pszServerName;
    CPropertyCache * _pPropertyCache;
    CWinNTCredentials _Credentials;
};


//
// helper function to delete a file share given the ObjectInfo structure
//

HRESULT
FPNWDeleteFileShare(POBJECTINFO pObjectInfo);