/****************************************************************************** Copyright (c) 1999 Microsoft Corporation Module Name: WMIParser.h Abstract: This file contains the declaration of the classes that are part of the WMIParser library. Revision History: Davide Massarenti (Dmassare) 07/25/99 created ******************************************************************************/ #if !defined(__INCLUDED___PCH___WMIPARSER_H___) #define __INCLUDED___PCH___WMIPARSER_H___ ///////////////////////////////////////////////////////////////////////////// namespace WMIParser { class InstanceName; class ValueReference; ///////////////////////////////////////////////////////////////////////////// class InstanceNameItem // Hungarian: wmipini { friend InstanceName; private: MPC::wstring m_szValue; ValueReference* m_wmipvrValue; public: InstanceNameItem(); InstanceNameItem( /*[in]*/ const InstanceNameItem& wmipini ); ~InstanceNameItem(); InstanceNameItem& operator=( /*[in]*/ const InstanceNameItem& wmipini ); bool operator==( /*[in]*/ InstanceNameItem const &wmipini ) const; bool operator< ( /*[in]*/ InstanceNameItem const &wmipini ) const; }; class InstanceName // Hungarian: wmipin { friend class Instance; public: typedef std::map KeyMap; typedef KeyMap::iterator KeyIter; typedef KeyMap::const_iterator KeyIterConst; private: MPC::XmlUtil m_xmlNode; // This instance in the Xml DOM. MPC::wstring m_szNamespace; // Namespace of the instance in CIM. MPC::wstring m_szClass; // Name of the class for this instance. KeyMap m_mapKeyBinding; // Set of keys. HRESULT ParseNamespace( ); HRESULT ParseKey ( /*[in] */ IXMLDOMNode* pxdnNode, /*[out]*/ InstanceNameItem& wmipini, /*[out]*/ bool& fEmpty ); HRESULT ParseKeys ( ); public: InstanceName(); ~InstanceName(); bool operator==( /*[in]*/ InstanceName const &wmipin ) const; bool operator< ( /*[in]*/ InstanceName const &wmipin ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode, /*[out]*/ bool& fEmpty ); HRESULT get_Namespace( /*[out]*/ MPC::wstring& szNamespace ); HRESULT get_Class ( /*[out]*/ MPC::wstring& szClass ); HRESULT get_KeyBinding( /*[out]*/ KeyIterConst& itBegin, /*[out]*/ KeyIterConst& itEnd ); }; class Value // Hungarian: wmipv { private: long m_lData; // Length of the data value. BYTE* m_rgData; // Data value. MPC::wstring m_szData; // Data value. public: Value(); virtual ~Value(); bool operator==( /*[in]*/ Value const &wmipv ) const; HRESULT Parse( /*[in] */ IXMLDOMNode* pxdnNode, /*[in]*/ LPCWSTR szTag ); HRESULT get_Data( /*[out]*/ long& lData, /*[out]*/ BYTE*& rgData ); HRESULT get_Data( /*[out]*/ MPC::wstring& szData ); }; class ValueReference // Hungarian: wmipvr { private: InstanceName m_wmipin; public: ValueReference(); virtual ~ValueReference(); bool operator==( /*[in]*/ ValueReference const &wmipvr ) const; bool operator< ( /*[in]*/ ValueReference const &wmipvr ) const; HRESULT Parse( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Data( /*[out]*/ InstanceName*& wmipin ); }; ///////////////////////////////////////////////////////////////////////////// class Property // Hungarian: wmipp { protected: MPC::XmlUtil m_xmlNode; // This property in the Xml DOM. MPC::wstring m_szName; // Name of the property. MPC::wstring m_szType; // Type of the value for this property. public: Property(); virtual ~Property(); bool operator==( /*[in]*/ LPCWSTR strName ) const; bool operator==( /*[in]*/ const MPC::wstring& szName ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Node( /*[out]*/ IXMLDOMNode* *pxdnNode ); HRESULT get_Name( /*[out]*/ MPC::wstring& szName ); HRESULT get_Type( /*[out]*/ MPC::wstring& szType ); }; class Property_Scalar : public Property // Hungarian: wmipps { private: Value m_wmipvData; public: Property_Scalar(); virtual ~Property_Scalar(); bool operator==( /*[in]*/ Property_Scalar const &wmipps ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Data( /*[out]*/ MPC::wstring& szData ); HRESULT put_Data( /*[in] */ const MPC::wstring& szData, /*[out]*/ bool& fFound ); }; class Property_Array : public Property // Hungarian: wmippa { private: typedef std::list ElemList; typedef ElemList::iterator ElemIter; typedef ElemList::const_iterator ElemIterConst; ElemList m_lstElements; public: Property_Array(); virtual ~Property_Array(); bool operator==( /*[in]*/ Property_Array const &wmippa ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Data( /*[in]*/ int iIndex, /*[out]*/ MPC::wstring& szData ); HRESULT put_Data( /*[in]*/ int iIndex, /*[in] */ const MPC::wstring& szData, /*[out]*/ bool& fFound ); }; class Property_Reference : public Property // Hungarian: wmippr { private: ValueReference m_wmipvrData; public: Property_Reference(); virtual ~Property_Reference(); bool operator==( /*[in]*/ Property_Reference const &wmippr ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Data( /*[out]*/ ValueReference*& wmipvr ); }; ///////////////////////////////////////////////////////////////////////////// class Instance // Hungarian: wmipi { friend class Instance_Less_ByClass; friend class Instance_Less_ByKey; public: typedef std::map PropMap; typedef PropMap::iterator PropIter; typedef PropMap::const_iterator PropIterConst; typedef std::map ArrayMap; typedef ArrayMap::iterator ArrayIter; typedef ArrayMap::const_iterator ArrayIterConst; typedef std::map ReferenceMap; typedef ReferenceMap::iterator ReferenceIter; typedef ReferenceMap::const_iterator ReferenceIterConst; private: MPC::XmlUtil m_xmlNode; // This instance in the Xml DOM. Property_Scalar m_wmippTimeStamp; // Timestamp of this instance. bool m_fTimeStamp; // Property_Scalar m_wmippChange; // Change status of this instance. bool m_fChange; // InstanceName m_wmipinIdentity; // Set of keys. bool m_fPropertiesParsed; // Flags to indicate if properties are already parsed or not. PropMap m_mapPropertiesScalar; // Map of all the scalar properties of this instance. ArrayMap m_mapPropertiesArray; // Map of all the array properties of this instance. ReferenceMap m_mapPropertiesReference; // Map of all the reference properties of this instance. HRESULT ParseIdentity ( /*[in] */ IXMLDOMNode* pxdnNode, /*[out]*/ bool& fEmpty ); HRESULT ParseProperties ( ); HRESULT ParsePropertiesScalar ( ); HRESULT ParsePropertiesArray ( ); HRESULT ParsePropertiesReference( ); public: Instance(); ~Instance(); bool operator==( /*[in]*/ Instance const &wmipi ) const; HRESULT put_Node( /*[in] */ IXMLDOMNode* pxdnNode, /*[out]*/ bool& fEmpty ); HRESULT get_Node( /*[out]*/ IXMLDOMNode* *pxdnNode ); HRESULT get_Namespace( /*[out]*/ MPC::wstring& szNamespace ); HRESULT get_Class ( /*[out]*/ MPC::wstring& szClass ); HRESULT get_TimeStamp( /*[out]*/ Property_Scalar*& wmippTimeStamp, /*[out]*/ bool& fFound ); HRESULT get_Change ( /*[out]*/ Property_Scalar*& wmippChange ); HRESULT get_Identity ( /*[out]*/ InstanceName*& wmipin ); HRESULT get_Properties ( /*[out]*/ PropIterConst& itBegin, /*[out]*/ PropIterConst& itEnd ); HRESULT get_PropertiesArray ( /*[out]*/ ArrayIterConst& itBegin, /*[out]*/ ArrayIterConst& itEnd ); HRESULT get_PropertiesReference( /*[out]*/ ReferenceIterConst& itBegin, /*[out]*/ ReferenceIterConst& itEnd ); bool CompareByClass( /*[in]*/ Instance const &wmipi ) const; bool CompareByKey ( /*[in]*/ Instance const &wmipi ) const; }; class Instance_Less_ByClass { public: bool operator()( /*[in]*/ Instance* const &, /*[in]*/ Instance* const & ) const; }; class Instance_Less_ByKey { public: bool operator()( /*[in]*/ Instance* const &, /*[in]*/ Instance* const & ) const; }; ///////////////////////////////////////////////////////////////////////////// class Snapshot // Hungarian: wmips { public: typedef std::list InstList; typedef InstList::iterator InstIter; typedef InstList::const_iterator InstIterConst; private: MPC::XmlUtil m_xmlNode; // This snapshot in the Xml DOM. CComPtr m_xdnInstances; // Position of the parent of all instances. InstList m_lstInstances; // List of all the instances of this snapshot. HRESULT Parse(); public: Snapshot(); ~Snapshot(); HRESULT put_Node ( /*[in] */ IXMLDOMNode* pxdnNode ); HRESULT get_Node ( /*[out]*/ IXMLDOMNode* *pxdnNode ); HRESULT get_NodeForInstances( /*[out]*/ IXMLDOMNode* *pxdnNode ); HRESULT get_Instances( /*[out]*/ InstIterConst& itBegin, /*[out]*/ InstIterConst& itEnd ); HRESULT clone_Instance( /*[in]*/ Instance* pwmipiOld, /*[out]*/ Instance*& pwmipiNew ); HRESULT New ( ); HRESULT Load( /*[in]*/ LPCWSTR szFile, /*[in]*/ LPCWSTR szRootTag ); HRESULT Save( /*[in]*/ LPCWSTR szFile ); }; ///////////////////////////////////////////////////////////////////////////// typedef std::map ClusterByKeyMap; typedef ClusterByKeyMap::iterator ClusterByKeyIter; typedef ClusterByKeyMap::const_iterator ClusterByKeyIterConst; class Cluster { ClusterByKeyMap m_map; public: Cluster() {}; HRESULT Add ( /*[in] */ Instance* wmipiInst ); HRESULT Find( /*[in] */ Instance* wmipiInst, /*[out]*/ Instance*& wmipiRes, /*[out]*/ bool& fFound ); HRESULT Enum( /*[out]*/ ClusterByKeyIter& itBegin , /*[out]*/ ClusterByKeyIter& itEnd ); }; typedef std::map ClusterByClassMap; typedef ClusterByClassMap::iterator ClusterByClassIter; typedef ClusterByClassMap::const_iterator ClusterByClassIterConst; ///////////////////////////////////////////////////////////////////////////// HRESULT DistributeOnCluster( /*[in]*/ ClusterByClassMap& cluster, /*[in]*/ Snapshot& wmips ); HRESULT CompareSnapshots( /*[in] */ BSTR bstrFilenameT0 , /*[in] */ BSTR bstrFilenameT1 , /*[in] */ BSTR bstrFilenameDiff , /*[out,retval]*/ VARIANT_BOOL *pVal ); }; #endif // !defined(__INCLUDED___PCH___WMIPARSER_H___)