//*************************************************************************** // // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // //*************************************************************************** #ifndef _WDMSHELL_HEADER #define _WDMSHELL_HEADER #include "wmicom.h" //************************************************************************************************************ //============================================================================================================ // // The Standard WDM Shell // //============================================================================================================ //************************************************************************************************************ class CWMIClassType { public: CWMIClassType() {} ~CWMIClassType(){} BOOL IsHiPerfClass(WCHAR * wcsClass, IWbemServices * pServices); }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////// class CWMIStandardShell { private: CWMIProcessClass * m_pClass; CProcessStandardDataBlock * m_pWDM; BOOL m_fInit; public: CWMIStandardShell(); ~CWMIStandardShell(); HRESULT Initialize(WCHAR * wcsClass, BOOL fInternalEvent, CHandleMap * pList,BOOL fUpdateNamespace, ULONG uDesiredAccess, IWbemServices __RPC_FAR * pServices, IWbemObjectSink __RPC_FAR * pHandler, IWbemContext __RPC_FAR *pCtx); inline BOOL HasMofChanged() { return m_pWDM->HasMofChanged(); } //============================================= // Process All and Single WMI Instances //============================================= HRESULT ProcessAllInstances(); HRESULT ProcessSingleInstance( WCHAR * wcsInstanceName); //========================================================== // The put instance group //========================================================== HRESULT FillInAndSubmitWMIDataBlob( IWbemClassObject * pIClass, int nTypeOfPut, CVARIANT & vList); //============================================= // Event functions //============================================= HRESULT ProcessEvent(WORD wBinaryMofType, PWNODE_HEADER WnodeHeader); inline HRESULT RegisterWMIEvent( WCHAR * wcsGuid, ULONG_PTR uContext, CLSID & Guid, BOOL fRegistered) { return m_pWDM->RegisterWMIEvent(wcsGuid,uContext,Guid,fRegistered);} //============================================= // method functions //============================================= HRESULT ExecuteMethod( WCHAR * wcsInstance, WCHAR * MethodInstanceName, IWbemClassObject * pParentClass, IWbemClassObject * pInClassData, IWbemClassObject * pInClass, IWbemClassObject * pOutClass ) ; //============================================= // data processing functions //============================================= HRESULT GetGuid(WCHAR * pwcsGuid); HRESULT SetGuidForEvent( WORD wType,WCHAR * wcsGuid ); HRESULT RegisterForWMIEvents( ULONG uContext, WCHAR * wcsGuid, BOOL fRegistered,CLSID & Guid ); inline BOOL CancelWMIEventRegistration( GUID gGuid , ULONG_PTR uContext ) { return m_pClass->WMI()->CancelWMIEventRegistration(gGuid,uContext);} //============================================= // The binary mof groupg //============================================= HRESULT ProcessBinaryGuidsViaEvent( PWNODE_HEADER WnodeHeader,WORD wType ); HRESULT QueryAndProcessAllBinaryGuidInstances(CNamespaceManagement & Namespace, BOOL & fMofHasChanged, KeyList * pArrDriversInRegistry); //============================================= // Misc //============================================= inline CLSID * GuidPtr() { return m_pClass->GuidPtr();} inline HRESULT SetErrorMessage(HRESULT hr){ return m_pClass->WMI()->SetErrorMessage(hr,m_pClass->GetClassName(),m_pWDM->GetMessage());} }; //************************************************************************************************************ //============================================================================================================ // // The Hi Performance Shell // //============================================================================================================ //************************************************************************************************************ class CWMIHiPerfShell { private: CHiPerfHandleMap * m_pHiPerfMap; CProcessHiPerfDataBlock * m_pWDM; CWMIProcessClass * m_pClass; BOOL m_fAutoCleanup; BOOL m_fInit; HRESULT QueryAllInstances(HANDLE WMIHandle,IWbemHiPerfEnum* pHiPerfEnum); HRESULT QuerySingleInstance(HANDLE WMIHandle); public: CWMIHiPerfShell(BOOL fAuto); ~CWMIHiPerfShell(); HRESULT Initialize(BOOL fUpdate, ULONG uDesiredAccess, CHandleMap * pList,WCHAR * wcs, IWbemServices __RPC_FAR * pServices, IWbemObjectSink __RPC_FAR * pHandler, IWbemContext __RPC_FAR *pCtx) ; inline void SetHiPerfHandleMap(CHiPerfHandleMap * p) { m_pHiPerfMap = p; } inline CCriticalSection * GetCriticalSection() { return m_pHiPerfMap->GetCriticalSection();} inline CHiPerfHandleMap * HiPerfHandleMap() { return m_pHiPerfMap;} HRESULT QueryAllHiPerfData(); HRESULT HiPerfQuerySingleInstance(WCHAR * wcsInstance); HRESULT AddAccessObjectToRefresher(IWbemObjectAccess *pAccess, IWbemObjectAccess ** ppRefreshable, ULONG_PTR * plId); HRESULT AddEnumeratorObjectToRefresher(IWbemHiPerfEnum* pHiPerfEnum, ULONG_PTR * plId); HRESULT RemoveObjectFromHandleMap(ULONG_PTR lHiPerfId); HRESULT RefreshCompleteList(); inline HRESULT SetErrorMessage(HRESULT hr){ return m_pClass->WMI()->SetErrorMessage(hr,m_pClass->GetClassName(),m_pWDM->GetMessage());} }; #endif