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

461 lines
13 KiB
C++

//***************************************************************************
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// cwbmxmlt.h
//
// alanbos 13-Feb-98 Created.
//
// Genral purpose include file.
//
//***************************************************************************
#ifndef _CXMLTRANSF_H_
#define _CXMLTRANSF_H_
//***************************************************************************
//
// CLASS NAME:
//
// CXMLTransformer
//
// DESCRIPTION:
//
// Implements the IWmiXMLTransformer.
//
//***************************************************************************
class CXMLTransformer : public IWmiXMLTransformer,
public IObjectSafety,
public ISupportErrorInfo
{
private:
CRITICAL_SECTION m_cs;
ITypeInfo* m_pITINeutral;
CSWbemPrivilegeSet m_PrivilegeSet; // The set of privileges used when any operation is done
// Various propertied of this COM object
WmiXMLEncoding m_iEncoding;
VARIANT_BOOL m_bQualifierFilter;
VARIANT_BOOL m_bClassOriginFilter;
BSTR m_strUser;
BSTR m_strPassword;
BSTR m_strAuthority;
DWORD m_dwImpersonationLevel;
DWORD m_dwAuthenticationLevel;
BSTR m_strLocale;
VARIANT_BOOL m_bLocalOnly;
HRESULT m_hResult; // Last HRESULT returned from CIMOM call
// Compilation errors, if any, due to the last compilation
BSTR m_strCompilationErrors;
// Takes the contents of an IStream and puts it into a BSTR
static HRESULT SaveStreamAsBSTR (IStream *pStream, BSTR *pBstr);
// Gets the first child element of the specified name
static HRESULT GetFirstImmediateElement(IXMLDOMNode *pParent, IXMLDOMElement **ppChildElement, LPCWSTR pszName);
// For creating standard syntax error messages with information form the XML Parser
static LPCWSTR s_pszXMLParseErrorMessage;
HRESULT STDMETHODCALLTYPE DoWellFormCheck(
VARIANT *pvInputSource,
VARIANT_BOOL *pStatus,
BSTR *pstrError,
bool bCheckForValidity,
IXMLDOMDocument **pDoc);
HRESULT STDMETHODCALLTYPE CompileString(
/* [in] */ VARIANT *pvInputSource,
/* [in] */ BSTR strNamespacePath,
/* [in] */ LONG lClassFlags,
/* [in] */ LONG lInstanceFlags,
/* [in] */ IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
HRESULT STDMETHODCALLTYPE CompileStream(
/* [in] */ VARIANT *pvInputSource,
/* [in] */ BSTR strNamespacePath,
/* [in] */ LONG lClassFlags,
/* [in] */ LONG lInstanceFlags,
/* [in] */ IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
// Compiles a single document
HRESULT CompileDocument (
IXMLDOMDocument *pDocument,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
HRESULT ProcessDeclGroup (
IXMLDOMElement *pDeclGroup,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
HRESULT ProcessDeclGroupWithName (
IXMLDOMElement *pDeclGroup,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
HRESULT ProcessDeclGroupWithPath (
IXMLDOMElement *pDeclGroup,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext,
/* [out]*/ BSTR *pstrError);
HRESULT ProcessValueObject (
IXMLDOMNode *pValueObject,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext);
HRESULT ProcessValueNamedObject (
IXMLDOMNode *pValueObject,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext);
HRESULT ProcessValueObjectWithPath (
IXMLDOMNode *pValueObject,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext);
HRESULT PutObject (
IXMLDOMElement *pObjectElement,
BSTR strNamespacePath,
LONG lClassFlags,
LONG lInstanceFlags,
IWbemContext *pContext);
HRESULT PutClass (
bool bIsHTTP,
bool bIsNovaPath,
BSTR strNamespacePath,
LPCWSTR pszHostNameOrURL,
LPCWSTR pszNamespace,
LONG lClassFlags,
IXMLDOMNode *pClassPathNode,
IXMLDOMElement *pClassNode,
IWbemContext *pContext);
HRESULT PutInstance (
bool bIsHTTP,
bool bIsNovaPath,
BSTR strNamespacePath,
LPCWSTR pszHostNameOrURL,
LPCWSTR pszNamespace,
LONG lInstanceFlags,
IXMLDOMNode *pInstancePathNode,
IXMLDOMElement *pInstanceNode,
IWbemContext *pContext);
HRESULT ProcessPragmas(IXMLDOMNode *pNode, BSTR strNodeName,
LONG &lClassFlags, LONG&lInstanceFlags, BSTR &strNamespacePath,
IWbemContext *pContext,
BSTR *pstrError);
HRESULT ProcessClassPragma(IXMLDOMNode *pNode, LONG &lClassFlags,
BSTR *pstrError);
HRESULT ProcessInstancePragma(IXMLDOMNode *pNode, LONG&lInstanceFlags,
BSTR *pstrError);
HRESULT ProcessNamespacePragma(IXMLDOMNode *pNode, BSTR &strNamespacePath,
BSTR *pstrError);
HRESULT ProcessDeletePragma(IXMLDOMNode *pNode, LPCWSTR pszNamespacePath, IWbemContext *pContext,
BSTR *pstrError);
void AddError(BSTR *pstrError, LPCWSTR pszFormat, ...);
protected:
long m_cRef; //Object reference count
public:
CXMLTransformer();
~CXMLTransformer(void);
//Non-delegating object IUnknown
//************************************
STDMETHODIMP QueryInterface(REFIID, LPVOID*);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IDispatch methods
//************************************
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);
// IWbemXMLTransformer methods
//************************************
HRESULT STDMETHODCALLTYPE get_XMLEncodingType
(
/*[out]*/ WmiXMLEncoding *piEncoding
)
{
if(piEncoding)
{
*piEncoding = m_iEncoding;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_XMLEncodingType
(
/*[in]*/ WmiXMLEncoding iEncoding
)
{
m_iEncoding = iEncoding;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_QualifierFilter
(
/*[out]*/ VARIANT_BOOL *bQualifierFilter
)
{
if(bQualifierFilter)
{
*bQualifierFilter = m_bQualifierFilter;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_QualifierFilter
(
/*[in]*/ VARIANT_BOOL bQualifierFilter
)
{
m_bQualifierFilter = bQualifierFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_ClassOriginFilter
(
/*[out]*/ VARIANT_BOOL *bClassOriginFilter
)
{
if(bClassOriginFilter)
{
*bClassOriginFilter = m_bClassOriginFilter;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_ClassOriginFilter
(
/*[in]*/ VARIANT_BOOL bClassOriginFilter
)
{
m_bClassOriginFilter = bClassOriginFilter;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_LocalOnly
(
/*[out]*/ VARIANT_BOOL *bLocalOnly
)
{
if(bLocalOnly)
{
*bLocalOnly = m_bLocalOnly;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_LocalOnly
(
/*[in]*/ VARIANT_BOOL bLocalOnly
)
{
m_bLocalOnly = bLocalOnly;
return S_OK;
}
HRESULT STDMETHODCALLTYPE get_User(
/* [out][retval] */ BSTR __RPC_FAR *pstrUser);
HRESULT STDMETHODCALLTYPE put_User(
/* [in] */ BSTR strUser);
HRESULT STDMETHODCALLTYPE get_Password(
/* [out][retval] */ BSTR __RPC_FAR *pstrPassword);
HRESULT STDMETHODCALLTYPE put_Password(
/* [in] */ BSTR strPassword);
HRESULT STDMETHODCALLTYPE get_Authority(
/* [out][retval] */ BSTR __RPC_FAR *pstrAuthority);
HRESULT STDMETHODCALLTYPE put_Authority(
/* [in] */ BSTR strAuthority);
HRESULT STDMETHODCALLTYPE get_ImpersonationLevel(
/* [out][retval] */ DWORD __RPC_FAR *pdwImpersonationLevel)
{
if(pdwImpersonationLevel)
{
*pdwImpersonationLevel = m_dwImpersonationLevel;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_ImpersonationLevel(
/* [in] */ DWORD dwImpersonationLevel)
{
if(dwImpersonationLevel == RPC_C_IMP_LEVEL_DEFAULT||
dwImpersonationLevel == RPC_C_IMP_LEVEL_ANONYMOUS||
dwImpersonationLevel == RPC_C_IMP_LEVEL_IDENTIFY||
dwImpersonationLevel == RPC_C_IMP_LEVEL_IMPERSONATE||
dwImpersonationLevel == RPC_C_IMP_LEVEL_DELEGATE)
{
m_dwImpersonationLevel = dwImpersonationLevel;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE get_AuthenticationLevel(
/* [out][retval] */ DWORD __RPC_FAR *pdwAuthenticationLevel)
{
if(pdwAuthenticationLevel)
{
*pdwAuthenticationLevel = m_dwAuthenticationLevel;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE put_AuthenticationLevel(
/* [in] */ DWORD dwAuthenticationLevel)
{
if(dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_DEFAULT||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_NONE||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_CONNECT||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_CALL||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_PKT||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_PKT_INTEGRITY||
dwAuthenticationLevel == RPC_C_AUTHN_LEVEL_PKT_PRIVACY )
{
m_dwAuthenticationLevel = dwAuthenticationLevel;
return S_OK;
}
return WBEM_E_INVALID_PARAMETER;
}
HRESULT STDMETHODCALLTYPE get_Locale(
/* [out][retval] */ BSTR __RPC_FAR *pstrLocale);
HRESULT STDMETHODCALLTYPE put_Locale(
/* [in] */ BSTR strLocale);
HRESULT STDMETHODCALLTYPE GetObject(
/* [in] */ BSTR strObjectPath,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ IXMLDOMDocument **ppXMLDocument);
HRESULT STDMETHODCALLTYPE ExecQuery(
/* [in] */ BSTR strNamespacePath,
/* [in] */ BSTR strQuery,
/* [in] */ BSTR strQueryLanguage,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ ISWbemXMLDocumentSet **ppXMLDocumentSet);
HRESULT STDMETHODCALLTYPE EnumClasses(
/* [in] */ BSTR strSuperClassPath,
/* [in] */ VARIANT_BOOL bDeep,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ ISWbemXMLDocumentSet **ppXMLDocumentSet);
HRESULT STDMETHODCALLTYPE EnumInstances(
/* [in] */ BSTR strClassPath,
/* [in] */ VARIANT_BOOL bDeep,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ ISWbemXMLDocumentSet **ppXMLDocumentSet);
HRESULT STDMETHODCALLTYPE EnumClassNames(
/* [in] */ BSTR strSuperClassPath,
/* [in] */ VARIANT_BOOL bDeep,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ ISWbemXMLDocumentSet **ppXMLDocumentSet);
HRESULT STDMETHODCALLTYPE EnumInstanceNames(
/* [in] */ BSTR strClassPath,
/* [in] */ IDispatch *pCtx,
/* [retval][out] */ ISWbemXMLDocumentSet **ppXMLDocumentSet);
HRESULT STDMETHODCALLTYPE Compile(
/* [in] */ VARIANT *pInputSource,
/* [in] */ BSTR strNamespacePath,
/* [in] */ LONG lClassFlags,
/* [in] */ LONG lInstanceFlags,
/* [in] */ WmiXMLCompilationTypeEnum iOperation,
/* [in] */ IDispatch *pCtx,
/* [out]*/ VARIANT_BOOL *pStatus);
HRESULT STDMETHODCALLTYPE get_Privileges (/*[out, retval] */ISWbemPrivilegeSet **objWbemPrivilegeSet);
HRESULT STDMETHODCALLTYPE get_CompilationErrors (/*[out, retval] */BSTR *pstrErrors);
// 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_IWmiXMLTransformer == riid) ? S_OK : S_FALSE;
}
};
#endif