You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
8.2 KiB
326 lines
8.2 KiB
/*++
|
|
|
|
Copyright (C) 1998-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
COMOBJ.H
|
|
|
|
Abstract:
|
|
|
|
This file defines the classes related to class representation
|
|
of mofcomp objects.
|
|
|
|
History:
|
|
|
|
9/16/98 a-davj Created
|
|
|
|
--*/
|
|
|
|
#ifndef __COMOBJ__H_
|
|
#define __COMOBJ__H_
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// CGenFactory
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// Class factory template.
|
|
//
|
|
//***************************************************************************
|
|
|
|
|
|
typedef LPVOID * PPVOID;
|
|
void ObjectCreated();
|
|
void ObjectDestroyed();
|
|
|
|
template<class TObj>
|
|
class CGenFactory : public IClassFactory
|
|
{
|
|
protected:
|
|
long m_cRef;
|
|
public:
|
|
CGenFactory(void)
|
|
{
|
|
m_cRef=0L;
|
|
ObjectCreated();
|
|
return;
|
|
};
|
|
|
|
~CGenFactory(void)
|
|
{
|
|
ObjectDestroyed();
|
|
return;
|
|
}
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv)
|
|
{
|
|
*ppv=NULL;
|
|
|
|
if (IID_IUnknown==riid || IID_IClassFactory==riid)
|
|
*ppv=this;
|
|
|
|
if (NULL!=*ppv)
|
|
{
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
return ResultFromScode(E_NOINTERFACE);
|
|
};
|
|
|
|
STDMETHODIMP_(ULONG) AddRef(void)
|
|
{
|
|
return ++m_cRef;
|
|
};
|
|
STDMETHODIMP_(ULONG) Release(void)
|
|
{
|
|
long lRet = InterlockedDecrement(&m_cRef);
|
|
if (0 ==lRet)
|
|
delete this;
|
|
return lRet;
|
|
};
|
|
|
|
//IClassFactory members
|
|
STDMETHODIMP CreateInstance(IN LPUNKNOWN pUnkOuter, IN REFIID riid, OUT PPVOID ppvObj)
|
|
{
|
|
HRESULT hr;
|
|
|
|
*ppvObj=NULL;
|
|
hr=E_OUTOFMEMORY;
|
|
|
|
// This object doesnt support aggregation.
|
|
|
|
if (NULL!=pUnkOuter)
|
|
return CLASS_E_NOAGGREGATION;
|
|
|
|
//Create the object passing function to notify on destruction.
|
|
|
|
TObj * pObj = new TObj();
|
|
|
|
if (NULL==pObj)
|
|
return hr;
|
|
|
|
// Setup the class all empty, etc.
|
|
|
|
hr=pObj->QueryInterface(riid, ppvObj);
|
|
pObj->Release();
|
|
return hr;
|
|
|
|
};
|
|
STDMETHODIMP LockServer(BOOL fLock)
|
|
{
|
|
if (fLock)
|
|
InterlockedIncrement((long *)&g_cLock);
|
|
else
|
|
InterlockedDecrement((long *)&g_cLock);
|
|
return NOERROR;
|
|
};
|
|
};
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// CMofComp
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// Supports mofcomp functions for clients.
|
|
//
|
|
//***************************************************************************
|
|
|
|
class CMofComp : IMofCompiler
|
|
{
|
|
protected:
|
|
long m_cRef;
|
|
public:
|
|
CMofComp(void)
|
|
{
|
|
m_cRef=1L;
|
|
ObjectCreated();
|
|
return;
|
|
};
|
|
|
|
~CMofComp(void)
|
|
{
|
|
ObjectDestroyed();
|
|
return;
|
|
}
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv)
|
|
{
|
|
*ppv=NULL;
|
|
|
|
if (IID_IUnknown==riid || IID_IMofCompiler==riid)
|
|
*ppv=this;
|
|
|
|
if (NULL!=*ppv)
|
|
{
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
return E_NOINTERFACE;
|
|
};
|
|
|
|
STDMETHODIMP_(ULONG) AddRef(void)
|
|
{
|
|
return ++m_cRef;
|
|
};
|
|
STDMETHODIMP_(ULONG) Release(void)
|
|
{
|
|
long lRef = InterlockedDecrement(&m_cRef);
|
|
if (0L == lRef)
|
|
delete this;
|
|
return lRef;
|
|
};
|
|
|
|
// IMofCompiler functions
|
|
|
|
HRESULT STDMETHODCALLTYPE CompileFile(
|
|
/* [in] */ LPWSTR FileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LPWSTR User,
|
|
/* [in] */ LPWSTR Authority,
|
|
/* [in] */ LPWSTR Password,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo);
|
|
|
|
HRESULT STDMETHODCALLTYPE CompileBuffer(
|
|
/* [in] */ long BuffSize,
|
|
/* [size_is][in] */ BYTE __RPC_FAR *pBuffer,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LPWSTR User,
|
|
/* [in] */ LPWSTR Authority,
|
|
/* [in] */ LPWSTR Password,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo);
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateBMOF(
|
|
/* [in] */ LPWSTR TextFileName,
|
|
/* [in] */ LPWSTR BMOFFileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo);
|
|
};
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// CWinmgmtMofComp
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// Provides mofcomp functions for internal use.
|
|
//
|
|
//***************************************************************************
|
|
|
|
class CWinmgmtMofComp : IWinmgmtMofCompiler
|
|
{
|
|
protected:
|
|
long m_cRef;
|
|
public:
|
|
CWinmgmtMofComp(void)
|
|
{
|
|
m_cRef=1L;
|
|
ObjectCreated();
|
|
return;
|
|
};
|
|
|
|
~CWinmgmtMofComp(void)
|
|
{
|
|
ObjectDestroyed();
|
|
return;
|
|
}
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv)
|
|
{
|
|
*ppv=NULL;
|
|
|
|
if (IID_IUnknown==riid || IID_IWinmgmtMofCompiler==riid)
|
|
*ppv=this;
|
|
|
|
if (NULL!=*ppv)
|
|
{
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
return E_NOINTERFACE;
|
|
};
|
|
|
|
STDMETHODIMP_(ULONG) AddRef(void)
|
|
{
|
|
return ++m_cRef;
|
|
};
|
|
STDMETHODIMP_(ULONG) Release(void)
|
|
{
|
|
long lRef = InterlockedDecrement(&m_cRef);
|
|
if (0L == lRef)
|
|
delete this;
|
|
return lRef;
|
|
};
|
|
|
|
// IWinmgmtMofCompiler functions
|
|
|
|
HRESULT STDMETHODCALLTYPE WinmgmtCompileFile(
|
|
/* [in] */ LPWSTR FileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [in] */ IWbemServices __RPC_FAR *pOverride,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo);
|
|
|
|
HRESULT STDMETHODCALLTYPE WinmgmtCompileBuffer(
|
|
/* [in] */ long BuffSize,
|
|
/* [size_is][in] */ BYTE __RPC_FAR *pBuffer,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [in] */ IWbemServices __RPC_FAR *pOverride,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo);
|
|
};
|
|
|
|
class CMofCompOOP : public CWinmgmtMofComp
|
|
{
|
|
public:
|
|
STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv)
|
|
{
|
|
*ppv=NULL;
|
|
|
|
if (IID_IUnknown==riid)
|
|
*ppv=this;
|
|
else if (IID_IWinmgmtMofCompiler == riid)
|
|
*ppv=this;
|
|
else if (IID_IWinmgmtMofCompilerOOP == riid)
|
|
*ppv=this;
|
|
|
|
if (NULL != *ppv)
|
|
{
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
return E_NOINTERFACE;
|
|
};
|
|
};
|
|
|
|
#endif
|