FROM: nt\base\cluster\mgmt\cluscfg\server\cenumcluscfgipaddresses.cpp HRESULT CEnumClusCfgIPAddresses::HrGetAdapterConfiguration( IWbemClassObject * pNetworkAdapterIn ) { TraceFunc( "" ); HRESULT hr = S_OK; BSTR bstrQuery = NULL; BSTR bstrWQL = NULL; VARIANT var; WCHAR sz[ 256 ]; IEnumWbemClassObject * pConfigurations = NULL; ULONG ulReturned; IWbemClassObject * pConfiguration = NULL; int cFound = 0; BSTR bstrAdapterName = NULL; int idx; VariantInit( &var ); bstrWQL = TraceSysAllocString( L"WQL" ); if ( bstrWQL == NULL ) { goto OutOfMemory; } // if: hr = THR( HrGetWMIProperty( pNetworkAdapterIn, L"DeviceID", VT_BSTR, &var ) ); if ( FAILED( hr ) ) { goto Cleanup; } // if: _snwprintf( sz, ARRAYSIZE( sz ), L"Associators of {Win32_NetworkAdapter.DeviceID='%s'} where AssocClass=Win32_NetworkAdapterSetting", var.bstrVal ); bstrQuery = TraceSysAllocString( sz ); if ( bstrQuery == NULL ) { goto OutOfMemory; } // if: VariantClear( &var ); hr = THR( HrGetWMIProperty( pNetworkAdapterIn, L"NetConnectionID", VT_BSTR, &var ) ); if ( FAILED( hr ) ) { goto Cleanup; } // if: bstrAdapterName = TraceSysAllocString( var.bstrVal ); if ( bstrAdapterName == NULL ) { goto OutOfMemory; } // if: hr = THR( m_pIWbemServices->ExecQuery( bstrWQL, bstrQuery, WBEM_FLAG_FORWARD_ONLY, NULL, &pConfigurations ) ); if ( FAILED( hr ) ) { STATUS_REPORT_STRING( TASKID_Major_Find_Devices, TASKID_Minor_WMI_NetworkAdapterSetting_Qry_Failed, IDS_ERROR_WMI_NETWORKADAPTERSETTINGS_QRY_FAILED, bstrAdapterName, hr ); goto Cleanup; } // if: for ( idx = 0; ; idx++ ) { hr = pConfigurations->Next( WBEM_INFINITE, 1, &pConfiguration, &ulReturned ); if ( ( hr == S_OK ) && ( ulReturned == 1 ) ) { // // KB: 25-AUG-2000 GalenB // // WMI only supports one configuration per adapter! // Assert( idx < 1 ); VariantClear( &var ); hr = THR( HrGetWMIProperty( pConfiguration, L"IPEnabled", VT_BOOL, &var ) ); if ( FAILED( hr ) ) { goto Cleanup; } // if: // // If this configuration is not for TCP/IP then skip it. // if ( ( var.vt != VT_BOOL ) || ( var.boolVal != VARIANT_TRUE ) ) { hr = S_FALSE; STATUS_REPORT_STRING( TASKID_Major_Find_Devices, TASKID_Minor_Non_Tcp_Config, IDS_WARNING__NON_TCP_CONFIG, bstrAdapterName, hr ); continue; } // if: hr = STHR( HrSaveIPAddresses( bstrAdapterName, pConfiguration ) ); if ( FAILED( hr ) ) { goto Cleanup; } // if: // // KB: 24-AUG-2000 GalenB // // If any configuration returns S_FALSE then we skip. // if ( hr == S_FALSE ) { pConfiguration->Release(); pConfiguration = NULL; continue; } // if: cFound++; pConfiguration->Release(); pConfiguration = NULL; } // if: else if ( ( hr == S_FALSE ) && ( ulReturned == 0 ) ) { hr = S_OK; break; } // else if: else { STATUS_REPORT_STRING( TASKID_Major_Find_Devices, TASKID_Minor_WQL_Qry_Next_Failed, IDS_ERROR_WQL_QRY_NEXT_FAILED, bstrQuery, hr ); goto Cleanup; } // else: } // for: // // If we didn't find any valid configurations then we should return S_FALSE // to tell the caller to ingore that adpater. // if ( cFound == 0 ) { hr = S_FALSE; STATUS_REPORT_STRING( TASKID_Major_Find_Devices, TASKID_Minor_No_Valid_TCP_Configs, IDS_WARNING_NO_VALID_TCP_CONFIGS, bstrAdapterName, hr ); } // if: goto Cleanup; OutOfMemory: hr = THR( E_OUTOFMEMORY ); STATUS_REPORT( TASKID_Major_Find_Devices, TASKID_Minor_HrGetAdapterConfiguration, IDS_ERROR_OUTOFMEMORY, hr ); Cleanup: VariantClear( &var ); TraceSysFreeString( bstrQuery ); TraceSysFreeString( bstrWQL ); TraceSysFreeString( bstrAdapterName ); if ( pConfiguration != NULL ) { pConfiguration->Release(); } // if: if ( pConfigurations != NULL ) { pConfigurations->Release(); } // if: HRETURN( hr ); } //*** CEnumClusCfgIPAddresses::HrGetAdapterConfiguration