890 lines
19 KiB
C++
890 lines
19 KiB
C++
/*
|
|
******************************************************************************
|
|
******************************************************************************
|
|
*
|
|
*
|
|
* INTEL CORPORATION PROPRIETARY INFORMATION
|
|
* This software is supplied under the terms of a license agreement or
|
|
* nondisclosure agreement with Intel Corporation and may not be copied or
|
|
* disclosed except in accordance with the terms of that agreement.
|
|
*
|
|
* Copyright (c) 1997, 1998 Intel Corporation All Rights Reserved
|
|
******************************************************************************
|
|
******************************************************************************
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
#include "dmipch.h" // precompiled header for dmi provider
|
|
|
|
#include "WbemDmiP.h" // project wide include
|
|
|
|
#include "Strings.h"
|
|
|
|
#include "CimClass.h"
|
|
|
|
#include "DmiData.h"
|
|
|
|
#include "WbemLoopBack.h"
|
|
|
|
#include "Trace.h"
|
|
|
|
#include "Exception.h"
|
|
|
|
|
|
#define QUAL_FLAGS WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE \
|
|
| WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS
|
|
|
|
#define NON_INHERIT_QUAL_FLAGS WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
CCimObject::CCimObject()
|
|
{
|
|
m_pCimObject = NULL;
|
|
m_pIUnk = NULL;
|
|
m_pIDispatch = NULL;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
CCimObject::~CCimObject()
|
|
{
|
|
RELEASE ( m_pIUnk );
|
|
RELEASE ( m_pIDispatch );
|
|
|
|
Release ();
|
|
|
|
};
|
|
|
|
void CCimObject::Release ()
|
|
{
|
|
|
|
if ( m_pCimObject)
|
|
{
|
|
LONG l;
|
|
|
|
l = m_pCimObject->Release ();
|
|
|
|
m_pCimObject = NULL;
|
|
|
|
//STAT_TRACE ( L"CIM Object %lx Release %lu" , this , l );
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddProperty(LPWSTR wszName, CVariant& varVal, LONG lAccess )
|
|
{
|
|
//DEV_TRACE ( L"\t\tCCimClassWrap::AddProperty(%lX, %s)", m_pCimObject,
|
|
// wszName );
|
|
|
|
// STAT_TRACE(L"[%s],[%s]" , wszName , varVal.GetValue () ) ;
|
|
SCODE result = m_pCimObject->Put( wszName, NO_FLAGS , varVal,
|
|
EMPTY_VARIANT );
|
|
|
|
if (FAILED(result))
|
|
{
|
|
throw CException ( WBEM_E_FAILED, IDS_ADDPROP_FAIL , NO_STRING ,
|
|
wszName );
|
|
}
|
|
|
|
CVariant var( ( VARIANT_BOOL ) VARIANT_TRUE);
|
|
|
|
if ( lAccess == READ_ONLY || lAccess == READ_WRITE )
|
|
AddPropertyQualifier( wszName, READ_QUALIFIER, var );
|
|
|
|
if ( lAccess == WRITE_ONLY || lAccess == READ_WRITE )
|
|
AddPropertyQualifier( wszName, WRITE_QUALIFIER, var);
|
|
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddProperty(LPWSTR wszName, VARTYPE vt, LONG lAccess )
|
|
{
|
|
CVariant var;
|
|
var.Null();
|
|
|
|
//DEV_TRACE ( L"\t\tCCimClassWrap::AddProperty(%lX, %s)", m_pCimObject,
|
|
// wszName ) ;
|
|
|
|
SCODE result = m_pCimObject->Put( wszName, NO_FLAGS , var, vt);
|
|
|
|
if (FAILED(result))
|
|
{
|
|
throw CException ( WBEM_E_FAILED, IDS_ADDPROP_FAIL , NO_STRING ,
|
|
wszName );
|
|
}
|
|
|
|
var.Set( ( VARIANT_BOOL ) VARIANT_TRUE);
|
|
|
|
if ( lAccess == READ_ONLY || lAccess == READ_WRITE )
|
|
AddPropertyQualifier( wszName, READ_QUALIFIER, var );
|
|
|
|
if( lAccess == WRITE_ONLY || lAccess == READ_WRITE )
|
|
AddPropertyQualifier( wszName, WRITE_QUALIFIER, var);
|
|
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddPropertyQualifier( LPWSTR wszName, LPWSTR wszQualifier,
|
|
CVariant& cvValue)
|
|
{
|
|
SCODE result = NO_ERROR;
|
|
IWbemQualifierSet *pIQS = NULL;
|
|
|
|
// STAT_TRACE(L"[%s],[%s],[%s]" , wszName , wszQualifier , cvValue.GetValue () ) ;
|
|
|
|
if( FAILED ( result = m_pCimObject->GetPropertyQualifierSet( wszName,
|
|
&pIQS ) ) )
|
|
{
|
|
CString cszT;
|
|
|
|
cszT.LoadString ( IDS_TO );
|
|
|
|
cszT.Prepend ( wszQualifier );
|
|
cszT.Append ( wszName ) ;
|
|
|
|
throw CException ( WBEM_E_FAILED, IDS_ADDPROPQUAL_FAIL , NO_STRING ,
|
|
cszT );
|
|
}
|
|
|
|
result = pIQS->Put( wszQualifier, cvValue, QUAL_FLAGS );
|
|
|
|
RELEASE(pIQS);
|
|
|
|
if( FAILED(result) )
|
|
{
|
|
CString cszT;
|
|
|
|
cszT.LoadString ( IDS_TO );
|
|
|
|
cszT.Prepend ( wszQualifier );
|
|
|
|
cszT.Append ( wszName ) ;
|
|
|
|
throw CException ( WBEM_E_FAILED, IDS_ADDPROPQUAL_FAIL , NO_STRING ,
|
|
cszT );
|
|
}
|
|
|
|
//DEV_TRACE ( L"\t\tCCimClassWrap::AddPropertyQualifier()" );
|
|
//DEV_TRACE ( L"\t\t\tprop name = %s" , wszName);
|
|
//DEV_TRACE ( L"\t\t\tqual name = %s" , wszQualifier);
|
|
//DEV_TRACE ( L"\t\t\tpIClass = %lX" , m_pCimObject);
|
|
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddClassQualifier(LPWSTR wszQualifier, CVariant& cvValue )
|
|
{
|
|
SCODE result = NO_ERROR;
|
|
IWbemQualifierSet *pIQS = NULL;
|
|
CVariant var;
|
|
|
|
if ( FAILED ( result = m_pCimObject->GetQualifierSet( &pIQS ) ))
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDCLASSQUAL , NO_STRING ,
|
|
wszQualifier );
|
|
}
|
|
|
|
result = pIQS->Put( wszQualifier, cvValue, QUAL_FLAGS );
|
|
|
|
RELEASE(pIQS);
|
|
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDCLASSQUAL , NO_STRING ,
|
|
wszQualifier );
|
|
}
|
|
|
|
/* DEV_TRACE ( L"\t\tCCimClassWrap::AddClassQualifier()\n\tqual name \
|
|
= %s\n\tpIClass = %lX", wszQualifier, m_pCimObject ) ;
|
|
*/
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddNonInheritClassQualifier(LPWSTR wszQualifier, CVariant& cvValue )
|
|
{
|
|
SCODE result = NO_ERROR;
|
|
IWbemQualifierSet *pIQS = NULL;
|
|
CVariant var;
|
|
|
|
if ( FAILED ( result = m_pCimObject->GetQualifierSet( &pIQS ) ))
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDCLASSQUAL , NO_STRING ,
|
|
wszQualifier );
|
|
}
|
|
|
|
result = pIQS->Put( wszQualifier, cvValue, NON_INHERIT_QUAL_FLAGS );
|
|
|
|
RELEASE(pIQS);
|
|
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDCLASSQUAL , NO_STRING ,
|
|
wszQualifier );
|
|
}
|
|
|
|
/* DEV_TRACE ( L"\t\tCCimClassWrap::AddClassQualifier()\n\tqual name \
|
|
= %s\n\tpIClass = %lX", wszQualifier, m_pCimObject ) ;
|
|
*/
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddMethod(
|
|
|
|
CWbemLoopBack*pWbem,
|
|
IWbemContext *pCtx ,
|
|
LPWSTR wszMethodName,
|
|
LPWSTR wszInParamsClassName,
|
|
CCimObject &ccimParamsClass
|
|
)
|
|
{
|
|
SCODE result = WBEM_NO_ERROR;
|
|
IWbemQualifierSet *iwqQualifierSet = NULL ;
|
|
CVariant cvValue;
|
|
CBstr cbName;
|
|
|
|
cbName.Set ( wszMethodName );
|
|
cvValue.Set ( VARIANT_TRUE );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( cbName , NO_FLAGS ,
|
|
cvValue , NULL ) ))
|
|
{
|
|
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
CBstr t_PropertyName = NULL ;
|
|
CIMTYPE t_Type = 0 ;
|
|
long t_Flavor = 0 ;
|
|
CVariant t_Variant ;
|
|
|
|
result = m_pCimObject->PutMethod ( wszMethodName , 0 ,
|
|
(IWbemClassObject*) ccimParamsClass, NULL ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
result = m_pCimObject->GetMethodQualifierSet ( wszMethodName ,
|
|
&iwqQualifierSet ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
t_Variant.Set ( VARIANT_TRUE ) ;
|
|
result = iwqQualifierSet->Put ( L"Implemented" , t_Variant , 0 ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
t_Variant.Set ( VARIANT_TRUE ) ;
|
|
result = iwqQualifierSet->Put ( L"Static" , t_Variant , 0 ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
cbName.Set ( INPARAMS_QUALIFIER );
|
|
cvValue.Set ( wszInParamsClassName );
|
|
|
|
if(FAILED( iwqQualifierSet->Put( cbName , cvValue , QUAL_FLAGS )))
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
cbName.Set ( OUTPARAMS_QUALIFIER );
|
|
cvValue.Set ( NONE_STR );
|
|
|
|
result = iwqQualifierSet->Put( cbName , cvValue , QUAL_FLAGS);
|
|
|
|
RELEASE(iwqQualifierSet);
|
|
|
|
if( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::AddInOutMethod(
|
|
|
|
CWbemLoopBack*pWbem,
|
|
IWbemContext *pCtx ,
|
|
LPWSTR wszMethodName,
|
|
LPWSTR wszInParamsClassName,
|
|
CCimObject &ccimInParamsClass,
|
|
LPWSTR wszOutParamsClassName,
|
|
CCimObject &ccimOutParamsClass
|
|
)
|
|
{
|
|
SCODE result = WBEM_NO_ERROR;
|
|
IWbemQualifierSet *iwqQualifierSet = NULL ;
|
|
CVariant cvValue;
|
|
CBstr cbName;
|
|
|
|
cbName.Set ( wszMethodName );
|
|
cvValue.Set ( VARIANT_TRUE );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( cbName , NO_FLAGS ,
|
|
cvValue , NULL ) ))
|
|
{
|
|
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
CBstr t_PropertyName = NULL ;
|
|
CIMTYPE t_Type = 0 ;
|
|
long t_Flavor = 0 ;
|
|
CVariant t_Variant ;
|
|
|
|
result = m_pCimObject->PutMethod ( wszMethodName , 0 ,
|
|
(IWbemClassObject*) ccimInParamsClass , (IWbemClassObject*) ccimOutParamsClass ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
result = m_pCimObject->GetMethodQualifierSet ( wszMethodName ,
|
|
&iwqQualifierSet ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
t_Variant.Set ( VARIANT_TRUE ) ;
|
|
result = iwqQualifierSet->Put ( L"Implemented" , t_Variant , 0 ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
t_Variant.Set ( VARIANT_TRUE ) ;
|
|
result = iwqQualifierSet->Put ( L"Static" , t_Variant , 0 ) ;
|
|
if ( FAILED ( result ) )
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
#if 0
|
|
cbName.Set ( CIMTYPE_QUALIFIER );
|
|
cvValue.Set ( METHOD_QUAL_VAL );
|
|
|
|
if(FAILED( iwqQualifierSet->Put( cbName , cvValue , QUAL_FLAGS )))
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
#endif 0
|
|
|
|
cbName.Set ( INPARAMS_QUALIFIER );
|
|
cvValue.Set ( wszInParamsClassName );
|
|
|
|
if(FAILED( iwqQualifierSet->Put( cbName , cvValue , QUAL_FLAGS )))
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
cbName.Set ( OUTPARAMS_QUALIFIER );
|
|
cvValue.Set ( wszOutParamsClassName );
|
|
|
|
if(FAILED( iwqQualifierSet->Put( cbName , cvValue , QUAL_FLAGS )))
|
|
{
|
|
RELEASE(iwqQualifierSet);
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
RELEASE(iwqQualifierSet);
|
|
|
|
if( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_ADDMETHOD_FAIL , NO_STRING ,
|
|
wszMethodName );
|
|
}
|
|
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::Set(IWbemClassObject* pI)
|
|
{
|
|
m_pCimObject = pI;
|
|
m_pCimObject->AddRef();
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::GetProperty( LPWSTR wszName, CVariant& cvValue)
|
|
{
|
|
SCODE result = WBEM_NO_ERROR ;
|
|
|
|
if ( FAILED ( result = m_pCimObject->Get( wszName, NO_FLAGS , cvValue,
|
|
NULL, NULL) ))
|
|
{
|
|
|
|
throw CException ( WBEM_E_FAILED , IDS_GETPROP_FAIL , NO_STRING ,
|
|
CString ( result ) );
|
|
}
|
|
|
|
/* MOT_TRACE ( L"\tMOT... Read CIM Object property %s = %s)" ,
|
|
wszName , cvValue.GetBstr() ) ;
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::GetPropertyQualifer( BSTR bstrPropertyName,
|
|
BSTR bstrQualifierName, CVariant& cvValue)
|
|
{
|
|
IWbemQualifierSet* pIQs= NULL;
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
if ( SUCCEEDED ( result = m_pCimObject->GetPropertyQualifierSet(
|
|
bstrPropertyName, &pIQs) ))
|
|
{
|
|
result = pIQs->Get( bstrQualifierName, NO_FLAGS , cvValue, NULL);
|
|
}
|
|
|
|
RELEASE(pIQs);
|
|
|
|
if ( FAILED ( result ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_GETPROPQUAL_FAIL , NO_STRING ,
|
|
bstrPropertyName );
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::PutPropertyValue(LPWSTR wszName, CVariant& cvValue)
|
|
{
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
CBstr cbName;
|
|
|
|
cbName.Set ( wszName );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( cbName, NO_FLAGS , cvValue,
|
|
NULL) ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_PUTPROPVAL_FAIL , NO_STRING ,
|
|
wszName );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::Create(CWbemLoopBack* pWbem, CVariant& varName,
|
|
IWbemContext* pICtx )
|
|
{
|
|
STAT_TRACE ( L"\t\tCreating CIM class %s", varName.GetBstr() );
|
|
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
Release();
|
|
|
|
pWbem->CreateNewClass(&m_pCimObject, pICtx );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( CLASS_NAME, NO_FLAGS , varName,
|
|
NULL) ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_CREATECLASS_FAIL , NO_STRING ,
|
|
varName.GetBstr() );
|
|
}
|
|
|
|
CVariant cvValue;
|
|
|
|
cvValue.Set ( ( VARIANT_BOOL ) VARIANT_TRUE);
|
|
|
|
AddClassQualifier( DYNAMIC_QUALIFIER, cvValue );
|
|
|
|
cvValue.Set ( PROVIDER_NAME );
|
|
|
|
AddClassQualifier( PROVIDER_QUALIFIER, cvValue );
|
|
|
|
//STAT_TRACE ( L"CIM Object %lx created create 2" , this );
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::CreateAbstract(CWbemLoopBack* pWbem, CVariant& varName,
|
|
IWbemContext* pICtx )
|
|
{
|
|
STAT_TRACE ( L"\t\tCreating CIM class %s", varName.GetBstr() );
|
|
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
Release();
|
|
|
|
pWbem->CreateNewClass(&m_pCimObject, pICtx );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( CLASS_NAME, NO_FLAGS , varName,
|
|
NULL) ) )
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_CREATECLASS_FAIL , NO_STRING ,
|
|
varName.GetBstr() );
|
|
}
|
|
|
|
CVariant cvValue;
|
|
|
|
cvValue.Set ( ( VARIANT_BOOL ) VARIANT_TRUE);
|
|
|
|
AddNonInheritClassQualifier( ABSTRACT_QUALIFIER, cvValue );
|
|
|
|
//STAT_TRACE ( L"CIM Object %lx created create 2" , this );
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::Create(CWbemLoopBack* pWbem, LPWSTR wszSuperClass,
|
|
CVariant& varName, IWbemContext* pICtx )
|
|
{
|
|
STAT_TRACE ( L"\t\tCreating CIM class %s derived from %s", varName.GetBstr() ,
|
|
wszSuperClass);
|
|
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
Release();
|
|
|
|
pWbem->CreateNewDerivedClass( &m_pCimObject, wszSuperClass, pICtx );
|
|
|
|
if ( FAILED ( result = m_pCimObject->Put( CLASS_NAME, NO_FLAGS , varName,
|
|
NULL) ))
|
|
{
|
|
CString cszT;
|
|
|
|
cszT.LoadString ( IDS_DERIVED_FROM );
|
|
|
|
cszT.Prepend ( varName.GetBstr() ) ;
|
|
|
|
cszT.Append ( wszSuperClass );
|
|
|
|
throw CException ( WBEM_E_FAILED , IDS_CREATEDCLASS_FAIL , NO_STRING ,
|
|
cszT );
|
|
}
|
|
|
|
CVariant cvValue;
|
|
|
|
cvValue.Set ( ( VARIANT_BOOL ) VARIANT_TRUE);
|
|
|
|
AddClassQualifier( DYNAMIC_QUALIFIER, cvValue );
|
|
|
|
cvValue.Set ( PROVIDER_NAME );
|
|
|
|
AddClassQualifier( PROVIDER_QUALIFIER, cvValue );
|
|
|
|
//STAT_TRACE ( L"CIM Object %lx created create 1" , this );
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::Spawn( CCimObject& Class )
|
|
{
|
|
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
RELEASE ( m_pCimObject ) ;
|
|
|
|
if ( FAILED ( result = ( (IWbemClassObject*) Class)->
|
|
SpawnInstance( 0L, &m_pCimObject) ))
|
|
{
|
|
throw CException ( WBEM_E_FAILED , IDS_SPAWN_FAIL , NO_STRING ,
|
|
CString ( result ) );
|
|
}
|
|
|
|
//STAT_TRACE ( L"CIM Instance %lX spawned from %lX " , (LPWSTR)this , &Class );
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Func:
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Returns:
|
|
//
|
|
// In Params:
|
|
//
|
|
// Out Params:
|
|
//
|
|
// Note:
|
|
//
|
|
//***************************************************************************
|
|
void CCimObject::GetNames ( CBstr& cbQualifier , LONG lFlags ,
|
|
SAFEARRAY** ppsa )
|
|
{
|
|
|
|
SCODE result = WBEM_NO_ERROR;
|
|
|
|
if (FAILED (result = m_pCimObject->GetNames( cbQualifier, lFlags, NULL,
|
|
ppsa ) ) )
|
|
{
|
|
throw CException ( result ,IDS_GETNAMES_FAIL , NO_STRING ,
|
|
CString ( result ) );
|
|
}
|
|
|
|
} |