MethodCo.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
- //***************************************************************************
- //
- // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
- //
- // MethodCo.h
- //
- // Purpose: declaration of MethodContext class
- //
- //***************************************************************************
- #if _MSC_VER > 1000
- #pragma once
- #endif
- #ifndef _METHOD_CONTEXT_H__
- #define _METHOD_CONTEXT_H__
- //#include "ThrdBase.h"
- //#include "refptrco.h"
- #ifdef PROVIDER_INSTRUMENTATION
- #include <stopwatch.h>
- #endif
- class CInstance;
- class Provider;
- class MethodContext;
- class CWbemProviderGlue;
- class InternalMethodContextAsynch;
- typedef HRESULT (WINAPI *LPProviderInstanceCallback)(Provider *pProvider, CInstance *pInstance, MethodContext *pContext, void *pUserData);
- //////////////////////////////////////////////////////
- //
- // STRUCT MethodContext
- //
- // a little something to make sure we can keep our threads from getting tangled
- // idea is that there is one MethodContext for each request from CIMOM or another provider
- // pointers are passed around.
- //////////////////////////////////////////////////////
- class POLARITY MethodContext : public CThreadBase
- {
- public:
- friend InternalMethodContextAsynch;
- friend CWbemProviderGlue;
- MethodContext(IWbemContext __RPC_FAR *piContext, CWbemProviderGlue *pGlue);
- ~MethodContext();
-
- virtual HRESULT Commit(CInstance *pInstance) = 0;
- virtual IWbemContext __RPC_FAR *GetIWBEMContext();
-
- LONG AddRef(void);
- LONG Release(void);
- virtual void QueryPostProcess(void);
-
- bool SetStatusObject(IWbemClassObject *pObj);
- IWbemClassObject __RPC_FAR *GetStatusObject();
- #ifdef PROVIDER_INSTRUMENTATION
- StopWatch *pStopWatch;
- #endif
-
- private:
- CWbemProviderGlue* GetProviderGlue();
- CWbemProviderGlue *m_pGlue;
- IWbemContext __RPC_FAR *m_pContext;
- IWbemClassObject __RPC_FAR *m_pStatusObject;
- };
- // for queries and suchlike that originate in CIMOM
- class
- __declspec(uuid("9113D3B4-D114-11d2-B35D-00104BC97924"))
- ExternalMethodContext : public MethodContext
- {
- public:
- ExternalMethodContext(IWbemObjectSink __RPC_FAR *pResponseHandler,
- IWbemContext __RPC_FAR *pContext,
- CWbemProviderGlue *pGlue,
- void *pReserved = NULL
- );
-
- HRESULT Commit(CInstance *pInstance);
- virtual void QueryPostProcess(void);
-
- LONG AddRef(void);
- LONG Release(void);
-
- private:
- IWbemObjectSink __RPC_FAR *m_pResponseHandler;
- void *m_pReserved;
- };
- // for queries and suchlike that come from within.
- // contains a list of objects returned.
- class
- __declspec(uuid("6AF4B074-D121-11d2-B35D-00104BC97924"))
- InternalMethodContext : public MethodContext
- {
- public:
- InternalMethodContext(TRefPointerCollection<CInstance> *pList ,
- IWbemContext __RPC_FAR *pContext,
- CWbemProviderGlue *pGlue);
- ~InternalMethodContext();
-
- HRESULT Commit(CInstance *pInstance);
-
- LONG AddRef(void);
- LONG Release(void);
-
- private:
- TRefPointerCollection<CInstance> *m_pInstances;
- };
- // for queries and suchlike that come from within.
- // "Asynch" is a bit of a misnomer - but it does help support
- // asynchronous calls, in that each instance committed is routed
- // to a callback function supplied by the requester
- class
- __declspec(uuid("D98A82E8-D121-11d2-B35D-00104BC97924"))
- InternalMethodContextAsynch : public MethodContext
- {
- public:
- InternalMethodContextAsynch(Provider *pThat,
- LPProviderInstanceCallback pCallback,
- IWbemContext __RPC_FAR *pContext,
- MethodContext *pUsersContext,
- void *pUserData);
- ~InternalMethodContextAsynch();
-
- HRESULT Commit(CInstance *pInstance);
-
- LONG AddRef(void);
- LONG Release(void);
-
- private:
- Provider *m_pThat;
- LPProviderInstanceCallback m_pCallback;
- void *m_pUserData;
- MethodContext *m_pUsersContext;
- };
- #endif