MethodCo.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //***************************************************************************
  2. //
  3. // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
  4. //
  5. //  MethodCo.h
  6. //
  7. //  Purpose: declaration of MethodContext class
  8. //
  9. //***************************************************************************
  10. #if _MSC_VER > 1000
  11. #pragma once
  12. #endif
  13. #ifndef _METHOD_CONTEXT_H__
  14. #define _METHOD_CONTEXT_H__
  15. //#include "ThrdBase.h"
  16. //#include "refptrco.h"
  17. #ifdef PROVIDER_INSTRUMENTATION
  18.     #include <stopwatch.h>
  19. #endif
  20. class CInstance;
  21. class Provider;
  22. class MethodContext;
  23. class CWbemProviderGlue;
  24. class InternalMethodContextAsynch;
  25. typedef HRESULT (WINAPI *LPProviderInstanceCallback)(Provider *pProvider, CInstance *pInstance, MethodContext *pContext, void *pUserData);
  26. //////////////////////////////////////////////////////
  27. //
  28. //  STRUCT MethodContext
  29. //
  30. // a little something to make sure we can keep our threads from getting tangled
  31. // idea is that there is one MethodContext for each request from CIMOM or another provider
  32. // pointers are passed around.
  33. //////////////////////////////////////////////////////
  34. class POLARITY MethodContext : public CThreadBase
  35. {
  36. public:
  37.     friend InternalMethodContextAsynch;
  38.     friend CWbemProviderGlue;
  39.     MethodContext(IWbemContext   __RPC_FAR *piContext, CWbemProviderGlue *pGlue);
  40.     ~MethodContext();
  41.     
  42.     virtual HRESULT Commit(CInstance *pInstance) = 0;
  43.     virtual IWbemContext __RPC_FAR *GetIWBEMContext();
  44.     
  45.     LONG AddRef(void);
  46.     LONG Release(void);
  47.     virtual void QueryPostProcess(void);
  48.         
  49.     bool SetStatusObject(IWbemClassObject *pObj);
  50.     IWbemClassObject __RPC_FAR *GetStatusObject();
  51. #ifdef PROVIDER_INSTRUMENTATION
  52.     StopWatch *pStopWatch;
  53. #endif
  54.     
  55. private:
  56.     CWbemProviderGlue* GetProviderGlue();
  57.     CWbemProviderGlue   *m_pGlue;
  58.     IWbemContext        __RPC_FAR *m_pContext;
  59.     IWbemClassObject    __RPC_FAR *m_pStatusObject;
  60. };
  61. // for queries and suchlike that originate in CIMOM
  62. class 
  63. __declspec(uuid("9113D3B4-D114-11d2-B35D-00104BC97924")) 
  64. ExternalMethodContext  : public MethodContext
  65. {
  66. public:
  67.     ExternalMethodContext(IWbemObjectSink __RPC_FAR *pResponseHandler,
  68.                           IWbemContext    __RPC_FAR *pContext,
  69.                           CWbemProviderGlue *pGlue,
  70.                           void                      *pReserved = NULL
  71.                           );
  72.     
  73.     HRESULT Commit(CInstance *pInstance);
  74.     virtual void QueryPostProcess(void);
  75.     
  76.     LONG AddRef(void);
  77.     LONG Release(void);
  78.     
  79. private:
  80.     IWbemObjectSink __RPC_FAR *m_pResponseHandler;
  81.     void                      *m_pReserved;
  82. };
  83. // for queries and suchlike that come from within.
  84. // contains a list of objects returned. 
  85. class 
  86. __declspec(uuid("6AF4B074-D121-11d2-B35D-00104BC97924"))
  87. InternalMethodContext : public MethodContext
  88. {
  89. public:
  90.     InternalMethodContext(TRefPointerCollection<CInstance> *pList ,
  91.                           IWbemContext    __RPC_FAR *pContext,
  92.                           CWbemProviderGlue *pGlue);
  93.     ~InternalMethodContext();
  94.     
  95.     HRESULT Commit(CInstance *pInstance);
  96.     
  97.     LONG AddRef(void);
  98.     LONG Release(void);
  99.     
  100. private:
  101.     TRefPointerCollection<CInstance> *m_pInstances;
  102. };
  103. // for queries and suchlike that come from within.
  104. // "Asynch" is a bit of a misnomer - but it does help support
  105. // asynchronous calls, in that each instance committed is routed
  106. // to a callback function supplied by the requester
  107. class 
  108. __declspec(uuid("D98A82E8-D121-11d2-B35D-00104BC97924"))
  109. InternalMethodContextAsynch : public MethodContext
  110. {
  111. public:
  112.     InternalMethodContextAsynch(Provider *pThat,
  113.                                 LPProviderInstanceCallback pCallback,
  114.                                 IWbemContext __RPC_FAR *pContext,
  115.                                 MethodContext *pUsersContext,
  116.                                 void *pUserData);
  117.     ~InternalMethodContextAsynch();
  118.     
  119.     HRESULT Commit(CInstance *pInstance);
  120.     
  121.     LONG AddRef(void);
  122.     LONG Release(void);
  123.     
  124. private:
  125.     Provider *m_pThat;
  126.     LPProviderInstanceCallback m_pCallback;
  127.     void *m_pUserData;
  128.     MethodContext *m_pUsersContext;
  129. };
  130. #endif