Leaked source code of windows server 2003
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

/*++
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