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

模拟服务器

开发平台:

C/C++

  1. //***************************************************************************
  2. //
  3. // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
  4. //
  5. //  Provider.h
  6. //
  7. //  Purpose: declaration of Provider class
  8. //
  9. //***************************************************************************
  10. #if _MSC_VER > 1000
  11. #pragma once
  12. #endif
  13. #ifndef _PROVIDER_H__
  14. #define _PROVIDER_H__
  15. /////////////////////////////////////////////////////
  16. // INSTANCE Provider
  17. //
  18. // pure virtual base class for providers
  19. // holds instances
  20. // gathers information and instantiates instances
  21. /////////////////////////////////////////////////////
  22. class POLARITY Provider : public CThreadBase
  23. {
  24.     // CWbemProviderGlue needs to access some protected/private methods
  25.     // which we don't want to publish to just anyone.
  26.     friend class CWbemProviderGlue;
  27.     public:
  28.         Provider( LPCWSTR a_pszName, LPCWSTR a_pszNameSpace = NULL );
  29.         ~Provider();
  30.     protected:
  31.         /* Override These Methods To Implement Your Provider */
  32.         
  33.         // This is the entrypoint for changes.
  34.         // You are handed a changed instance.
  35.         // If you can make the changes - do so.
  36.         // If you cannot return an appropriate error code (WBEM_E_XXXXXXX)
  37.         // base object returns WBEM_E_PROVIDER_NOT_CAPABLE
  38.         virtual HRESULT PutInstance(const CInstance& newInstance, long lFlags = 0L);
  39.         // entrypoint to delete an instance
  40.         // examine the instance passed in, determine whether you can delete it
  41.         virtual HRESULT DeleteInstance(const CInstance& newInstance, long lFlags = 0L);
  42.         // execute a method
  43.         virtual HRESULT ExecMethod(const CInstance& cInstance, 
  44.                                    const BSTR bstrMethodName, 
  45.                                    CInstance *pInParams, 
  46.                                    CInstance *pOutParams, 
  47.                                    long lFlags = 0L);
  48.         // find and create all instances of your class
  49.         virtual HRESULT EnumerateInstances(MethodContext *pMethodContext, long lFlags = 0L);
  50.         // you will be given an object with the key properties filled in
  51.         // you need to fill in all of the rest of the properties, or
  52.         // return WBEM_E_NOT_FOUND if the object doesn't exist.
  53.         virtual HRESULT GetObject(CInstance *pInstance, long lFlags = 0L);
  54.         // You will be given an object with the key properties filled in.
  55.         // You can either fill in all the properties, or check the Query object
  56.         // to see what properties are required.  If you don't implement this method, the
  57.         // GetObject(CInstance, long) method will be called instead.
  58.         virtual HRESULT GetObject(CInstance *pInstance, long lFlags, CFrameworkQuery &Query);
  59.         // If a provider wants to process queries, they should override this
  60.         virtual HRESULT ExecQuery(MethodContext *pMethodContext, 
  61.                                   CFrameworkQuery& cQuery, 
  62.                                   long lFlags = 0L);
  63.         // flushes cache
  64.         // only override if you allocate memory that could be flushed
  65.         virtual void Flush(void);
  66.         /* Helpers - Use These, Do Not Override */
  67.         // allocate a new instance & return pointer to it
  68.         // the memory is your responsibility to Release()
  69.         // UNLESS you pass it off to Provider::Commit
  70.         CInstance *CreateNewInstance(MethodContext *pMethodContext);
  71.         // used to send your new instance back to the framework
  72.         // set bCache to true to cache object 
  73.         // !! caching is NOT IMPLEMENTED in this release !!
  74.         // do not delete or release the pointer once committed.
  75.         HRESULT Commit(CInstance *pInstance, bool bCache = false);
  76.         // Helper function for building a WBEM Object Path for a local Instance
  77.         bool GetLocalInstancePath( const CInstance *pInstance, CHString& strPath );
  78.         //   Builds a full instance path from a relative path
  79.         CHString MakeLocalPath( const CHString &strRelPath );
  80.         // Returns the computer name as a CHString.  Save yourself the os call,
  81.         // since we've got it hanging around anyway.
  82.         const CHString &GetLocalComputerName() {return s_strComputerName;}
  83.         const CHString &GetNamespace() {return m_strNameSpace;}
  84.         // sets the CreationClassName property to the name of this provider
  85.         bool SetCreationClassName(CInstance *pInstance);
  86.         // accesses the name of the provider
  87.         const CHString &GetProviderName() {return m_name;}
  88.         // Flag validation constants
  89.         enum FlagDefs
  90.         {
  91.             EnumerationFlags = (WBEM_FLAG_DIRECT_READ | WBEM_FLAG_SEND_STATUS),
  92.             GetObjFlags = (WBEM_FLAG_SEND_STATUS | WBEM_FLAG_DIRECT_READ),
  93.             MethodFlags = WBEM_FLAG_SEND_STATUS,
  94.             DeletionFlags = WBEM_FLAG_SEND_STATUS,
  95.             PutInstanceFlags = (WBEM_FLAG_CREATE_ONLY | WBEM_FLAG_CREATE_OR_UPDATE | WBEM_FLAG_UPDATE_ONLY | WBEM_FLAG_SEND_STATUS),
  96.             QueryFlags = WBEM_FLAG_SEND_STATUS | WBEM_FLAG_DIRECT_READ
  97.         };
  98.         // returns WBEM_E_UNSUPPORTED_PARAMETER or WBEM_S_NO_ERROR
  99.         HRESULT ValidateFlags(long lFlags, FlagDefs lAcceptableFlags);
  100.         // you can override the following to support flags 
  101.         // above and beyond those listed in FlagDefs above
  102.         virtual HRESULT ValidateEnumerationFlags(long lFlags);
  103.         virtual HRESULT ValidateGetObjFlags(long lFlags);
  104.         virtual HRESULT ValidateMethodFlags(long lFlags);
  105.         virtual HRESULT ValidateQueryFlags(long lFlags);
  106.         virtual HRESULT ValidateDeletionFlags(long lFlags);
  107.         virtual HRESULT ValidatePutInstanceFlags(long lFlags);
  108.         
  109.     private:
  110.         IWbemServices       *m_pIMosProvider;    // provides instances
  111.         CHString            m_name;             // name of this provider
  112.         CHString            m_strNameSpace;     // name of this provider's namespace
  113.         IWbemClassObject    *m_piClassObject;    // holds class object from which others are cloned.
  114.         static CHString     s_strComputerName;  // Holds the computer name for building
  115.                                                 // instance paths.
  116.         
  117.         BOOL ValidateIMOSPointer( void );       // This function ensures that our IMOS
  118.                                                 // pointer is available, and is called
  119.                                                 // by the framework entrypoint functions
  120.         /* Interfaces For Use by the Framework         */
  121.         HRESULT GetObject(  ParsedObjectPath *pParsedObjectPath, 
  122.                             MethodContext *pContext, long lFlags = 0L );
  123.         HRESULT ExecuteQuery( MethodContext *pContext, 
  124.                               CFrameworkQuery &pQuery, 
  125.                               long lFlags = 0L);
  126.         HRESULT CreateInstanceEnum( MethodContext *pContext, long lFlags = 0L );
  127.         HRESULT PutInstance( IWbemClassObject __RPC_FAR *pInst,
  128.                              long lFlags,
  129.                              MethodContext *pContext );
  130.         HRESULT DeleteInstance( ParsedObjectPath *pParsedObjectPath,
  131.                                 long lFlags,
  132.                                 MethodContext *pContext );
  133.         HRESULT ExecMethod( ParsedObjectPath *pParsedObjectPath,
  134.                             BSTR bstrMethodName,
  135.                             long lFlags,
  136.                             CInstance *pInParams,
  137.                             CInstance *pOutParams,
  138.                             MethodContext *pContext );
  139.         // Static helper function called by constructor to make sure the
  140.         // computer name variable is properly initialized.
  141.         static void WINAPI InitComputerName( void );
  142.         // Sets an instance key from a parsed object path.
  143.         BOOL SetKeyFromParsedObjectPath( CInstance *pInstance, 
  144.                                          ParsedObjectPath *pParsedObjectPath );
  145.         IWbemClassObject *GetClassObjectInterface(MethodContext *pMethodContext);
  146. };
  147. #endif