319 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/******************************************************************
 | 
						|
 | 
						|
Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved 
 | 
						|
 | 
						|
   %%7.CPP -- WMI provider class implementation
 | 
						|
 | 
						|
   Generated by Microsoft WMI Code Generation Engine
 | 
						|
  
 | 
						|
   TO DO: - See individual function headers
 | 
						|
          - When linking, make sure you link to framedyd.lib & 
 | 
						|
            msvcrtd.lib (debug) or framedyn.lib & msvcrt.lib (retail).
 | 
						|
 | 
						|
   Description: 
 | 
						|
   %%8
 | 
						|
  
 | 
						|
  
 | 
						|
******************************************************************/
 | 
						|
 | 
						|
#include <fwcommon.h>  // This must be the first include.
 | 
						|
 | 
						|
#include "%%7.h"
 | 
						|
 | 
						|
// TO DO: Replace "NameSpace" with the appropriate namespace for your
 | 
						|
//        provider instance.  For instance:  "root\\default or "root\\cimv2".
 | 
						|
//===================================================================
 | 
						|
%%B My%%7Set (PROVIDER_NAME_%%J, L"NameSpace") ;
 | 
						|
 | 
						|
// Property names
 | 
						|
//===============
 | 
						|
%%D
 | 
						|
/*****************************************************************************
 | 
						|
 *
 | 
						|
 *  FUNCTION    :   %%B::%%B
 | 
						|
 *
 | 
						|
 *  DESCRIPTION :   Constructor
 | 
						|
 *
 | 
						|
 *  INPUTS      :   none
 | 
						|
 *
 | 
						|
 *  RETURNS     :   nothing
 | 
						|
 *
 | 
						|
 *  COMMENTS    :   Calls the Provider constructor.
 | 
						|
 *
 | 
						|
 *****************************************************************************/
 | 
						|
%%B::%%B (LPCWSTR lpwszName, LPCWSTR lpwszNameSpace ) :
 | 
						|
    %%C(lpwszName, lpwszNameSpace)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
 *
 | 
						|
 *  FUNCTION    :   %%B::~%%B
 | 
						|
 *
 | 
						|
 *  DESCRIPTION :   Destructor
 | 
						|
 *
 | 
						|
 *  INPUTS      :   none
 | 
						|
 *
 | 
						|
 *  RETURNS     :   nothing
 | 
						|
 *
 | 
						|
 *  COMMENTS    : 
 | 
						|
 *
 | 
						|
 *****************************************************************************/
 | 
						|
%%B::~%%B ()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    :    %%B::EnumerateInstances
 | 
						|
*
 | 
						|
*  DESCRIPTION :    Returns all the instances of this class.
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to the MethodContext for communication with WinMgmt.
 | 
						|
*                   A long that contains the flags described in 
 | 
						|
*                   IWbemServices::CreateInstanceEnumAsync.  Note that the following
 | 
						|
*                   flags are handled by (and filtered out by) WinMgmt:
 | 
						|
*                       WBEM_FLAG_DEEP
 | 
						|
*                       WBEM_FLAG_SHALLOW
 | 
						|
*                       WBEM_FLAG_RETURN_IMMEDIATELY
 | 
						|
*                       WBEM_FLAG_FORWARD_ONLY
 | 
						|
*                       WBEM_FLAG_BIDIRECTIONAL
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_S_NO_ERROR if successful
 | 
						|
*
 | 
						|
*  COMMENTS    : TO DO: All instances on the machine should be returned here and
 | 
						|
*                       all properties that this class knows how to populate must 
 | 
						|
*                       be filled in.  If there are no instances, return 
 | 
						|
*                       WBEM_S_NO_ERROR.  It is not an error to have no instances.
 | 
						|
*                       If you are implementing a 'method only' provider, you
 | 
						|
*                       should remove this method.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::EnumerateInstances ( MethodContext* pMethodContext, long lFlags )
 | 
						|
{
 | 
						|
    HRESULT hRes = WBEM_S_NO_ERROR;
 | 
						|
 | 
						|
// TO DO: The following commented lines contain the 'set' methods for the
 | 
						|
//        properties entered for this class.  They are commented because they
 | 
						|
//        will NOT compile in their current form.  Each <Property Value> should be
 | 
						|
//        replaced with the appropriate value.  Also, consider creating a new
 | 
						|
//        method and moving these set statements and the ones from GetObject 
 | 
						|
//        into that routine.  See the framework sample (ReindeerProv.cpp) for 
 | 
						|
//        an example of how this might be done.
 | 
						|
//
 | 
						|
//        If the expectation is that there is more than one instance on the machine
 | 
						|
//        EnumerateInstances should loop through the instances and fill them accordingly.
 | 
						|
//
 | 
						|
//        Note that you must ALWAYS set ALL the key properties.  See the docs for
 | 
						|
//        further details.
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
//    while ((!<DoneEnumeratingInstances>) && (SUCCEEDED(hRes))) 
 | 
						|
//    {
 | 
						|
//
 | 
						|
//        // Create a new instance based on the passed-in MethodContext.
 | 
						|
//        // Note that CreateNewInstance may throw, but will never return NULL.
 | 
						|
//        CInstance* pInstance = CreateNewInstance(pMethodContext);
 | 
						|
//
 | 
						|
%%H//
 | 
						|
//        hRes = pInstance->Commit();
 | 
						|
//        pInstance->Release();
 | 
						|
//  }
 | 
						|
 | 
						|
    return hRes ;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    :    %%B::GetObject
 | 
						|
*
 | 
						|
*  DESCRIPTION :    Find a single instance based on the key properties for the
 | 
						|
*                   class. 
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to a CInstance object containing the key properties. 
 | 
						|
*                   A long that contains the flags described in 
 | 
						|
*                   IWbemServices::GetObjectAsync.  
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_S_NO_ERROR if the instance can be found
 | 
						|
*                   WBEM_E_NOT_FOUND if the instance described by the key properties 
 | 
						|
*                   could not be found
 | 
						|
*                   WBEM_E_FAILED if the instance could be found but another error 
 | 
						|
*                   occurred. 
 | 
						|
*
 | 
						|
*  COMMENTS    :    If you are implementing a 'method only' provider, you should
 | 
						|
*                   remove this method.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::GetObject ( CInstance* pInstance, long lFlags )
 | 
						|
{
 | 
						|
    // TO DO: The GetObject function is used to search for an instance of this
 | 
						|
    //        class on the machine based on the key properties.  Unlike
 | 
						|
    //        EnumerateInstances which finds all instances on the machine, GetObject
 | 
						|
    //        uses the key properties to find the matching single instance and 
 | 
						|
    //        returns that instance.
 | 
						|
    //
 | 
						|
    //        Use the CInstance Get functions (for example, call 
 | 
						|
    //        GetCHString(L"Name", sTemp)) against pInstance to see the key values 
 | 
						|
    //        the client requested.
 | 
						|
    HRESULT hr = WBEM_E_NOT_FOUND;
 | 
						|
 | 
						|
//    if (<InstanceExists>)
 | 
						|
//    {
 | 
						|
// TO DO: The following commented lines contain the 'set' methods for the
 | 
						|
//        properties entered for this class.  They are commented because they
 | 
						|
//        will NOT compile in their current form.  Each <Property Value> should be
 | 
						|
//        replaced with the appropriate value.
 | 
						|
//
 | 
						|
%%H//
 | 
						|
//        hr = WBEM_S_NO_ERROR;
 | 
						|
//    }
 | 
						|
 | 
						|
    return hr ;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    :    %%B::ExecQuery
 | 
						|
*
 | 
						|
*  DESCRIPTION :    You are passed a method context to use in the creation of 
 | 
						|
*                   instances that satisfy the query, and a CFrameworkQuery 
 | 
						|
*                   which describes the query.  Create and populate all 
 | 
						|
*                   instances which satisfy the query.  You may return more 
 | 
						|
*                   instances or more properties than are requested and WinMgmt 
 | 
						|
*                   will post filter out any that do not apply.
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to the MethodContext for communication with WinMgmt.
 | 
						|
*                   A query object describing the query to satisfy.
 | 
						|
*                   A long that contains the flags described in 
 | 
						|
*                   IWbemServices::CreateInstanceEnumAsync.  Note that the following
 | 
						|
*                   flags are handled by (and filtered out by) WinMgmt:
 | 
						|
*                       WBEM_FLAG_FORWARD_ONLY
 | 
						|
*                       WBEM_FLAG_BIDIRECTIONAL
 | 
						|
*                       WBEM_FLAG_ENSURE_LOCATABLE
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_E_PROVIDER_NOT_CAPABLE if queries not supported for 
 | 
						|
*                       this class or if the query is too complex for this class
 | 
						|
*                       to interpret.  The framework will call the EnumerateInstances
 | 
						|
*                       function instead and let Winmgmt post filter.
 | 
						|
*                   WBEM_E_FAILED if the query failed
 | 
						|
*                   WBEM_S_NO_ERROR if query was successful 
 | 
						|
*
 | 
						|
*  COMMENTS    : TO DO: Most providers will not need to implement this method.  If you don't, WinMgmt 
 | 
						|
*                       will call your enumerate function to get all the instances and perform the 
 | 
						|
*                       filtering for you.  Unless you expect SIGNIFICANT savings from implementing 
 | 
						|
*                       queries, you should remove this method.  You should also remove this method
 | 
						|
*                       if you are implementing a 'method only' provider.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::ExecQuery (MethodContext *pMethodContext, CFrameworkQuery& Query, long lFlags)
 | 
						|
{
 | 
						|
     return (WBEM_E_PROVIDER_NOT_CAPABLE);
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    : %%B::PutInstance
 | 
						|
*
 | 
						|
*  DESCRIPTION :    PutInstance should be used in provider classes that can 
 | 
						|
*                   write instance information back to the hardware or 
 | 
						|
*                   software.  For example: Win32_Environment will allow a 
 | 
						|
*                   PutInstance to create or update an environment variable.  
 | 
						|
*                   However, a class like MotherboardDevice will not allow 
 | 
						|
*                   editing of the number of slots, since it is difficult for 
 | 
						|
*                   a provider to affect that number.
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to a CInstance object containing the key properties. 
 | 
						|
*                   A long that contains the flags described in 
 | 
						|
*                   IWbemServices::PutInstanceAsync.  
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_E_PROVIDER_NOT_CAPABLE if PutInstance is not available
 | 
						|
*                   WBEM_E_FAILED if there is an error delivering the instance
 | 
						|
*                   WBEM_E_INVALID_PARAMETER if any of the instance properties 
 | 
						|
*                   are incorrect.
 | 
						|
*                   WBEM_S_NO_ERROR if instance is properly delivered
 | 
						|
*
 | 
						|
*  COMMENTS    : TO DO: If you don't intend to support writing to your provider, 
 | 
						|
*                       or are creating a 'method only' provider, remove this 
 | 
						|
*                       method.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::PutInstance ( const CInstance &Instance, long lFlags)
 | 
						|
{
 | 
						|
    // Use the CInstance Get functions (for example, call 
 | 
						|
    // GetCHString(L"Name", sTemp)) against Instance to see the key values 
 | 
						|
    // the client requested.
 | 
						|
 | 
						|
    return (WBEM_E_PROVIDER_NOT_CAPABLE);
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    :    %%B::DeleteInstance
 | 
						|
*
 | 
						|
*  DESCRIPTION :    DeleteInstance, like PutInstance, actually writes information
 | 
						|
*                   to the software or hardware.  For most hardware devices, 
 | 
						|
*                   DeleteInstance should not be implemented, but for software
 | 
						|
*                   configuration, DeleteInstance implementation is plausible.
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to a CInstance object containing the key properties. 
 | 
						|
*                   A long that contains the flags described in 
 | 
						|
*                   IWbemServices::DeleteInstanceAsync.  
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_E_PROVIDER_NOT_CAPABLE if DeleteInstance is not available.
 | 
						|
*                   WBEM_E_FAILED if there is an error deleting the instance.
 | 
						|
*                   WBEM_E_INVALID_PARAMETER if any of the instance properties 
 | 
						|
*                   are incorrect.
 | 
						|
*                   WBEM_S_NO_ERROR if instance is properly deleted.
 | 
						|
*
 | 
						|
*  COMMENTS    : TO DO: If you don't intend to support deleting instances or are
 | 
						|
*                       creating a 'method only' provider, remove this method.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::DeleteInstance ( const CInstance &Instance, long lFlags )
 | 
						|
{
 | 
						|
    // Use the CInstance Get functions (for example, call 
 | 
						|
    // GetCHString(L"Name", sTemp)) against Instance to see the key values 
 | 
						|
    // the client requested.
 | 
						|
 | 
						|
    return (WBEM_E_PROVIDER_NOT_CAPABLE);
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
*
 | 
						|
*  FUNCTION    :    %%B::ExecMethod
 | 
						|
*
 | 
						|
*  DESCRIPTION :    Override this function to provide support for methods.  
 | 
						|
*                   A method is an entry point for the user of your provider 
 | 
						|
*                   to request your class perform some function above and 
 | 
						|
*                   beyond a change of state.  (A change of state should be 
 | 
						|
*                   handled by PutInstance() )
 | 
						|
*
 | 
						|
*  INPUTS      :    A pointer to a CInstance containing the instance the method was executed against.
 | 
						|
*                   A string containing the method name
 | 
						|
*                   A pointer to the CInstance which contains the IN parameters.
 | 
						|
*                   A pointer to the CInstance to contain the OUT parameters.
 | 
						|
*                   A set of specialized method flags
 | 
						|
*
 | 
						|
*  RETURNS     :    WBEM_E_PROVIDER_NOT_CAPABLE if not implemented for this class
 | 
						|
*                   WBEM_S_NO_ERROR if method executes successfully
 | 
						|
*                   WBEM_E_FAILED if error occurs executing method 
 | 
						|
*
 | 
						|
*  COMMENTS    : TO DO: If you don't intend to support Methods, remove this method.
 | 
						|
*
 | 
						|
*****************************************************************************/
 | 
						|
HRESULT %%B::ExecMethod ( const CInstance& Instance,
 | 
						|
                        const BSTR bstrMethodName,
 | 
						|
                        CInstance *pInParams,
 | 
						|
                        CInstance *pOutParams,
 | 
						|
                        long lFlags)
 | 
						|
{
 | 
						|
    // For non-static methods, use the CInstance Get functions (for example, 
 | 
						|
    // call GetCHString(L"Name", sTemp)) against Instance to see the key 
 | 
						|
    // values the client requested.
 | 
						|
 | 
						|
    return (WBEM_E_PROVIDER_NOT_CAPABLE);
 | 
						|
}
 | 
						|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
The above sequence of tildes must not be removed.  This file is included
 | 
						|
in MOENGINE as a resource, and is not NULL-terminated, requiring a unique
 | 
						|
substring to identify the end of file. |