windows-nt/Source/XPSP1/NT/admin/wmi/wbem/scripting/site.cpp
2020-09-26 16:20:57 +08:00

170 lines
3.6 KiB
C++

//***************************************************************************
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// SITE.CPP
//
// alanbos 28-Jun-98 Created.
//
// Defines the WBEM site implementation
//
//***************************************************************************
#include "precomp.h"
ULONG CWbemSite::AddRef(void)
{
InterlockedIncrement(&m_cRef);
return m_cRef;
}
ULONG CWbemSite::Release(void)
{
InterlockedDecrement(&m_cRef);
if (0L!=m_cRef)
return m_cRef;
delete this;
return 0;
}
//***************************************************************************
//
// CWbemObjectSite::CWbemObjectSite
//
// DESCRIPTION:
//
// Constructor
//
//***************************************************************************
CWbemObjectSite::CWbemObjectSite (ISWbemInternalObject *pObject)
{
m_pSWbemObject = pObject;
if (m_pSWbemObject)
m_pSWbemObject->AddRef ();
}
//***************************************************************************
//
// CWbemObjectSite::~CWbemObjectSite
//
// DESCRIPTION:
//
// Destructor
//
//***************************************************************************
CWbemObjectSite::~CWbemObjectSite ()
{
if (m_pSWbemObject)
m_pSWbemObject->Release ();
}
//***************************************************************************
//
// CWbemObjectSite::Update
//
// DESCRIPTION:
//
// Overriden virtual method to update this site
//
//***************************************************************************
void CWbemObjectSite::Update ()
{
if (m_pSWbemObject)
m_pSWbemObject->UpdateSite ();
}
//***************************************************************************
//
// CWbemPropertySite::CWbemPropertySite
//
// DESCRIPTION:
//
// Constructor
//
//***************************************************************************
CWbemPropertySite::CWbemPropertySite (CSWbemProperty *pProperty,
IWbemClassObject *pSourceObject,
long index)
{
m_pSWbemProperty = pProperty;
m_pIWbemClassObject = pSourceObject;
m_index = index;
if (m_pSWbemProperty)
m_pSWbemProperty->AddRef ();
if (m_pIWbemClassObject)
m_pIWbemClassObject->AddRef ();
}
//***************************************************************************
//
// CWbemPropertySite::~CWbemPropertySite
//
// DESCRIPTION:
//
// Destructor
//
//***************************************************************************
CWbemPropertySite::~CWbemPropertySite ()
{
if (m_pSWbemProperty)
m_pSWbemProperty->Release ();
if (m_pIWbemClassObject)
m_pIWbemClassObject->Release ();
}
//***************************************************************************
//
// CWbemPropertySite::Update
//
// DESCRIPTION:
//
// Overriden virtual method to update this site
//
//***************************************************************************
void CWbemPropertySite::Update ()
{
if (m_pSWbemProperty)
{
if (m_pIWbemClassObject)
{
/*
* Case 1 this property site is for an object;
* we have an embedded object deal. We commit the
* new embedded object value to its owning property
* in the parent object.
*/
// Get the current value of the source object into a VARIANT:
VARIANT var;
VariantInit (&var);
var.vt = VT_UNKNOWN;
var.punkVal = m_pIWbemClassObject;
m_pIWbemClassObject->AddRef ();
// Set the value in the parent object
m_pSWbemProperty->UpdateEmbedded (var, m_index);
// Release the value
VariantClear (&var);
}
else
{
// Addressed by a qualifier - nothing to do
}
// Now delegate further to property to update itself.
if (m_pSWbemProperty)
m_pSWbemProperty->UpdateSite ();
}
}