2025-04-27 07:49:33 -04:00

319 lines
6.7 KiB
C++

//***************************************************************************
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// cwbmxmlt.h
//
// alanbos 13-Feb-98 Created.
//
// Genral purpose include file.
//
//***************************************************************************
#ifndef _CWBMXMLT_H_
#define _CWBMXMLT_H_
//***************************************************************************
//
// CLASS NAME:
//
// CXMLTranslator
//
// DESCRIPTION:
//
// Implements the IWmiXMLTranslator.
//
//***************************************************************************
class CXMLTranslator : public IWmiXMLTranslator,
public IObjectSafety,
public ISupportErrorInfo
{
private:
CRITICAL_SECTION m_cs;
ITypeInfo* m_pITINeutral;
BSTR m_schemaURL;
VARIANT_BOOL m_bAllowWMIExtensions;
VARIANT_BOOL m_bHostFilter;
WmiXMLFilterEnum m_iQualifierFilter;
WmiXMLDTDVersionEnum m_iDTDVersion;
BSTR m_queryFormat;
CXMLConnectionCache m_connectionCache;
WmiXMLClassOriginFilterEnum m_iClassOriginFilter;
VARIANT_BOOL m_bNamespaceInDeclGroup;
WmiXMLDeclGroupTypeEnum m_iDeclGroupType;
HRESULT m_hResult; // Last HRESULT returned from CIMOM call
static HRESULT SaveStreamAsBSTR (IStream *pStream, BSTR *pBstr);
protected:
long m_cRef; //Object reference count
public:
CXMLTranslator();
~CXMLTranslator(void);
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, LPVOID*);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IDispatch
STDMETHODIMP GetTypeInfoCount(UINT* pctinfo);
STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo);
STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames,
UINT cNames, LCID lcid, DISPID* rgdispid);
STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
EXCEPINFO* pexcepinfo, UINT* puArgErr);
// IWbemXMLTranslator methods
HRESULT STDMETHODCALLTYPE GetObject
(
/*[in]*/ BSTR pszNamespacePath,
/*[in]*/ BSTR pszObjectPath,
/*[out]*/ BSTR* pXML
);
HRESULT STDMETHODCALLTYPE ExecQuery
(
/*[in]*/ BSTR pszNamespacePath,
/*[in]*/ BSTR pszQueryString,
/*[out]*/ BSTR* pXML
);
HRESULT STDMETHODCALLTYPE get_SchemaURL
(
/*[out]*/ BSTR* pSchemaURL
);
HRESULT STDMETHODCALLTYPE put_SchemaURL
(
/*[in]*/ BSTR schemaURL
);
HRESULT STDMETHODCALLTYPE get_AllowWMIExtensions
(
/*[out]*/ VARIANT_BOOL* bAllowWMIExtensions
)
{
*bAllowWMIExtensions = m_bAllowWMIExtensions;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_AllowWMIExtensions
(
/*[in]*/ VARIANT_BOOL bAllowWMIExtensions
)
{
m_bAllowWMIExtensions = bAllowWMIExtensions;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_HostFilter
(
/*[out]*/ VARIANT_BOOL* bHostFilter
)
{
*bHostFilter = m_bHostFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_HostFilter
(
/*[in]*/ VARIANT_BOOL bHostFilter
)
{
m_bHostFilter = bHostFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_QualifierFilter
(
/*[out]*/ WmiXMLFilterEnum *iQualifierFilter
)
{
*iQualifierFilter = m_iQualifierFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_QualifierFilter
(
/*[in]*/ WmiXMLFilterEnum iQualifierFilter
)
{
HRESULT hr = E_FAIL;
switch (iQualifierFilter)
{
case wmiXMLFilterNone:
case wmiXMLFilterLocal:
case wmiXMLFilterPropagated:
case wmiXMLFilterAll:
m_iQualifierFilter = iQualifierFilter;
hr = S_OK;
break;
}
if (FAILED(hr))
m_hResult = hr;
return hr;
}
HRESULT STDMETHODCALLTYPE get_DTDVersion
(
/*[out]*/ WmiXMLDTDVersionEnum *iDTDVersion
)
{
*iDTDVersion = m_iDTDVersion;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_DTDVersion
(
/*[in]*/ WmiXMLDTDVersionEnum iDTDVersion
)
{
HRESULT hr = E_FAIL;
// Currently only 2.0 is supported
if (wmiXMLDTDVersion_2_0 == iDTDVersion)
{
m_iDTDVersion = iDTDVersion;
hr = S_OK;
}
if (FAILED(hr))
m_hResult = hr;
return hr;
}
HRESULT STDMETHODCALLTYPE get_ClassOriginFilter
(
/*[out]*/ WmiXMLClassOriginFilterEnum *iClassOriginFilter
)
{
*iClassOriginFilter = m_iClassOriginFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_ClassOriginFilter
(
/*[in]*/ WmiXMLClassOriginFilterEnum iClassOriginFilter
)
{
HRESULT hr = E_FAIL;
switch (iClassOriginFilter)
{
case wmiXMLClassOriginFilterNone:
case wmiXMLClassOriginFilterClass:
case wmiXMLClassOriginFilterInstance:
case wmiXMLClassOriginFilterAll:
m_iClassOriginFilter = iClassOriginFilter;
hr = S_OK;
break;
}
if (FAILED(hr))
m_hResult = hr;
return hr;
}
HRESULT STDMETHODCALLTYPE get_IncludeNamespace
(
/*[out]*/ VARIANT_BOOL* bIncludeNamespace
)
{
*bIncludeNamespace = m_bNamespaceInDeclGroup;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_IncludeNamespace
(
/*[in]*/ VARIANT_BOOL bIncludeNamespace
)
{
m_bNamespaceInDeclGroup = bIncludeNamespace;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_DeclGroupType
(
/*[out]*/ WmiXMLDeclGroupTypeEnum *iDeclGroupType
)
{
*iDeclGroupType = m_iDeclGroupType;
return S_OK;
}
HRESULT STDMETHODCALLTYPE put_DeclGroupType
(
/*[in]*/ WmiXMLDeclGroupTypeEnum iDeclGroupType
)
{
HRESULT hr = E_FAIL;
switch (iDeclGroupType)
{
case wmiXMLDeclGroup:
case wmiXMLDeclGroupWithName:
case wmiXMLDeclGroupWithPath:
m_iDeclGroupType = iDeclGroupType;
hr = S_OK;
break;
}
if (FAILED(hr))
m_hResult = hr;
return hr;
}
// IObjectSafety methods
HRESULT STDMETHODCALLTYPE SetInterfaceSafetyOptions
(
/* [in] */ REFIID riid,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions
)
{
return (dwOptionSetMask & dwEnabledOptions) ? E_FAIL : S_OK;
}
HRESULT STDMETHODCALLTYPE GetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions
)
{
if (pdwSupportedOptions) *pdwSupportedOptions = 0;
if (pdwEnabledOptions) *pdwEnabledOptions = 0;
return S_OK;
}
// ISupportErrorInfo methods
HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo
(
/* [in] */ REFIID riid
)
{
return (IID_IWmiXMLTranslator == riid) ? S_OK : S_FALSE;
}
};
#endif