// vroots.h : Declaration of the CNntpVirtualRoot & CNntpVirtualRoots classes. #ifndef _VROOTS_INCLUDED_ #define _VROOTS_INCLUDED_ // // Dependencies: // #include "nntptype.h" #include "nntpapi.h" #include "metafact.h" class CMetabaseKey; // // A simple VRoot class: // class CVRoot { public: CVRoot (); CComBSTR m_strNewsgroupSubtree; CComBSTR m_strDirectory; DWORD m_dwWin32Error; DWORD m_bvAccess; DWORD m_bvSslAccess; BOOL m_fLogAccess; BOOL m_fIndexContent; CComBSTR m_strUNCUsername; CComBSTR m_strUNCPassword; CComBSTR m_strDriverProgId; CComBSTR m_strGroupPropFile; CComBSTR m_strMdbGuid; DWORD m_dwUseAccount; BOOL m_fDoExpire; BOOL m_fOwnModerator; HRESULT SetProperties ( INntpVirtualRoot * pVirtualRoot ); inline HRESULT SetProperties ( const CVRoot & VRoot ) { return SetProperties ( VRoot.m_strNewsgroupSubtree, VRoot.m_strDirectory, VRoot.m_dwWin32Error, VRoot.m_bvAccess, VRoot.m_bvSslAccess, VRoot.m_fLogAccess, VRoot.m_fIndexContent, VRoot.m_strUNCUsername, VRoot.m_strUNCPassword, VRoot.m_strDriverProgId, VRoot.m_strGroupPropFile, VRoot.m_dwUseAccount, VRoot.m_fDoExpire, VRoot.m_fOwnModerator, VRoot.m_strMdbGuid ); } HRESULT GetFromMetabase ( CMetabaseKey * pMB, LPCWSTR wszKey, DWORD dwInstanceId, LPWSTR wszVRootPath ); HRESULT SendToMetabase ( CMetabaseKey * pMB, LPCWSTR wszKey ); private: HRESULT SetProperties ( BSTR strNewsgroupSubtree, BSTR strDirectory, DWORD dwWin32Error, DWORD bvAccess, DWORD bvSslAccess, BOOL fLogAcccess, BOOL fIndexContent, BSTR strUNCUsername, BSTR strUNCPassword, BSTR strDriverProgId, BSTR strGroupPropFile, DWORD dwUseAccount, BOOL fDoExpire, BOOL fOwnModerator, BSTR strMdbGuid ); // Don't call this: const CVRoot & operator= ( const CVRoot & ); }; ///////////////////////////////////////////////////////////////////////////// // The VRoot Object class CNntpVirtualRoot : public CComDualImpl, public ISupportErrorInfo, public CComObjectRoot, public CComCoClass { friend class CNntpVirtualRoots; friend class CNntpVirtualServer; public: CNntpVirtualRoot(); virtual ~CNntpVirtualRoot (); BEGIN_COM_MAP(CNntpVirtualRoot) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(INntpVirtualRoot) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() //DECLARE_NOT_AGGREGATABLE(CNntpVirtualRoot) // Remove the comment from the line above if you don't want your object to // support aggregation. The default is to support it // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); DECLARE_REGISTRY(CNntpVirtualRoot, _T("Nntpadm.VirtualRoot.1"), _T("Nntpadm.VirtualRoot"), IDS_NNTPVIRTUALROOT_DESC, THREADFLAGS_BOTH) // INntpVirtualRoot public: ////////////////////////////////////////////////////////////////////// // Properties: ////////////////////////////////////////////////////////////////////// STDMETHODIMP get_NewsgroupSubtree ( BSTR * pstrNewsgroupSubtree ); STDMETHODIMP put_NewsgroupSubtree ( BSTR strNewsgroupSubtree ); STDMETHODIMP get_Directory ( BSTR * pstrDirectory ); STDMETHODIMP put_Directory ( BSTR strDirectory ); STDMETHODIMP get_Win32Error ( long * plWin32Error ); STDMETHODIMP get_AllowPosting ( BOOL * pfAllowPosting ); STDMETHODIMP put_AllowPosting ( BOOL fAllowPosting ); STDMETHODIMP get_RestrictGroupVisibility ( BOOL * pfRestrictGroupVisibility ); STDMETHODIMP put_RestrictGroupVisibility ( BOOL fRestrictGroupVisibility ); STDMETHODIMP get_LogAccess ( BOOL * pfLogAccess ); STDMETHODIMP put_LogAccess ( BOOL fLogAccess ); STDMETHODIMP get_IndexContent ( BOOL * pfIndexContent ); STDMETHODIMP put_IndexContent ( BOOL fIndexContent ); STDMETHODIMP get_RequireSsl ( BOOL * pfRequireSsl ); STDMETHODIMP put_RequireSsl ( BOOL fRequireSsl ); STDMETHODIMP get_Require128BitSsl ( BOOL * pfRequire128BitSsl ); STDMETHODIMP put_Require128BitSsl ( BOOL fRequire128BitSsl ); STDMETHODIMP get_UNCUsername ( BSTR * pstrUNCUsername ); STDMETHODIMP put_UNCUsername ( BSTR strUNCUsername ); STDMETHODIMP get_UNCPassword ( BSTR * pstrUNCPassword ); STDMETHODIMP put_UNCPassword ( BSTR strUNCPassword ); STDMETHODIMP get_DriverProgId( BSTR *pstrDriverProgId ); STDMETHODIMP put_DriverProgId( BSTR strDriverProgId ); STDMETHODIMP get_GroupPropFile( BSTR *pstrGRoupPropFile ); STDMETHODIMP put_GroupPropFile( BSTR strGroupPropFile ); STDMETHODIMP get_MdbGuid( BSTR *pstrMdbGuid ); STDMETHODIMP put_MdbGuid( BSTR strMdbGuid ); STDMETHODIMP get_UseAccount( DWORD *pdwUseAccount ); STDMETHODIMP put_UseAccount( DWORD dwUseAccount ); STDMETHODIMP get_OwnExpire( BOOL *fOwnExpire ); STDMETHODIMP put_OwnExpire( BOOL fOwnExpire ); STDMETHODIMP get_OwnModerator( BOOL *fOwnModerator ); STDMETHODIMP put_OwnModerator( BOOL fOwnModerator ); ////////////////////////////////////////////////////////////////////// // Data: ////////////////////////////////////////////////////////////////////// private: /* inline HRESULT SetProperties ( BSTR strNewsgroupSubtree, BSTR strDirectory ) { return m_vroot.SetProperties ( strNewsgroupSubtree, strDirectory ); } */ inline HRESULT SetProperties ( const CVRoot & VRoot ) { return m_vroot.SetProperties ( VRoot ); } // Property variables: CVRoot m_vroot; }; ///////////////////////////////////////////////////////////////////////////// // The VRoots Object typedef HRESULT (* VROOT_ITERATOR) ( CMetabaseKey * pMB, LPCWSTR wszPath, LPARAM lParam ); class CNntpVirtualRoots : public CComDualImpl, public ISupportErrorInfo, public CComObjectRoot { friend class CNntpVirtualRoot; friend class CNntpVirtualServer; public: CNntpVirtualRoots(); virtual ~CNntpVirtualRoots (); BEGIN_COM_MAP(CNntpVirtualRoots) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(INntpVirtualRoots) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() //DECLARE_NOT_AGGREGATABLE(CNntpVirtualRoots) // Remove the comment from the line above if you don't want your object to // support aggregation. The default is to support it // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // INntpVirtualRoots public: ////////////////////////////////////////////////////////////////////// // Properties: ////////////////////////////////////////////////////////////////////// STDMETHODIMP get_Server ( BSTR * pstrServer ); STDMETHODIMP put_Server ( BSTR strServer ); STDMETHODIMP get_ServiceInstance ( long * plServiceInstance ); STDMETHODIMP put_ServiceInstance ( long lServiceInstance ); STDMETHODIMP get_Count ( long * pdwCount ); ////////////////////////////////////////////////////////////////////// // Methods: ////////////////////////////////////////////////////////////////////// STDMETHODIMP Enumerate ( ); STDMETHODIMP Item ( long index, INntpVirtualRoot ** ppVRoot ); STDMETHODIMP ItemDispatch ( long index, IDispatch ** ppVRoot ); STDMETHODIMP Add ( INntpVirtualRoot * pVRoot ); STDMETHODIMP AddDispatch ( IDispatch * pVRoot ); STDMETHODIMP Set ( long index, INntpVirtualRoot * pVRoot ); STDMETHODIMP SetDispatch ( long index, IDispatch * pVRoot ); STDMETHODIMP Remove ( long index ); STDMETHODIMP Find ( BSTR strNewsgroupSubtree, long * pIndex ); private: HRESULT Init ( BSTR strServer, DWORD dwServiceInstance ); ////////////////////////////////////////////////////////////////////// // Data: ////////////////////////////////////////////////////////////////////// private: // Property variables: long m_dwCount; CVRoot * m_rgVRoots; // Which service are we talking to: CComBSTR m_strServer; DWORD m_dwServiceInstance; // Metabase values: CMetabaseFactory m_mbFactory; HRESULT GetVRootsFromMetabase ( IMSAdminBase * pMetabase ); static HRESULT IterateOverVroots ( CMetabaseKey * pMB, VROOT_ITERATOR fpIterator, LPARAM lParam, LPCWSTR wszPath = _T("") ); void GetMDVRootPath ( LPWSTR wszPath ); void GetVRootName ( LPWSTR wszDisplayName, LPWSTR wszPathName ); }; #endif // _VROOTS_INCLUDED_