Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

854 lines
20 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000-2001 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // CClusCfgIPAddressInfo.cpp
  7. //
  8. // Description:
  9. // This file contains the definition of the CClusCfgIPAddressInfo
  10. // class.
  11. //
  12. // The class CClusCfgIPAddressInfo represents a cluster manageable
  13. // network. It implements the IClusCfgIPAddressInfo interface.
  14. //
  15. // Maintained By:
  16. // Galen Barbee (GalenB) 23-MAR-2000
  17. //
  18. //////////////////////////////////////////////////////////////////////////////
  19. //////////////////////////////////////////////////////////////////////////////
  20. // Include Files
  21. //////////////////////////////////////////////////////////////////////////////
  22. #include "Pch.h"
  23. #include "CClusCfgIPAddressInfo.h"
  24. #include <ClusRtl.h>
  25. //////////////////////////////////////////////////////////////////////////////
  26. // Constant Definitions
  27. //////////////////////////////////////////////////////////////////////////////
  28. DEFINE_THISCLASS( "CClusCfgIPAddressInfo" );
  29. //*************************************************************************//
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CClusCfgIPAddressInfo class
  32. /////////////////////////////////////////////////////////////////////////////
  33. //////////////////////////////////////////////////////////////////////////////
  34. //++
  35. //
  36. // CClusCfgIPAddressInfo::S_HrCreateInstance
  37. //
  38. // Description:
  39. // Create a CClusCfgIPAddressInfo instance.
  40. //
  41. // Arguments:
  42. // None.
  43. //
  44. // Return Values:
  45. // Pointer to CClusCfgIPAddressInfo instance.
  46. //
  47. //--
  48. //////////////////////////////////////////////////////////////////////////////
  49. HRESULT
  50. CClusCfgIPAddressInfo::S_HrCreateInstance( IUnknown ** ppunkOut )
  51. {
  52. TraceFunc( "" );
  53. Assert( ppunkOut != NULL );
  54. HRESULT hr = S_OK;
  55. CClusCfgIPAddressInfo * pccipai = NULL;
  56. if ( ppunkOut == NULL )
  57. {
  58. hr = THR( E_POINTER );
  59. goto Cleanup;
  60. } // if:
  61. pccipai = new CClusCfgIPAddressInfo();
  62. if ( pccipai == NULL )
  63. {
  64. hr = THR( E_OUTOFMEMORY );
  65. goto Cleanup;
  66. } // if: error allocating object
  67. hr = THR( pccipai->HrInit() );
  68. if ( FAILED( hr ) )
  69. {
  70. goto Cleanup;
  71. } // if: HrInit() failed
  72. hr = THR( pccipai->TypeSafeQI( IUnknown, ppunkOut ) );
  73. if ( FAILED( hr ) )
  74. {
  75. goto Cleanup;
  76. } // if: QI failed
  77. Cleanup:
  78. if ( FAILED( hr ) )
  79. {
  80. LogMsg( L"[SRV] CClusCfgIPAddressInfo::S_HrCreateInstance() failed. (hr = %#08x)", hr );
  81. } // if:
  82. if ( pccipai != NULL )
  83. {
  84. pccipai->Release();
  85. } // if:
  86. HRETURN( hr );
  87. } //*** CClusCfgIPAddressInfo::S_HrCreateInstance
  88. //////////////////////////////////////////////////////////////////////////////
  89. //++
  90. //
  91. // CClusCfgIPAddressInfo::S_HrCreateInstance
  92. //
  93. // Description:
  94. // Create a CClusCfgIPAddressInfo instance.
  95. //
  96. // Arguments:
  97. // None.
  98. //
  99. // Return Values:
  100. // Pointer to CClusCfgIPAddressInfo instance.
  101. //
  102. //--
  103. //////////////////////////////////////////////////////////////////////////////
  104. HRESULT
  105. CClusCfgIPAddressInfo::S_HrCreateInstance(
  106. ULONG ulIPAddressIn
  107. , ULONG ulIPSubnetIn
  108. , IUnknown ** ppunkOut
  109. )
  110. {
  111. TraceFunc( "" );
  112. Assert( ppunkOut != NULL );
  113. Assert( ulIPAddressIn != 0 );
  114. Assert( ulIPSubnetIn != 0 );
  115. HRESULT hr = S_OK;
  116. CClusCfgIPAddressInfo * pccipai = NULL;
  117. if ( ppunkOut == NULL )
  118. {
  119. hr = THR( E_POINTER );
  120. goto Cleanup;
  121. } // if:
  122. pccipai = new CClusCfgIPAddressInfo();
  123. if ( pccipai == NULL )
  124. {
  125. hr = THR( E_OUTOFMEMORY );
  126. goto Cleanup;
  127. } // if: error allocating object
  128. hr = THR( pccipai->HrInit( ulIPAddressIn, ulIPSubnetIn ) );
  129. if ( FAILED( hr ) )
  130. {
  131. goto Cleanup;
  132. } // if: HrInit() failed
  133. hr = THR( pccipai->TypeSafeQI( IUnknown, ppunkOut ) );
  134. Cleanup:
  135. if ( FAILED( hr ) )
  136. {
  137. LogMsg( L"[SRV] CClusCfgIPAddressInfo::S_HrCreateInstance( ULONG, ULONG ) failed. (hr = %#08x)", hr );
  138. } // if:
  139. if ( pccipai != NULL )
  140. {
  141. pccipai->Release();
  142. } // if:
  143. HRETURN( hr );
  144. } //*** CClusCfgIPAddressInfo::S_HrCreateInstance
  145. //////////////////////////////////////////////////////////////////////////////
  146. //++
  147. //
  148. // CClusCfgIPAddressInfo::CClusCfgIPAddressInfo
  149. //
  150. // Description:
  151. // Constructor of the CClusCfgIPAddressInfo class. This initializes
  152. // the m_cRef variable to 1 instead of 0 to account of possible
  153. // QueryInterface failure in DllGetClassObject.
  154. //
  155. // Arguments:
  156. // None.
  157. //
  158. // Return Value:
  159. // None.
  160. //
  161. // Remarks:
  162. // None.
  163. //
  164. //--
  165. //////////////////////////////////////////////////////////////////////////////
  166. CClusCfgIPAddressInfo::CClusCfgIPAddressInfo( void )
  167. : m_cRef( 1 )
  168. {
  169. TraceFunc( "" );
  170. // Increment the count of components in memory so the DLL hosting this
  171. // object cannot be unloaded.
  172. InterlockedIncrement( &g_cObjects );
  173. Assert( m_ulIPAddress == 0 );
  174. Assert( m_ulIPSubnet == 0 );
  175. Assert( m_pIWbemServices == NULL );
  176. Assert( m_picccCallback == NULL );
  177. TraceFuncExit();
  178. } //*** CClusCfgIPAddressInfo::CClusCfgIPAddressInfo
  179. //////////////////////////////////////////////////////////////////////////////
  180. //++
  181. //
  182. // CClusCfgIPAddressInfo::~CClusCfgIPAddressInfo
  183. //
  184. // Description:
  185. // Desstructor of the CClusCfgIPAddressInfo class.
  186. //
  187. // Arguments:
  188. // None.
  189. //
  190. // Return Value:
  191. // None.
  192. //
  193. // Remarks:
  194. // None.
  195. //
  196. //--
  197. //////////////////////////////////////////////////////////////////////////////
  198. CClusCfgIPAddressInfo::~CClusCfgIPAddressInfo( void )
  199. {
  200. TraceFunc( "" );
  201. if ( m_pIWbemServices != NULL )
  202. {
  203. m_pIWbemServices->Release();
  204. } // if:
  205. if ( m_picccCallback != NULL )
  206. {
  207. m_picccCallback->Release();
  208. } // if:
  209. // There's going to be one less component in memory. Decrement component count.
  210. InterlockedDecrement( &g_cObjects );
  211. TraceFuncExit();
  212. } //*** CClusCfgIPAddressInfo::~CClusCfgIPAddressInfo
  213. //*************************************************************************//
  214. /////////////////////////////////////////////////////////////////////////////
  215. // CClusCfgIPAddressInfo -- IUknkown interface.
  216. /////////////////////////////////////////////////////////////////////////////
  217. //////////////////////////////////////////////////////////////////////////////
  218. //++
  219. //
  220. // CClusCfgIPAddressInfo::AddRef
  221. //
  222. // Description:
  223. // Increment the reference count of this object by one.
  224. //
  225. // Arguments:
  226. // None.
  227. //
  228. // Return Value:
  229. // The new reference count.
  230. //
  231. // Remarks:
  232. // None.
  233. //
  234. //--
  235. //////////////////////////////////////////////////////////////////////////////
  236. STDMETHODIMP_( ULONG )
  237. CClusCfgIPAddressInfo::AddRef( void )
  238. {
  239. TraceFunc( "[IUnknown]" );
  240. InterlockedIncrement( & m_cRef );
  241. CRETURN( m_cRef );
  242. } //*** CClusCfgIPAddressInfo::AddRef
  243. //////////////////////////////////////////////////////////////////////////////
  244. //++
  245. //
  246. // CClusCfgIPAddressInfo::Release
  247. //
  248. // Description:
  249. // Decrement the reference count of this object by one.
  250. //
  251. // Arguments:
  252. // None.
  253. //
  254. // Return Value:
  255. // The new reference count.
  256. //
  257. // Remarks:
  258. // None.
  259. //
  260. //--
  261. //////////////////////////////////////////////////////////////////////////////
  262. STDMETHODIMP_( ULONG )
  263. CClusCfgIPAddressInfo::Release( void )
  264. {
  265. TraceFunc( "[IUnknown]" );
  266. LONG cRef;
  267. cRef = InterlockedDecrement( &m_cRef );
  268. if ( cRef == 0 )
  269. {
  270. TraceDo( delete this );
  271. } // if: reference count equal to zero
  272. CRETURN( cRef );
  273. } //*** CClusCfgIPAddressInfo::Release
  274. //////////////////////////////////////////////////////////////////////////////
  275. //++
  276. //
  277. // CClusCfgIPAddressInfo::QueryInterface
  278. //
  279. // Description:
  280. // Query this object for the passed in interface.
  281. //
  282. // Arguments:
  283. // riidIn
  284. // Id of interface requested.
  285. //
  286. // ppvOut
  287. // Pointer to the requested interface.
  288. //
  289. // Return Value:
  290. // S_OK
  291. // If the interface is available on this object.
  292. //
  293. // E_NOINTERFACE
  294. // If the interface is not available.
  295. //
  296. // E_POINTER
  297. // ppvOut was NULL.
  298. //
  299. // Remarks:
  300. // None.
  301. //
  302. //--
  303. //////////////////////////////////////////////////////////////////////////////
  304. STDMETHODIMP
  305. CClusCfgIPAddressInfo::QueryInterface(
  306. REFIID riidIn
  307. , void ** ppvOut
  308. )
  309. {
  310. TraceQIFunc( riidIn, ppvOut );
  311. HRESULT hr = S_OK;
  312. //
  313. // Validate arguments.
  314. //
  315. Assert( ppvOut != NULL );
  316. if ( ppvOut == NULL )
  317. {
  318. hr = THR( E_POINTER );
  319. goto Cleanup;
  320. }
  321. //
  322. // Handle known interfaces.
  323. //
  324. if ( IsEqualIID( riidIn, IID_IUnknown ) )
  325. {
  326. *ppvOut = static_cast< IClusCfgIPAddressInfo * >( this );
  327. } // if: IUnknown
  328. else if ( IsEqualIID( riidIn, IID_IClusCfgIPAddressInfo ) )
  329. {
  330. *ppvOut = TraceInterface( __THISCLASS__, IClusCfgIPAddressInfo, this, 0 );
  331. } // else if: IClusCfgIPAddressInfo
  332. else if ( IsEqualIID( riidIn, IID_IClusCfgWbemServices ) )
  333. {
  334. *ppvOut = TraceInterface( __THISCLASS__, IClusCfgWbemServices, this, 0 );
  335. } // else if: IClusCfgWbemServices
  336. else if ( IsEqualIID( riidIn, IID_IClusCfgInitialize ) )
  337. {
  338. *ppvOut = TraceInterface( __THISCLASS__, IClusCfgInitialize, this, 0 );
  339. } // else if: IClusCfgInitialize
  340. else
  341. {
  342. *ppvOut = NULL;
  343. hr = E_NOINTERFACE;
  344. }
  345. //
  346. // Add a reference to the interface if successful.
  347. //
  348. if ( SUCCEEDED( hr ) )
  349. {
  350. ((IUnknown *) *ppvOut)->AddRef();
  351. } // if: success
  352. Cleanup:
  353. QIRETURN_IGNORESTDMARSHALLING( hr, riidIn );
  354. } //*** CClusCfgIPAddressInfo::QueryInterface
  355. //*************************************************************************//
  356. /////////////////////////////////////////////////////////////////////////////
  357. // CClusCfgIPAddressInfo -- IClusCfgInitialize interface.
  358. /////////////////////////////////////////////////////////////////////////////
  359. //////////////////////////////////////////////////////////////////////////////
  360. //++
  361. //
  362. // CClusCfgIPAddressInfo::Initialize
  363. //
  364. // Description:
  365. // Initialize this component.
  366. //
  367. // Arguments:
  368. // IN IUknown * punkCallbackIn
  369. //
  370. // IN LCID lcidIn
  371. //
  372. // Return Value:
  373. // S_OK
  374. // Success
  375. //
  376. // Remarks:
  377. // None.
  378. //
  379. //--
  380. //////////////////////////////////////////////////////////////////////////////
  381. STDMETHODIMP
  382. CClusCfgIPAddressInfo::Initialize(
  383. IUnknown * punkCallbackIn,
  384. LCID lcidIn
  385. )
  386. {
  387. TraceFunc( "[IClusCfgInitialize]" );
  388. Assert( m_picccCallback == NULL );
  389. HRESULT hr = S_OK;
  390. m_lcid = lcidIn;
  391. if ( punkCallbackIn == NULL )
  392. {
  393. hr = THR( E_POINTER );
  394. goto Cleanup;
  395. } // if:
  396. hr = THR( punkCallbackIn->TypeSafeQI( IClusCfgCallback, &m_picccCallback ) );
  397. Cleanup:
  398. HRETURN( hr );
  399. } //*** CClusCfgIPAddressInfo::Initialize
  400. //*************************************************************************//
  401. /////////////////////////////////////////////////////////////////////////////
  402. // CClusCfgIPAddressInfo -- IClusCfgWbemServices interface.
  403. /////////////////////////////////////////////////////////////////////////////
  404. //////////////////////////////////////////////////////////////////////////////
  405. //++
  406. //
  407. // CClusCfgIPAddressInfo::SetWbemServices
  408. //
  409. // Description:
  410. // Set the WBEM services provider.
  411. //
  412. // Arguments:
  413. // IN IWbemServices pIWbemServicesIn
  414. //
  415. // Return Value:
  416. // S_OK
  417. // Success
  418. //
  419. // E_POINTER
  420. // The pIWbemServicesIn param is NULL.
  421. //
  422. // Remarks:
  423. // None.
  424. //
  425. //--
  426. //////////////////////////////////////////////////////////////////////////////
  427. STDMETHODIMP
  428. CClusCfgIPAddressInfo::SetWbemServices( IWbemServices * pIWbemServicesIn )
  429. {
  430. TraceFunc( "[IClusCfgWbemServices]" );
  431. HRESULT hr = S_OK;
  432. if ( pIWbemServicesIn == NULL )
  433. {
  434. hr = THR( E_POINTER );
  435. STATUS_REPORT_REF( TASKID_Major_Find_Devices, TASKID_Minor_SetWbemServices_IPAddress, IDS_ERROR_NULL_POINTER, IDS_ERROR_NULL_POINTER_REF, hr );
  436. goto Cleanup;
  437. } // if:
  438. m_pIWbemServices = pIWbemServicesIn;
  439. m_pIWbemServices->AddRef();
  440. Cleanup:
  441. HRETURN( hr );
  442. } //*** CClusCfgIPAddressInfo::SetWbemServices
  443. //*************************************************************************//
  444. /////////////////////////////////////////////////////////////////////////////
  445. // CClusCfgIPAddressInfo class -- IClusCfgIPAddressInfo interface
  446. /////////////////////////////////////////////////////////////////////////////
  447. //////////////////////////////////////////////////////////////////////////////
  448. //++
  449. //
  450. // CClusCfgIPAddressInfo::GetUID
  451. //
  452. // Description:
  453. //
  454. // Arguments:
  455. // None.
  456. //
  457. // Return Value:
  458. //
  459. //
  460. // Remarks:
  461. // None.
  462. //
  463. //--
  464. //////////////////////////////////////////////////////////////////////////////
  465. STDMETHODIMP
  466. CClusCfgIPAddressInfo::GetUID( BSTR * pbstrUIDOut )
  467. {
  468. TraceFunc( "[IClusCfgIPAddressInfo]" );
  469. Assert( m_ulIPAddress != 0 );
  470. Assert( m_ulIPSubnet != 0 );
  471. HRESULT hr = S_OK;
  472. ULONG ulNetwork = ( m_ulIPAddress & m_ulIPSubnet );
  473. LPWSTR psz = NULL;
  474. DWORD sc;
  475. if ( pbstrUIDOut == NULL )
  476. {
  477. hr = THR( E_POINTER );
  478. STATUS_REPORT_REF( TASKID_Major_Find_Devices, TASKID_Minor_IPAddressInfo_GetUID_Pointer, IDS_ERROR_NULL_POINTER, IDS_ERROR_NULL_POINTER_REF, hr );
  479. goto Cleanup;
  480. } // if:
  481. sc = ClRtlTcpipAddressToString( ulNetwork, &psz ); // KB: Allocates to psz using LocalAlloc().
  482. if ( sc != ERROR_SUCCESS )
  483. {
  484. hr = THR( HRESULT_FROM_WIN32( sc ) );
  485. LOG_STATUS_REPORT( L"CClusCfgIPAddressInfo::GetUID() ClRtlTcpipAddressToString() failed.", hr );
  486. goto Cleanup;
  487. } // if:
  488. *pbstrUIDOut = SysAllocString( psz );
  489. if ( *pbstrUIDOut == NULL )
  490. {
  491. hr = THR( E_OUTOFMEMORY );
  492. STATUS_REPORT_REF( TASKID_Major_Find_Devices, TASKID_Minor_IPAddressInfo_GetUID_Memory, IDS_ERROR_OUTOFMEMORY, IDS_ERROR_OUTOFMEMORY_REF, hr );
  493. goto Cleanup;
  494. } // if:
  495. Cleanup:
  496. if ( psz != NULL )
  497. {
  498. LocalFree( psz ); // KB: Don't use TraceFree() here!
  499. } // if:
  500. HRETURN( hr );
  501. } //*** CClusCfgIPAddressInfo::GetUID
  502. //////////////////////////////////////////////////////////////////////////////
  503. //++
  504. //
  505. // CClusCfgIPAddressInfo::GetIPAddress
  506. //
  507. // Description:
  508. //
  509. // Arguments:
  510. // None.
  511. //
  512. // Return Value:
  513. //
  514. //
  515. // Remarks:
  516. // None.
  517. //
  518. //--
  519. //////////////////////////////////////////////////////////////////////////////
  520. STDMETHODIMP
  521. CClusCfgIPAddressInfo::GetIPAddress( ULONG * pulDottedQuadOut )
  522. {
  523. TraceFunc( "[IClusCfgIPAddressInfo]" );
  524. HRESULT hr = S_OK;
  525. if ( pulDottedQuadOut == NULL )
  526. {
  527. hr = THR( E_POINTER );
  528. STATUS_REPORT_REF( TASKID_Major_Find_Devices, TASKID_Minor_GetNetworkGetIPAddress, IDS_ERROR_NULL_POINTER, IDS_ERROR_NULL_POINTER_REF, hr );
  529. goto Cleanup;
  530. } // if:
  531. *pulDottedQuadOut = m_ulIPAddress;
  532. Cleanup:
  533. HRETURN( hr );
  534. } //*** CClusCfgIPAddressInfo::GetIPAddress
  535. //////////////////////////////////////////////////////////////////////////////
  536. //++
  537. //
  538. // CClusCfgIPAddressInfo::SetIPAddress
  539. //
  540. // Description:
  541. //
  542. // Arguments:
  543. // None.
  544. //
  545. // Return Value:
  546. //
  547. //
  548. // Remarks:
  549. // None.
  550. //
  551. //--
  552. //////////////////////////////////////////////////////////////////////////////
  553. STDMETHODIMP
  554. CClusCfgIPAddressInfo::SetIPAddress( ULONG ulDottedQuadIn )
  555. {
  556. TraceFunc( "[IClusCfgIPAddressInfo]" );
  557. HRESULT hr = S_OK;
  558. if ( ulDottedQuadIn == 0 )
  559. {
  560. hr = THR( E_INVALIDARG );
  561. goto Cleanup;
  562. } // if:
  563. m_ulIPAddress = ulDottedQuadIn;
  564. Cleanup:
  565. HRETURN( hr );
  566. } //*** CClusCfgIPAddressInfo::SetIPAddress
  567. //////////////////////////////////////////////////////////////////////////////
  568. //++
  569. //
  570. // CClusCfgIPAddressInfo::GetSubnetMask
  571. //
  572. // Description:
  573. //
  574. // Arguments:
  575. // None.
  576. //
  577. // Return Value:
  578. //
  579. //
  580. // Remarks:
  581. // None.
  582. //
  583. //--
  584. //////////////////////////////////////////////////////////////////////////////
  585. STDMETHODIMP
  586. CClusCfgIPAddressInfo::GetSubnetMask( ULONG * pulDottedQuadOut )
  587. {
  588. TraceFunc( "[IClusCfgIPAddressInfo]" );
  589. HRESULT hr = S_OK;
  590. if ( pulDottedQuadOut == NULL )
  591. {
  592. hr = THR( E_POINTER );
  593. STATUS_REPORT_REF( TASKID_Major_Find_Devices, TASKID_Minor_GetSubnetMask, IDS_ERROR_NULL_POINTER, IDS_ERROR_NULL_POINTER_REF, hr );
  594. goto Cleanup;
  595. } // if:
  596. *pulDottedQuadOut = m_ulIPSubnet;
  597. Cleanup:
  598. HRETURN( hr );
  599. } //*** CClusCfgIPAddressInfo::GetSubnetMask
  600. //////////////////////////////////////////////////////////////////////////////
  601. //++
  602. //
  603. // CClusCfgIPAddressInfo::SetSubnetMask
  604. //
  605. // Description:
  606. //
  607. // Arguments:
  608. // None.
  609. //
  610. // Return Value:
  611. //
  612. //
  613. // Remarks:
  614. // None.
  615. //
  616. //--
  617. //////////////////////////////////////////////////////////////////////////////
  618. STDMETHODIMP
  619. CClusCfgIPAddressInfo::SetSubnetMask( ULONG ulDottedQuadIn )
  620. {
  621. TraceFunc( "[IClusCfgIPAddressInfo]" );
  622. HRESULT hr = S_OK;
  623. if ( ulDottedQuadIn == 0 )
  624. {
  625. hr = THR( E_INVALIDARG );
  626. goto Cleanup;
  627. } // if:
  628. m_ulIPSubnet = ulDottedQuadIn;
  629. Cleanup:
  630. HRETURN( hr );
  631. } //*** CClusCfgIPAddressInfo::SetSubnetMask
  632. //*************************************************************************//
  633. /////////////////////////////////////////////////////////////////////////////
  634. // CClusCfgIPAddressInfo class -- Private Methods.
  635. /////////////////////////////////////////////////////////////////////////////
  636. //////////////////////////////////////////////////////////////////////////////
  637. //++
  638. //
  639. // CClusCfgIPAddressInfo::HrInit
  640. //
  641. // Description:
  642. // Initialize this component.
  643. //
  644. // Arguments:
  645. // None.
  646. //
  647. // Return Value:
  648. //
  649. //
  650. // Remarks:
  651. // None.
  652. //
  653. //--
  654. //////////////////////////////////////////////////////////////////////////////
  655. HRESULT
  656. CClusCfgIPAddressInfo::HrInit( void )
  657. {
  658. TraceFunc( "" );
  659. HRESULT hr = S_OK;
  660. // IUnknown
  661. Assert( m_cRef == 1 );
  662. HRETURN( hr );
  663. } //*** CClusCfgIPAddressInfo::HrInit
  664. //////////////////////////////////////////////////////////////////////////////
  665. //++
  666. //
  667. // CClusCfgIPAddressInfo::HrInit
  668. //
  669. // Description:
  670. // Initialize this component.
  671. //
  672. // Arguments:
  673. // ulIPAddressIn
  674. // ulIPSubnetIn
  675. //
  676. // Return Value:
  677. //
  678. //
  679. // Remarks:
  680. // None.
  681. //
  682. //--
  683. //////////////////////////////////////////////////////////////////////////////
  684. HRESULT
  685. CClusCfgIPAddressInfo::HrInit( ULONG ulIPAddressIn, ULONG ulIPSubnetIn )
  686. {
  687. TraceFunc( "" );
  688. HRESULT hr = S_OK;
  689. // IUnknown
  690. Assert( m_cRef == 1 );
  691. m_ulIPAddress = ulIPAddressIn;
  692. m_ulIPSubnet = ulIPSubnetIn;
  693. HRETURN( hr );
  694. } //*** CClusCfgIPAddressInfo::HrInit( ulIPAddressIn, ulIPSubnetIn )