//*************************************************************************** // // File: // // Module: MS SNMP Provider // // Purpose: // // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // //*************************************************************************** #ifndef _CSMIR_H_ #define _CSMIR_H_ class CSmir; class CSmirConnObject; #include "smir.h" #include "csmirdef.h" #include "thread.h" #include "cthread.h" #include "smirevt.h" class CSmirWbemConfiguration ; class CSmirAdministrator; class CGroupToClassAssociator; class CModuleToClassAssociator; class CXToClassAssociator; class CSMIRToClassAssociator; class CSmirNotificationClassHandle; class CSmirExtNotificationClassHandle; class CSmirSerialiseHandle : public ISmirSerialiseHandle { private: friend CSmirAdministrator; friend CSmirGroupHandle; friend CSmirModuleHandle; friend CSmirClassHandle; friend CSmirNotificationClassHandle; friend CSmirExtNotificationClassHandle; CString m_serialiseString; LONG m_cRef; BOOL m_bMOFPragmas; BOOL m_bMOFAssociations; public: //IUnknown members STDMETHODIMP QueryInterface(IN REFIID, OUT PPVOID); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); STDMETHODIMP GetText (OUT BSTR *); CSmirSerialiseHandle(BOOL bClassDefinitionsOnly); virtual ~CSmirSerialiseHandle(){} private: //private copy constructors to prevent bcopy CSmirSerialiseHandle(CSmirSerialiseHandle&); const CSmirSerialiseHandle& operator=(CSmirSerialiseHandle &); BOOL ReturnMOFPragmas(){return m_bMOFPragmas;}; BOOL ReturnMOFAssociations(){return m_bMOFAssociations;}; }; class CSmirInterrogator : public ISmirInterrogator { private: LONG m_cRef; CSmir *m_pSmir; #ifdef IMPLEMENTED_AS_SEPERATE_PROCESS CMutex criticalSection(FALSE,SMIR_CSMIR_INTERROGATOR_MUTEX) ; #else CCriticalSection criticalSection ; #endif public: CSmirInterrogator () ; //IUnknown members STDMETHODIMP QueryInterface(IN REFIID, OUT PPVOID); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // interrogative interface STDMETHODIMP EnumModules (OUT IEnumModule **ppEnumSmirMod); STDMETHODIMP EnumGroups (OUT IEnumGroup **ppEnumSmirGroup, IN ISmirModHandle *hModule); STDMETHODIMP EnumAllClasses (OUT IEnumClass **ppEnumSmirclass); STDMETHODIMP EnumClassesInGroup (OUT IEnumClass **ppEnumSmirclass, IN ISmirGroupHandle *hGroup); STDMETHODIMP EnumClassesInModule (OUT IEnumClass **ppEnumSmirclass, IN ISmirModHandle *hModule); STDMETHODIMP GetWBEMClass (OUT IWbemClassObject **pObj, IN BSTR pszClassName); STDMETHODIMP EnumAllNotificationClasses(IEnumNotificationClass **ppEnumSmirclass); STDMETHODIMP EnumAllExtNotificationClasses(IEnumExtNotificationClass **ppEnumSmirclass); STDMETHODIMP EnumNotificationClassesInModule(IEnumNotificationClass **ppEnumSmirclass, ISmirModHandle *hModule); STDMETHODIMP EnumExtNotificationClassesInModule(IEnumExtNotificationClass **ppEnumSmirclass, ISmirModHandle *hModule); CSmirInterrogator(CSmir *pSmir); virtual ~CSmirInterrogator(){} private: //private copy constructors to prevent bcopy CSmirInterrogator(CSmirInterrogator&); const CSmirInterrogator& operator=(CSmirInterrogator &); }; class CSmirAdministrator : public ISmirAdministrator { private: LONG m_cRef; CSmir *m_pSmir; #ifdef IMPLEMENTED_AS_SEPERATE_PROCESS CMutex criticalSection(FALSE,SMIR_CSMIR_ADMINISTRATOR_MUTEX) ; #else CCriticalSection criticalSection ; #endif public: CSmirAdministrator () ; //IUnknown members STDMETHODIMP QueryInterface(IN REFIID, OUT PPVOID); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); STDMETHODIMP CreateWBEMClass(IN BSTR pszClassName, OUT ISmirClassHandle **pHandle); STDMETHODIMP CreateWBEMNotificationClass ( IN BSTR pszClassName, OUT ISmirNotificationClassHandle **pHandle ) ; STDMETHODIMP CreateWBEMExtNotificationClass ( IN BSTR pszClassName, OUT ISmirExtNotificationClassHandle **pHandle ) ; //administrative interface STDMETHODIMP AddModule(IN ISmirModHandle *hModule); STDMETHODIMP DeleteModule(IN ISmirModHandle *hModule); STDMETHODIMP DeleteAllModules(); STDMETHODIMP AddGroup(IN ISmirModHandle *hModule, IN ISmirGroupHandle *hGroup); STDMETHODIMP DeleteGroup(ISmirGroupHandle *hGroup); STDMETHODIMP AddClass(IN ISmirGroupHandle *hGroup, IN ISmirClassHandle *hClass); STDMETHODIMP DeleteClass(IN ISmirClassHandle *hClass); STDMETHODIMP GetSerialiseHandle(ISmirSerialiseHandle **hSerialise, BOOL bClassDefinitionsOnly); STDMETHODIMP AddModuleToSerialise(ISmirModHandle *hModule,ISmirSerialiseHandle *hSerialise); STDMETHODIMP AddGroupToSerialise(ISmirModHandle *hModule, ISmirGroupHandle *hGroup,ISmirSerialiseHandle *hSerialise); STDMETHODIMP AddClassToSerialise(ISmirGroupHandle *hGroup, ISmirClassHandle *hClass,ISmirSerialiseHandle *hSerialise); STDMETHODIMP AddNotificationClass(ISmirNotificationClassHandle *hClass); STDMETHODIMP AddExtNotificationClass(ISmirExtNotificationClassHandle *hClass); STDMETHODIMP DeleteNotificationClass(ISmirNotificationClassHandle *hClass); STDMETHODIMP DeleteExtNotificationClass(ISmirExtNotificationClassHandle *hClass); STDMETHODIMP AddNotificationClassToSerialise(ISmirNotificationClassHandle *hClass, ISmirSerialiseHandle *hSerialise); STDMETHODIMP AddExtNotificationClassToSerialise(ISmirExtNotificationClassHandle *hClass, ISmirSerialiseHandle *hSerialise); CSmirAdministrator(CSmir *pSmir) ; virtual ~CSmirAdministrator(){} private: //private copy constructors to prevent bcopy CSmirAdministrator(CSmirAdministrator&); const CSmirAdministrator& operator=(CSmirAdministrator &); }; class CSmirWbemConfiguration : public ISMIRWbemConfiguration { private: LONG m_ReferenceCount ; CSmir *m_Smir ; IWbemContext *m_Context ; IWbemServices *m_Service ; protected: public: CSmirWbemConfiguration ( CSmir *a_Smir ) ; ~CSmirWbemConfiguration () ; //IUnknown methods //================= STDMETHODIMP QueryInterface(IN REFIID riid,OUT PPVOID ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); STDMETHODIMP Authenticate ( BSTR Server, BSTR User, BSTR Password, BSTR Locale, long lSecurityFlags, BSTR Authority , BOOL InProc ) ; STDMETHODIMP Impersonate ( ISMIRWbemConfiguration *a_Configuration ) ; STDMETHODIMP SetContext ( IWbemContext *a_Context ) ; STDMETHODIMP GetContext ( IWbemContext **a_Context ) ; STDMETHODIMP GetServices ( IWbemServices **a_Service ) ; } ; class CSmir : public ISmirDatabase { private: friend CSmirInterrogator; friend CSmirAdministrator; friend CSmirConnObject; #ifdef IMPLEMENTED_AS_SEPERATE_PROCESS CMutex criticalSection(FALSE,SMIR_CSMIR_MUTEX) ; #else CCriticalSection criticalSection ; #endif LONG m_cRef; CSmirInterrogator m_Interrogator; CSmirAdministrator m_Administrator; CSmirWbemConfiguration m_Configuration ; public: static CSmirConnObject* sm_ConnectionObjects; //IUnknown members STDMETHODIMP QueryInterface(IN REFIID, OUT PPVOID); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); STDMETHODIMP AddNotify(IN ISMIRNotify *hNotify, OUT DWORD *); STDMETHODIMP DeleteNotify(IN DWORD); CSmir(); virtual ~CSmir(); private: //private copy constructors to prevent bcopy CSmir(CSmir&); const CSmir& operator=(CSmir &); }; //structure used to pass arguments to the async class enumerator function typedef struct { CSmirConnObject *ConnectionObjects; ISmirModHandle *hModule; ISmirGroupHandle *hGroup; IConnectionPoint *pCP; DWORD dwCookie; } EnumClassAsyncArgStruct; #endif