|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999-2002 Microsoft Corporation
//
// Module Name:
// EventProv.h
//
// Implementation File:
// EventProv.cpp
//
// Description:
// Definition of event provider class
//
// Author:
// Henry Wang (HenryWa) 19-JAN-2000
//
// Notes:
//
//////////////////////////////////////////////////////////////////////////////
#define EVENT_TABLE_SIZE 32
#pragma once
//////////////////////////////////////////////////////////////////////////////
// Include Files
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Forward Declarations
//////////////////////////////////////////////////////////////////////////////
class CEventProv;
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CEventProv
//
// Description:
// Event provider
//
//--
//////////////////////////////////////////////////////////////////////////////
class CEventProv : public IWbemEventProvider , public IWbemEventProviderSecurity , public IWbemProviderInit { public: enum EEventStatus { esPENDING, esRUNNING, esPENDING_STOP, esSTOPPPED,
esMX };
enum EClusterNotificationType { cntCLUSTER_STATE_CHANGE = CLUSTER_CHANGE_NODE_STATE | CLUSTER_CHANGE_RESOURCE_STATE | CLUSTER_CHANGE_NETWORK_STATE | CLUSTER_CHANGE_NETINTERFACE_STATE | CLUSTER_CHANGE_QUORUM_STATE | CLUSTER_CHANGE_CLUSTER_STATE, cntGROUP_STATE_CHANGE = CLUSTER_CHANGE_GROUP_STATE, cntRESOURCE_STATE_CHANGE = CLUSTER_CHANGE_RESOURCE_STATE, cntOBJECT_ADD = CLUSTER_CHANGE_NODE_ADDED | CLUSTER_CHANGE_RESOURCE_ADDED | CLUSTER_CHANGE_GROUP_ADDED | CLUSTER_CHANGE_RESOURCE_TYPE_ADDED | CLUSTER_CHANGE_NETWORK_ADDED | CLUSTER_CHANGE_NETINTERFACE_ADDED, cntOBJECT_REMOVE = CLUSTER_CHANGE_NODE_DELETED | CLUSTER_CHANGE_RESOURCE_DELETED | CLUSTER_CHANGE_GROUP_DELETED | CLUSTER_CHANGE_RESOURCE_TYPE_DELETED | CLUSTER_CHANGE_NETWORK_DELETED | CLUSTER_CHANGE_NETINTERFACE_DELETED, cntPROPERTY_CHANGE = CLUSTER_CHANGE_NODE_PROPERTY | CLUSTER_CHANGE_RESOURCE_PROPERTY | CLUSTER_CHANGE_GROUP_PROPERTY | CLUSTER_CHANGE_RESOURCE_TYPE_PROPERTY | CLUSTER_CHANGE_NETWORK_PROPERTY | CLUSTER_CHANGE_NETINTERFACE_PROPERTY | CLUSTER_CHANGE_CLUSTER_PROPERTY };
enum EEventObjectType { eotHANDLE = 0, eotCLUSTER, eotNODE, eotGROUP, eotRESOURCE, eotRESOURCE_TYPE, eotNETWORK, eotNET_INTERFACE, eotREGISTRY, eotQUORUM,
eotMX };
typedef void (*FPSETPROP)( CWbemClassObject & pwcoIn, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
struct SEventTypeTable { CLUSTER_CHANGE m_eType; EEventObjectType m_eotObjectType; LPCWSTR m_pwszMof; IWbemClassObject * m_pwco; FPSETPROP m_pfn; };
void InsertTable( DWORD dwIdxIn, CLUSTER_CHANGE eTypeIn, EEventObjectType eotObjectTypeIn, LPCWSTR pwszMofIn, IWbemClassObject * pwcoIn, FPSETPROP pfnIn );
SEventTypeTable m_EventTypeTable[ 32 ];
CEventProv( void ); ~CEventProv( void );
//
// IUnknown members
//
STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppv ); STDMETHODIMP_( ULONG ) AddRef( void ); STDMETHODIMP_( ULONG ) Release( void );
// Inherited from IWbemEventProvider
HRESULT STDMETHODCALLTYPE ProvideEvents( IWbemObjectSink * pSinkIn, long lFlagsIn );
// Inherited from IWbemEventProviderSecurity
HRESULT STDMETHODCALLTYPE AccessCheck( WBEM_CWSTR wszQueryLanguageIn, WBEM_CWSTR wszQueryIn, long lSidLengthIn, const BYTE * pSidIn ); // Inherited from IWbemProviderInit
HRESULT STDMETHODCALLTYPE Initialize( LPWSTR pwszUserIn, LONG lFlagsIn, LPWSTR pwszNamespaceIn, LPWSTR pwszLocaleIn, IWbemServices * pNamespaceIn, IWbemContext * pCtxIn, IWbemProviderInitSink * pInitSinkIn );
static HRESULT S_HrCreateThis( IUnknown * pUnknownOuterIn, VOID ** ppvOut );
protected: ULONG m_cRef; IWbemServices * m_pNs; IWbemObjectSink * m_pSink; IWbemClassObject * m_pEventAdd; IWbemClassObject * m_pEventRemove; IWbemClassObject * m_pEventProperty; IWbemClassObject * m_pEventState; IWbemClassObject * m_pEventGroupState; IWbemClassObject * m_pEventResourceState; EEventStatus m_esStatus; HANDLE m_hThread; BOOL m_fStopped; HCHANGE m_hChange;
static void S_SetEventProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
static void S_AddEvent( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
static void S_DeleteEvent( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
static void S_SetNodeStateProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn ); static void S_SetGroupStateProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn ); static void S_SetResourceStateProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn ); static void S_SetNetworkStateProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
static void S_SetNetInterfaceStateProperty( CWbemClassObject & pwcoInout, LPCWSTR pwszMofClassNameIn, LPCWSTR pwszObjectNameIn, EEventObjectType eotObjectTypeIn, DWORD dwEventMinorIn );
static DWORD WINAPI S_EventThread( LPVOID pArgIn );
void InstanceThread( void );
}; //*** class CEventProv
|