////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1999-2000 Microsoft Corporation // // Module Name: // ClusterResDepRes.cpp // // Description: // Implementation of CClusterResDepRes class // // Author: // Henry Wang (HenryWa) 24-AUG-1999 // ////////////////////////////////////////////////////////////////////////////// #include "Pch.h" #include "ClusterResDepRes.h" //**************************************************************************** // // CClusterResDepRes // //**************************************************************************** ////////////////////////////////////////////////////////////////////////////// //++ // // CClusterResDepRes::CClusterResDepRes( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumTypeIn // ) // // Description: // Create a cluster node object // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // pointer to the CProvBase // //-- ////////////////////////////////////////////////////////////////////////////// CClusterResDepRes::CClusterResDepRes( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) : CClusterObjDep( pwszNameIn, pNamespaceIn, dwEnumTypeIn ) { } //*** CClusterResDepRes::CClusterResDepRes() ////////////////////////////////////////////////////////////////////////////// //++ // // static // CProvBase * // CClusterResDepRes::S_CreateThis( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumTypeIn // ) // // Description: // Create a cluster node object // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // pointer to the CProvBase // //-- ////////////////////////////////////////////////////////////////////////////// CProvBase * CClusterResDepRes::S_CreateThis( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) { return new CClusterResDepRes( pwszNameIn, pNamespaceIn, dwEnumTypeIn ); } //*** CClusterResDepRes::S_CreateThis() ////////////////////////////////////////////////////////////////////////////// //++ // // SCODE // CClusterResDepRes::EnumInstance( // long lFlagsIn, // IWbemContext * pCtxIn, // IWbemObjectSink * pHandlerIn // ) // // Description: // Enumerate dependencies of a resource. // // Arguments: // lFlagsIn -- WMI flag // pCtxIn -- WMI context // pHandlerIn -- WMI sink pointer // // Return Values: // WBEM_S_NO_ERROR // //-- ////////////////////////////////////////////////////////////////////////////// SCODE CClusterResDepRes::EnumInstance( long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { SAFECLUSTER shCluster; LPCWSTR pwszName = NULL; CError er; DWORD dwError; CWbemClassObject wco; CWbemClassObject wcoAntecedent; CWbemClassObject wcoDependent; _bstr_t bstrGroup; _bstr_t bstrPart; DWORD cchDepResName = MAX_PATH; CWstrBuf wsbDepResName; shCluster = OpenCluster( NULL ); CClusterEnum clusEnum( shCluster, m_dwEnumType ); m_wcoAntecedent.SpawnInstance( 0, & wcoAntecedent ); m_wcoDependent.SpawnInstance( 0, & wcoDependent ); wsbDepResName.SetSize( cchDepResName ); while ( pwszName = clusEnum.GetNext() ) { DWORD dwIndex = 0; DWORD dwType; SAFERESOURCE shResource; SAFERESENUM shResEnum; shResource = OpenClusterResource( shCluster, pwszName ); shResEnum = ClusterResourceOpenEnum( shResource, CLUSTER_RESOURCE_ENUM_DEPENDS ); for ( ; ; ) { DWORD cch = cchDepResName; dwError = ClusterResourceEnum( shResEnum, dwIndex++, & dwType, wsbDepResName, & cch ); if ( dwError == ERROR_MORE_DATA ) { cchDepResName = ++ cch ; wsbDepResName.SetSize( cch ); dwError = ClusterResourceEnum( shResEnum, dwIndex++, & dwType, wsbDepResName, & cch ); } // if: buffer was too small if ( dwError == ERROR_SUCCESS ) { wcoAntecedent.SetProperty( pwszName, CLUSREG_NAME_RESTYPE_NAME ); wcoAntecedent.GetProperty( bstrGroup, PVD_WBEM_RELPATH ); wcoDependent.SetProperty( wsbDepResName, CLUSREG_NAME_RESTYPE_NAME ); wcoDependent.GetProperty( bstrPart, PVD_WBEM_RELPATH ); m_pClass->SpawnInstance( 0, & wco ); wco.SetProperty( (LPWSTR) bstrGroup, PVD_WBEM_PROP_ANTECEDENT ); wco.SetProperty( (LPWSTR) bstrPart, PVD_WBEM_PROP_DEPENDENT ); pHandlerIn->Indicate( 1, & wco ); } else if ( dwError == ERROR_NO_MORE_ITEMS ) { break; } else { er = dwError; } } // forever } // while: more dependencies return WBEM_S_NO_ERROR; } //*** CClusterResDepRes::EnumInstance() //**************************************************************************** // // CClusterToNode // //**************************************************************************** ////////////////////////////////////////////////////////////////////////////// //++ // // CClusterToNode::CClusterToNode( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumTypeIn // ) // // Description: // Constructor // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // None. // //-- ////////////////////////////////////////////////////////////////////////////// CClusterToNode::CClusterToNode( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) : CClusterObjDep( pwszNameIn, pNamespaceIn, dwEnumTypeIn ) { } //*** CClusterToNode::CClusterToNode() ////////////////////////////////////////////////////////////////////////////// //++ // // static // CProvBase * // CClusterToNode::S_CreateThis( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumTypeIn // ) // // Description: // Create a cluster node object. // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // Pointer to the CProvBase // //-- ////////////////////////////////////////////////////////////////////////////// CProvBase * CClusterToNode::S_CreateThis( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) { return new CClusterToNode( pwszNameIn, pNamespaceIn, dwEnumTypeIn ); } //*** CClusterToNode::S_CreateThis() ////////////////////////////////////////////////////////////////////////////// //++ // // SCODE // CClusterToNode::EnumInstance( // long lFlagsIn, // IWbemContext * pCtxIn, // IWbemObjectSink * pHandlerIn // ) // // Description: // Enumerate // // Arguments: // lFlagsIn -- WMI flag // pCtxIn -- WMI context // pHandlerIn -- WMI sink pointer // // Return Values: // WBEM_S_NO_ERROR // //-- ////////////////////////////////////////////////////////////////////////////// SCODE CClusterToNode::EnumInstance( long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { SAFECLUSTER shCluster; LPCWSTR pwszName = NULL; DWORD cchClusterName = MAX_PATH; CWstrBuf wsbClusterName; CError er; DWORD dwError; CWbemClassObject wcoAntecedent; CWbemClassObject wcoDependent; _bstr_t bstrAntecedent; _bstr_t bstrDependent; wsbClusterName.SetSize( cchClusterName ); shCluster = OpenCluster( NULL ); CClusterEnum clusEnum( shCluster, m_dwEnumType ); dwError = GetClusterInformation( shCluster, wsbClusterName, & cchClusterName, NULL ); if ( dwError == ERROR_MORE_DATA ) { wsbClusterName.SetSize( ++ cchClusterName ); er = GetClusterInformation( shCluster, wsbClusterName, & cchClusterName, NULL ); } m_wcoAntecedent.SpawnInstance( 0, & wcoAntecedent ); m_wcoDependent.SpawnInstance( 0, & wcoDependent ); wcoAntecedent.SetProperty( wsbClusterName, PVD_PROP_NAME ); wcoAntecedent.GetProperty( bstrAntecedent, PVD_WBEM_RELPATH ); while ( pwszName = clusEnum.GetNext() ) { CWbemClassObject wco; wcoDependent.SetProperty( pwszName, PVD_PROP_NAME ); wcoDependent.GetProperty( bstrDependent, PVD_WBEM_RELPATH ); m_pClass->SpawnInstance( 0, & wco ); wco.SetProperty( (LPWSTR) bstrAntecedent, PVD_WBEM_PROP_ANTECEDENT ); wco.SetProperty( (LPWSTR) bstrDependent, PVD_WBEM_PROP_DEPENDENT ); pHandlerIn->Indicate( 1, & wco ); } // while: more properties return WBEM_S_NO_ERROR; } //*** CClusterToNode::EnumInstance() //**************************************************************************** // // CClusterHostedService // //**************************************************************************** ////////////////////////////////////////////////////////////////////////////// //++ // // CClusterHostedService::CClusterHostedService( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumType // ) // // Description: // Constructor. // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // None. // //-- ////////////////////////////////////////////////////////////////////////////// CClusterHostedService::CClusterHostedService( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) : CClusterObjDep( pwszNameIn, pNamespaceIn, dwEnumTypeIn ) { } //*** CClusterHostedService::CClusterHostedService() ////////////////////////////////////////////////////////////////////////////// //++ // // static // CProvBase * // CClusterHostedService::S_CreateThis( // LPCWSTR pwszNameIn, // CWbemServices * pNamespaceIn, // DWORD dwEnumTypeIn // ) // // Description: // Create a hostedservice. // // Arguments: // pwszNameIn -- Class name // pNamespaceIn -- Namespace // dwEnumTypeIn -- Type id // // Return Values: // Pointer to the CProvBase // //-- ////////////////////////////////////////////////////////////////////////////// CProvBase * CClusterHostedService::S_CreateThis( LPCWSTR pwszNameIn, CWbemServices * pNamespaceIn, DWORD dwEnumTypeIn ) { return new CClusterHostedService( pwszNameIn, pNamespaceIn, dwEnumTypeIn ); } //*** CClusterHostedService::S_CreateThis() ////////////////////////////////////////////////////////////////////////////// //++ // // SCODE // CClusterHostedService::EnumInstance( // long lFlagsIn, // IWbemContext * pCtxIn, // IWbemObjectSink * pHandlerIn // ) // // Description: // Enum instance of hostedservice // // Arguments: // lFlagsIn -- WMI flag // pCtxIn -- WMI context // pHandlerIn -- WMI sink pointer // // Return Values: // WBEM_S_NO_ERROR //-- ////////////////////////////////////////////////////////////////////////////// SCODE CClusterHostedService::EnumInstance( long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) { // SAFECLUSTER shCluster; CError er; CWbemClassObject wcoAntecedent; _bstr_t bstrAntecedent; _bstr_t bstrDependent; CComPtr< IEnumWbemClassObject > pEnum; // shCluster = OpenCluster( NULL ); // DAVIDP: Why is this needed? 19-Jul-2000 m_wcoAntecedent.SpawnInstance( 0, &wcoAntecedent ); // // network interface objects // er = m_pNamespace->CreateInstanceEnum( _bstr_t( PVD_CLASS_SERVICES ), 0, NULL, &pEnum ); for( ; ; ) { CWbemClassObject wcoService; DWORD cWco; HRESULT hr; hr = pEnum->Next( 5000, 1, &wcoService, &cWco ); if ( hr == WBEM_S_NO_ERROR ) { CWbemClassObject wco; wcoService.GetProperty( bstrAntecedent, PVD_PROP_SERVICE_SYSTEMNAME ); wcoAntecedent.SetProperty( ( LPWSTR ) bstrAntecedent, PVD_PROP_NODE_NAME ); wcoAntecedent.GetProperty( bstrAntecedent, PVD_WBEM_RELPATH ); wcoService.GetProperty( bstrDependent, PVD_WBEM_RELPATH ); m_pClass->SpawnInstance( 0, &wco ); wco.SetProperty( ( LPWSTR ) bstrAntecedent, PVD_WBEM_PROP_ANTECEDENT ); wco.SetProperty( ( LPWSTR ) bstrDependent, PVD_WBEM_PROP_DEPENDENT ); pHandlerIn->Indicate( 1, &wco ); } else { break; } } // forever return WBEM_S_NO_ERROR; } //*** CClusterHostedService::EnumInstance()