|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999-2002 Microsoft Corporation
//
// Module Name: CClusterNetInterface.cpp
//
// Description:
// Implementation of CClusterNetInterface class
//
// Author:
// Henry Wang (HenryWa) 24-AUG-1999
//
//////////////////////////////////////////////////////////////////////////////
#include "Pch.h"
#include "ClusterNetInterface.h"
#include "ClusterNetInterface.tmh"
//****************************************************************************
//
// CClusterNetInterface
//
//****************************************************************************
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::CClusterNetInterface
//
// Description:
// Constructor.
//
// Arguments:
// pwszNameIn -- Class name
// pNamespaceIn -- Namespace
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
CClusterNetInterface::CClusterNetInterface( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn ) : CProvBase( pwszNameIn, pNamespaceIn ) { } //*** CClusterNetInterface::CClusterNetInterface()
//////////////////////////////////////////////////////////////////////////////
//++
//
// static
// CClusterNetInterface::S_CreateThis
//
// Description:
// Create a cluster network interface object.
//
// Arguments:
// pwszNameIn -- Class name
// pNamespaceIn -- Namespace
// dwEnumTypeIn -- Type id
//
// Return Values:
// Pointer to the CProvBase
//
//--
//////////////////////////////////////////////////////////////////////////////
CProvBase * CClusterNetInterface::S_CreateThis( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD // dwEnumTypeIn
) { return new CClusterNetInterface( pwszNameIn, pNamespaceIn );
} // CClusterNetInterface::S_CreateThis
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::RgGetPropMap
//
// Description:
// Retrieve the property maping table of the cluster node.
//
// Arguments:
// None.
//
// Return Values:
// reference to the array of property maping table
//
//--
//////////////////////////////////////////////////////////////////////////////
const SPropMapEntryArray * CClusterNetInterface::RgGetPropMap( void ) { static SPropMapEntry s_rgpm[] = { { PVD_PROP_NETINTERFACE_DEVICEID, CLUSREG_NAME_NETIFACE_NAME, SZ_TYPE, READONLY }, { PVD_PROP_NETINTERFACE_SYSTEMNAME, CLUSREG_NAME_NETIFACE_NODE, DWORD_TYPE, READWRITE }, { NULL, CLUSREG_NAME_NETIFACE_ADAPTER_ID, DWORD_TYPE, READWRITE }, { NULL, CLUSREG_NAME_NETIFACE_ENDPOINT, DWORD_TYPE, READWRITE } };
static SPropMapEntryArray s_pmea( sizeof( s_rgpm ) /sizeof( SPropMapEntry ), s_rgpm );
return &s_pmea;
} //*** CClusterNetInterface::RgGetPropMap()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::EnumInstance
//
// Description:
// Enum cluster instance
//
// Arguments:
// lFlagsIn -- WMI flag
// pCtxIn -- WMI context
// pHandlerIn -- WMI sink pointer
//
// Return Values:
// WBEM_S_NO_ERROR
//
//--
//////////////////////////////////////////////////////////////////////////////
SCODE CClusterNetInterface::EnumInstance( long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { SAFECLUSTER shCluster; SAFENETINTERFACE shNetInterface; LPCWSTR pwszName;
shCluster = OpenCluster( NULL ); CClusterEnum cluEnum( shCluster, CLUSTER_ENUM_NETINTERFACE );
while ( ( pwszName = cluEnum.GetNext() ) != NULL ) { shNetInterface = OpenClusterNetInterface( shCluster, pwszName );
ClusterToWMI( shNetInterface, pHandlerIn, pwszName ); }
return WBEM_S_NO_ERROR;
} //*** CClusterNetInterface::EnumInstance()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterResource::ClusterToWMI
//
// Description:
// Translate a cluster network interface object to WMI object.
//
// Arguments:
// hNetInterfaceIn -- handle to network interface
// pHandlerIn -- Pointer to WMI sink
// pwszNameIn -- Name of the network interface
//
// Return Values:
// WBEM_S_NO_ERROR
// win32 error
//
//--
//////////////////////////////////////////////////////////////////////////////
void CClusterNetInterface::ClusterToWMI( HNETINTERFACE hNetInterfaceIn, IWbemObjectSink * pHandlerIn, LPCWSTR pwszNameIn ) { static SGetControl s_rgControl[] = { { CLUSCTL_NETINTERFACE_GET_RO_COMMON_PROPERTIES, FALSE }, { CLUSCTL_NETINTERFACE_GET_COMMON_PROPERTIES, FALSE }, { CLUSCTL_NETINTERFACE_GET_RO_PRIVATE_PROPERTIES, TRUE }, { CLUSCTL_NETINTERFACE_GET_PRIVATE_PROPERTIES, TRUE } }; static DWORD s_cControl = sizeof( s_rgControl ) / sizeof( SGetControl );
CWbemClassObject wco; CError er; UINT idx;
m_pClass->SpawnInstance( 0, & wco); for( idx = 0 ; idx < s_cControl ; idx++ ) { CClusPropList pl; er = pl.ScGetNetInterfaceProperties( hNetInterfaceIn, s_rgControl[ idx ].dwControl, NULL, 0 ); CClusterApi::GetObjectProperties( RgGetPropMap(), pl, wco, s_rgControl[ idx ].fPrivate ); } // for: each control code
//
// Set the network interface name
//
wco.SetProperty( pwszNameIn, PVD_PROP_NETINTERFACE_NAME );
wco.SetProperty( GetClusterNetInterfaceState( hNetInterfaceIn), PVD_PROP_NETINTERFACE_STATE );
//
// flags and characteristics
//
{ DWORD cbReturned; DWORD dwOut; er = ClusterNetInterfaceControl( hNetInterfaceIn, NULL, CLUSCTL_NETINTERFACE_GET_CHARACTERISTICS, // this control code
NULL, // input buffer (not used)
0, // input buffer size (not used)
& dwOut, sizeof( DWORD ), & cbReturned ); wco.SetProperty( dwOut, PVD_PROP_CHARACTERISTIC ); }
pHandlerIn->Indicate( 1, & wco ); return;
} //*** CClusterResource::ClusterToWMI()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::GetObject
//
// Description:
// Retrieve cluster network interface object based given object path.
//
// Arguments:
// rObjPathIn -- Object path to cluster object
// lFlagsIn -- WMI flag
// pCtxIn -- WMI context
// pHandlerIn -- WMI sink pointer
//
// Return Values:
// WBEM_S_NO_ERROR
// Win32 error
//
//--
//////////////////////////////////////////////////////////////////////////////
SCODE CClusterNetInterface::GetObject( CObjPath & rObjPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { SAFECLUSTER shCluster; SAFENETINTERFACE shNetInterface; LPCWSTR pwszName = rObjPathIn.GetStringValueForProperty( PVD_PROP_NETINTERFACE_DEVICEID ); shCluster = OpenCluster( NULL ) ; shNetInterface = OpenClusterNetInterface( shCluster, pwszName );
ClusterToWMI( shNetInterface, pHandlerIn, pwszName ); return WBEM_S_NO_ERROR;
} //*** CClusterNetInterface::GetObject()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::ExecuteMethod
//
// Description:
// Execute methods defined in the mof for cluster network interface.
//
// Arguments:
// rObjPathIn -- Object path to cluster object
// pwszMethodNameIn -- Name of the method to be invoked
// lFlagIn -- WMI flag
// pParamsIn -- Input parameters for the method
// pHandlerIn -- WMI sink pointer
//
// Return Values:
// WBEM_E_NOT_SUPPORTED
//
//--
//////////////////////////////////////////////////////////////////////////////
SCODE CClusterNetInterface::ExecuteMethod( CObjPath & rObjPathIn, WCHAR * pwszMethodNameIn, long lFlagIn, IWbemClassObject * pParamsIn, IWbemObjectSink * pHandlerIn ) { return WBEM_E_NOT_SUPPORTED;
} //*** CClusterNetInterface::ExecuteMethod()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::PutInstance
//
// Description:
// Save this instance.
//
// Arguments:
// rInstToPutIn -- WMI object to be saved
// lFlagIn -- WMI flag
// pCtxIn -- WMI context
// pHandlerIn -- WMI sink pointer
//
// Return Values:
// WBEM_E_NOT_SUPPORTED
//
//--
//////////////////////////////////////////////////////////////////////////////
SCODE CClusterNetInterface::PutInstance( CWbemClassObject & rInstToPutIn, long lFlagIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { static SGetSetControl s_rgControl[] = { { CLUSCTL_NETINTERFACE_GET_COMMON_PROPERTIES, CLUSCTL_NETINTERFACE_SET_COMMON_PROPERTIES, FALSE }, { CLUSCTL_NETINTERFACE_GET_PRIVATE_PROPERTIES, CLUSCTL_NETINTERFACE_SET_PRIVATE_PROPERTIES, TRUE } }; static DWORD s_cControl = sizeof( s_rgControl ) / sizeof( SGetSetControl );
_bstr_t bstrName; SAFECLUSTER shCluster; SAFENETINTERFACE shNetwork; CError er; UINT idx;
rInstToPutIn.GetProperty( bstrName, PVD_PROP_NETINTERFACE_DEVICEID );
shCluster = OpenCluster( NULL ); shNetwork = OpenClusterNetInterface( shCluster, bstrName );
for ( idx = 0 ; idx < s_cControl; idx ++ ) { CClusPropList plOld; CClusPropList plNew;
er = plOld.ScGetNetInterfaceProperties( shNetwork, s_rgControl[ idx ].dwGetControl, NULL, NULL, 0 );
CClusterApi::SetObjectProperties( RgGetPropMap(), plNew, plOld, rInstToPutIn, s_rgControl[ idx ].fPrivate );
if ( plNew.Cprops() > 0 ) { er = ClusterNetInterfaceControl( shNetwork, NULL, s_rgControl[ idx ].dwSetControl, plNew.PbPropList(), static_cast< DWORD >( plNew.CbPropList() ), NULL, 0, NULL ); } } // for: each control code
return WBEM_S_NO_ERROR;
} //*** CClusterNetInterface::PutInstance()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterNetInterface::DeleteInstance
//
// Description:
// Delete the object specified in rObjPathIn.
//
// Arguments:
// rObjPathIn -- ObjPath for the instance to be deleted
// lFlagIn -- WMI flag
// pCtxIn -- WMI context
// pHandlerIn -- WMI sink pointer
//
// Return Values:
// WBEM_E_NOT_SUPPORTED
//
//--
//////////////////////////////////////////////////////////////////////////////
SCODE CClusterNetInterface::DeleteInstance( CObjPath & rObjPathIn, long lFlagIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { return WBEM_E_NOT_SUPPORTED;
} //*** CClusterNetInterface::DeleteInstance()
|