461 lines
13 KiB
C++
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
|