windows-nt/Source/XPSP1/NT/base/cluster/wmiprovider/provbase.cpp
2020-09-26 16:20:57 +08:00

174 lines
3.6 KiB
C++

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999-2000 Microsoft Corporation
//
// Module Name:
// CProvBase.cpp
//
// Description:
// Implementation of CProvBase class
//
// Author:
// Henry Wang (HenryWa) 24-AUG-1999
//
//
//////////////////////////////////////////////////////////////////////////////
#include "Pch.h"
#include "ProvBase.h"
//****************************************************************************
//
// CProvBase
//
//****************************************************************************
//////////////////////////////////////////////////////////////////////////////
//++
//
// CProvBase::CProvBase(
// LPCWSTR pwszNameIn,
// CWbemServices * pNamespaceIn
// )
//
// Description:
// Constructor.
//
// Arguments:
// pwszNameIn -- Class name
// pNamespaceIn -- Namespace
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
CProvBase::CProvBase(
LPCWSTR pwszNameIn,
CWbemServices * pNamespaceIn
)
: m_pNamespace( NULL )
, m_pClass( NULL )
{
SCODE sc;
m_pNamespace = pNamespaceIn;
m_bstrClassName = pwszNameIn;
sc = m_pNamespace->GetObject(
m_bstrClassName,
0,
0,
&m_pClass,
NULL
);
// failed to construct object,
if ( FAILED( sc ) )
{
throw CProvException( sc );
}
} //*** CProvBase::CProvBase()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CProvBase::~CProvBase( void )
//
// Description:
// Destructor.
//
// Arguments:
// None.
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
CProvBase::~CProvBase( void )
{
if ( m_pClass != NULL )
{
m_pClass->Release();
}
} //*** CProvBase::~CProvBase()
//****************************************************************************
//
// CProvBaseAssociation
//
//****************************************************************************
//////////////////////////////////////////////////////////////////////////////
//++
//
// void
// CProvBaseAssociation::GetTypeName(
// _bstr_t & rbstrClassNameOut,
// _bstr_t bstrPropertyIn
// )
//
// Description:
// Get the type of a property.
//
// Arguments:
// rbstrClassNameOut -- Receives type name string.
// bstrPropertyIn -- Property name.
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
void
CProvBaseAssociation::GetTypeName(
_bstr_t & rbstrClassNameOut,
_bstr_t bstrPropertyIn
)
{
CError er;
IWbemQualifierSet * pQualifier;
_variant_t var;
_bstr_t bstrTemp;
LPCWSTR pwsz, pwsz1;
er = m_pClass->GetPropertyQualifierSet(
bstrPropertyIn,
&pQualifier
);
if ( er != WBEM_S_NO_ERROR ) {
return;
}
er = pQualifier->Get(
PVD_WBEM_QUA_CIMTYPE,
0,
&var,
NULL
);
if ( er != WBEM_S_NO_ERROR ) {
goto ERROR_EXIT;
}
bstrTemp = var;
pwsz1 = bstrTemp;
if (pwsz1==NULL)
goto ERROR_EXIT;
pwsz = wcschr( bstrTemp, L':' );
if ( pwsz != NULL)
{
pwsz++;
rbstrClassNameOut = pwsz;
}
ERROR_EXIT:
pQualifier->Release();
return;
} //*** CProvBaseAssociation::GetTypeName()