202 lines
9.0 KiB
C++
202 lines
9.0 KiB
C++
/* Conversion to Text to Wbem Object has been cut from the WHistler Feature List and hence commented out
|
|
|
|
|
|
// ***************************************************************************
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
//
|
|
// XMLTOWMI.H
|
|
//
|
|
// rajesh 3/25/2000 Created.
|
|
//
|
|
// Contains the class definition of the component that implements the IXMLWbemConvertor
|
|
// interface
|
|
//
|
|
// ***************************************************************************
|
|
|
|
|
|
#ifndef XML_TEST_TO_WMI_H
|
|
#define XML_TEST_TO_WMI_H
|
|
|
|
class CXml2Wmi : public IXMLWbemConvertor
|
|
{
|
|
long m_cRef; // COM Ref count
|
|
|
|
public:
|
|
CXml2Wmi();
|
|
virtual ~CXml2Wmi();
|
|
|
|
//Non-delegating object IUnknown
|
|
public:
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID*);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
// These are functions from the IXMLWbemConvertor interface
|
|
public:
|
|
HRESULT STDMETHODCALLTYPE MapObjectToWMI(IUnknown *pXmlDOMNode, IWbemContext *pInputFlags, BSTR strNamespace, BSTR strServer, IWbemClassObject **ppObject);
|
|
HRESULT STDMETHODCALLTYPE MapPropertyToWMI(IUnknown *pXmlDOMNode, IWbemClassObject *pObject, BSTR strPropertyName, IWbemContext *pInputFlags);
|
|
HRESULT STDMETHODCALLTYPE MapInstanceNameToWMI(IUnknown *pXmlDOMNode, IWbemContext *pInputFlags, BSTR *pstrInstanceName);
|
|
HRESULT STDMETHODCALLTYPE MapClassNameToWMI(IUnknown *pXmlDOMNode, IWbemContext *pInputFlags, BSTR *pstrClassName);
|
|
HRESULT STDMETHODCALLTYPE MapInstancePathToWMI(IUnknown *pXmlDOMNode, IWbemContext *pInputFlags, BSTR *pstrInstancePath);
|
|
HRESULT STDMETHODCALLTYPE MapClassPathToWMI(IUnknown *pXmlDOMNode, IWbemContext *pInputFlags, BSTR *pstrClassPath);
|
|
|
|
// These are functions for the encoder
|
|
public:
|
|
static HRESULT MapClass (
|
|
IXMLDOMElement *pXML,
|
|
IWbemClassObject **ppClass,
|
|
BSTR strNamespace, BSTR strServer,
|
|
bool bMakeInstance,
|
|
bool bAllowWMIExtensions);
|
|
static HRESULT MapInstance (
|
|
IXMLDOMElement *pXML,
|
|
IWbemClassObject **ppClass,
|
|
BSTR strNamespace, BSTR strServer,
|
|
bool bAllowWMIExtensions);
|
|
|
|
private:
|
|
// Functions for mapping properties
|
|
static HRESULT SetDerivationAndClassName(_IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, bool bMakeInstance);
|
|
static HRESULT CreateWMIProperties(bool bAllowWMIExtensions, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, bool bMakeInstance, BSTR *pstrServer, BSTR *pstrNamespace, IXMLDOMNode **ppAbstractQualifierNode);
|
|
static HRESULT CreateAWMIProperty(BSTR strNodeName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, BSTR strName, bool bMakeInstance);
|
|
static HRESULT CreateSimpleProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT MapStringValue (LPCWSTR pszName, _IWmiFreeFormObject *pObj, BSTR bsValue, CIMTYPE cimtype, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT MapStringArrayValue (
|
|
LPCWSTR pszName,
|
|
_IWmiFreeFormObject *pObj,
|
|
IXMLDOMElement *pValueArrayNode,
|
|
CIMTYPE cimtype,
|
|
LPCWSTR pszClassOrigin,
|
|
bool bMakeInstance);
|
|
static HRESULT CreateArrayProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT CreateReferenceProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT GetSingleRefValue(IXMLDOMElement *pValueRef, BSTR *pstrValue, BOOL &bUseSysFreeString);
|
|
static HRESULT GetSingleObject(IXMLDOMElement *pValueObject, _IWmiObject **ppEmbeddedObject);
|
|
static HRESULT CreateRefArrayProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT CreateObjectProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT CreateObjectArrayProperty(LPCWSTR pszName, _IWmiFreeFormObject *pObj, IXMLDOMElement *pXML, LPCWSTR pszClassOrigin, bool bMakeInstance);
|
|
static HRESULT GetFirstImmediateElement(IXMLDOMNode *pParent, IXMLDOMElement **ppChildElement, LPCWSTR pszName);
|
|
|
|
static HRESULT MapInstancePath (IXMLDOMNode *pNode, LPWSTR *ppszInstancePath);
|
|
static HRESULT MapLocalInstancePath (IXMLDOMNode *pNode, LPWSTR *ppszInstancePath);
|
|
static HRESULT MapInstanceName (IXMLDOMNode *pNode, LPWSTR *ppszInstanceName);
|
|
static HRESULT MapClassPath (IXMLDOMNode *pNode, LPWSTR *ppszClassPath);
|
|
static HRESULT MapLocalClassPath (IXMLDOMNode *pNode, LPWSTR *ppszClassPath);
|
|
static HRESULT MapClassName (IXMLDOMNode *pNode, BSTR *pstrXML);
|
|
static HRESULT ParseNamespacePath(IXMLDOMNode *pLocalNamespaceNode, BSTR *pstrHost, LPWSTR *ppszLocalNamespace);
|
|
static HRESULT ParseLocalNamespacePath(IXMLDOMNode *pLocalNamespaceNode, LPWSTR *ppszLocalNamespacePath);
|
|
static HRESULT ParseInstanceName(IXMLDOMNode *pNode, LPWSTR *ppszInstanceName);
|
|
static HRESULT ParseKeyValue(IXMLDOMNode *pNode, LPWSTR *ppszValue);
|
|
static HRESULT ParseOneKeyBinding(IXMLDOMNode *pNode, LPWSTR *ppszValue);
|
|
static HRESULT ParseKeyBinding(IXMLDOMNode *pNode, BSTR strClassName, LPWSTR *ppszInstanceName);
|
|
static HRESULT FormRefValueKeyBinding(LPWSTR *ppszValue, LPCWSTR pszPropertyName, LPCWSTR pszRefValue);
|
|
static HRESULT FixRefsAndEmbeddedObjects(IXMLDOMElement *pProperty, IWbemClassObject *pObj);
|
|
static HRESULT FixRefOrEmbeddedProperty(IXMLDOMElement *pProperty, IWbemClassObject *pObj, bool bIsRef);
|
|
static HRESULT FixAProperty(IWbemClassObject *pObj, BSTR strPropName, BSTR strRefClass, bool bIsRef);
|
|
|
|
//Functions to map Methods
|
|
static HRESULT CreateWMIMethods(bool bAllowWMIExtensions, IWbemClassObject *pObj, IXMLDOMElement *pMethod);
|
|
static HRESULT CreateAWMIMethod(bool bAllowWMIExtensions, IWbemClassObject *pObj, IXMLDOMElement *pMethod);
|
|
static HRESULT MapParameter (
|
|
IXMLDOMNode *pParameter,
|
|
IWbemClassObject **ppInParameters,
|
|
IWbemClassObject **ppOutParameters,
|
|
ULONG paramId,
|
|
bool bIsArray);
|
|
static bool DetermineParameterCharacteristics (
|
|
IXMLDOMNode *pParameter,
|
|
bool bIsArray,
|
|
bool &bIsInParameter,
|
|
bool &bIsOutParameter,
|
|
BSTR &bsName,
|
|
CIMTYPE &cimtype,
|
|
long &iArraySize,
|
|
bool bIsReference,
|
|
BSTR *pbsReferenceClass);
|
|
static HRESULT MapParameterQualifiers (
|
|
IXMLDOMNode *pParameter,
|
|
IWbemQualifierSet *pQualSet,
|
|
ULONG paramId,
|
|
bool bIsArray,
|
|
long iArraySize,
|
|
bool bIsInParameter );
|
|
static HRESULT MapReferenceOrObjectParameter (
|
|
IXMLDOMNode *pParameter,
|
|
IWbemClassObject **ppInParameters,
|
|
IWbemClassObject **ppOutParameters,
|
|
ULONG paramId,
|
|
bool bIsArray,
|
|
bool bIsReference);
|
|
|
|
// SOme utility functions
|
|
static HRESULT GetBstrAttribute(IXMLDOMNode *pNode, const BSTR strAttributeName, BSTR *pstrAttributeValue);
|
|
static LPWSTR EscapeSpecialCharacters(LPCWSTR pszInputString);
|
|
static HRESULT CreateParametersInstance(IWbemClassObject **pParamObject);
|
|
static HRESULT SetReferenceOrObjectClass (
|
|
IWbemQualifierSet *pQualSet,
|
|
BSTR strReferenceClass,
|
|
bool bIsReference);
|
|
static HRESULT DecorateObject(_IWmiFreeFormObject *pObj, BSTR strServer, BSTR strNamespace);
|
|
static HRESULT MakeObjectAbstract(IWbemClassObject *pObj, IXMLDOMNode *pAbstractQualifierNode);
|
|
|
|
// These functions deal with mapping of Qualifiers and are in quals.cpp
|
|
static HRESULT AddObjectQualifiers (
|
|
bool bAllowWMIExtensions,
|
|
IXMLDOMElement *pXml,
|
|
IWbemClassObject *pObj);
|
|
static HRESULT AddElementQualifiers (
|
|
IXMLDOMNode *pXml,
|
|
IWbemQualifierSet *pQuals);
|
|
static HRESULT AddQualifier (
|
|
IXMLDOMNode *pNode,
|
|
IWbemQualifierSet *pQualSet,
|
|
bool bIsObjectQualifier = false);
|
|
static HRESULT MapStringQualiferValue (BSTR bsValue, VARIANT &curValue, CIMTYPE cimtype);
|
|
static HRESULT MapStringArrayQualiferValue (
|
|
IXMLDOMNode *pValueNode,
|
|
VARIANT &curValue,
|
|
CIMTYPE cimtype);
|
|
static HRESULT MapStringQualiferValueIntoArray (
|
|
BSTR bsValue,
|
|
SAFEARRAY *pArray,
|
|
long *ix,
|
|
VARTYPE vt,
|
|
CIMTYPE cimtype);
|
|
static VARTYPE VTFromCIMType (CIMTYPE cimtype);
|
|
static CIMTYPE CimtypeFromString (BSTR bsType);
|
|
|
|
// Some string constants
|
|
static LPCWSTR VALUE_TAG;
|
|
static LPCWSTR VALUEARRAY_TAG;
|
|
static LPCWSTR VALUEREFERENCE_TAG;
|
|
static LPCWSTR CLASS_TAG;
|
|
static LPCWSTR INSTANCE_TAG;
|
|
static LPCWSTR CLASSNAME_TAG;
|
|
static LPCWSTR LOCALCLASSPATH_TAG;
|
|
static LPCWSTR CLASSPATH_TAG;
|
|
static LPCWSTR INSTANCENAME_TAG;
|
|
static LPCWSTR LOCALINSTANCEPATH_TAG;
|
|
static LPCWSTR INSTANCEPATH_TAG;
|
|
static LPCWSTR LOCALNAMESPACEPATH_TAG;
|
|
static LPCWSTR NAMESPACEPATH_TAG;
|
|
static LPCWSTR KEYBINDING_TAG;
|
|
static LPCWSTR KEYVALUE_TAG;
|
|
static LPCWSTR QUALIFIER_TAG;
|
|
static LPCWSTR PARAMETER_TAG;
|
|
static LPCWSTR PARAMETERARRAY_TAG;
|
|
static LPCWSTR PARAMETERREFERENCE_TAG;
|
|
static LPCWSTR PARAMETERREFARRAY_TAG;
|
|
static LPCWSTR PARAMETEROBJECT_TAG;
|
|
static LPCWSTR PARAMETEROBJECTARRAY_TAG;
|
|
static LPCWSTR REF_WSTR;
|
|
static LPCWSTR OBJECT_WSTR;
|
|
static LPCWSTR EQUALS_SIGN;
|
|
static LPCWSTR QUOTE_SIGN;
|
|
static LPCWSTR DOT_SIGN;
|
|
static LPCWSTR COMMA_SIGN;
|
|
};
|
|
|
|
#endif
|
|
|
|
*/ |