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. |