Source code of Windows XP (NT5)
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.

4050 lines
122 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000-2001 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // ClusCfgServer.idl
  7. //
  8. // Description:
  9. // This file is the IDL file for the IClusCfgServer interface of the
  10. // Cluster Setup application.
  11. //
  12. // The IClusCfgServer interface provides the functions required to gather
  13. // information about storage devices, networks, the operating
  14. // system, etc. on a computer. It also has functions to form a cluster
  15. // on this computer, to add this node to a cluster, to remove this node
  16. // from a cluster, etc.
  17. //
  18. //////////////////////////////////////////////////////////////////////////////
  19. // Comments for generated files
  20. cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
  21. cpp_quote( "//" )
  22. cpp_quote( "// Copyright (c) 2000 Microsoft Corporation" )
  23. cpp_quote( "//" )
  24. cpp_quote( "// Remarks:" )
  25. cpp_quote( "// Generated file. See file ClusCfgServer.idl for more details." )
  26. cpp_quote( "//" )
  27. cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
  28. //////////////////////////////////////////////////////////////////////////////
  29. // Imported Files
  30. //////////////////////////////////////////////////////////////////////////////
  31. // For IUnknown
  32. import "unknwn.idl";
  33. ////////////////////////////////////////////////////////////////////////////
  34. // Forward Declarations
  35. //////////////////////////////////////////////////////////////////////////////
  36. interface IClusCfgNodeInfo;
  37. interface IEnumClusCfgManagedResources;
  38. interface IClusCfgManagedResourceInfo;
  39. interface IEnumClusCfgNetworks;
  40. interface IEnumClusCfgPartitions;
  41. interface IClusCfgPartitionInfo;
  42. interface IEnumClusCfgIPAddresses;
  43. interface IClusCfgIPAddressInfo;
  44. interface IClusCfgNetworkInfo;
  45. interface IClusCfgClusterInfo;
  46. interface IClusCfgInitialize;
  47. interface IClusCfgCallback;
  48. interface IClusCfgCredentials;
  49. interface IClusCfgCapabilities;
  50. interface IClusCfgManagedResourceCfg;
  51. interface IClusCfgResourcePreCreate;
  52. interface IClusCfgResourceCreate;
  53. interface IClusCfgResourcePostCreate;
  54. interface IClusCfgGroupCfg;
  55. interface IClusCfgResourceTypeInfo;
  56. interface IClusCfgResourceTypeCreate;
  57. interface IClusCfgMemberSetChangeListener;
  58. interface IClusCfgEvictCleanup;
  59. interface IClusCfgStartupListener;
  60. //////////////////////////////////////////////////////////////////////////////
  61. // Type Definitions
  62. //////////////////////////////////////////////////////////////////////////////
  63. //
  64. // This enumeration is used to indicate the differetnt usage
  65. // states of a drive letter.
  66. //
  67. typedef enum
  68. {
  69. dluUNKNOWN = 0,
  70. dluNO_ROOT_DIRECTORY,
  71. dluREMOVABLE_DISK,
  72. dluFIXED_DISK,
  73. dluNETWORK_DRIVE,
  74. dluCOMPACT_DISC,
  75. dluRAM_DISK,
  76. dluSYSTEM,
  77. dluUNUSED,
  78. dluMAX
  79. } EDriveLetterUsage;
  80. typedef struct _DRIVELETTERMAPPING {
  81. EDriveLetterUsage dluDrives[ 26 ];
  82. } SDriveLetterMapping;
  83. //
  84. // This enumeration is used to indicate the mode of the ClusCfgServer commit operation.
  85. //
  86. typedef enum
  87. {
  88. cmUNKNOWN = 0,
  89. cmCREATE_CLUSTER,
  90. cmADD_NODE_TO_CLUSTER,
  91. cmCLEANUP_NODE_AFTER_EVICT,
  92. cmMAX
  93. } ECommitMode;
  94. //////////////////////////////////////////////////////////////////////////////
  95. // Constant Definitions
  96. //////////////////////////////////////////////////////////////////////////////
  97. //////////////////////////////////////////////////////////////////////////////
  98. // Interface Definitions
  99. //////////////////////////////////////////////////////////////////////////////
  100. //****************************************************************************
  101. //++
  102. //
  103. // interface IClusCfgNodeInfo
  104. //
  105. // Description:
  106. // This interface contains information about the node configuration.
  107. //
  108. //--
  109. //****************************************************************************
  110. [
  111. object,
  112. uuid( E4B5FA15-DD07-439e-A623-8823524E3D19 ),
  113. async_uuid( 4F3BB40B-DF27-40a0-B31A-BA18324CEB9D ),
  114. pointer_default( unique )
  115. ]
  116. interface IClusCfgNodeInfo : IUnknown
  117. {
  118. //
  119. // Name
  120. //
  121. //////////////////////////////////////////////////////////////////////////////
  122. //
  123. // STDMETHOD
  124. // GetName(
  125. // [ out ] BSTR * pbstrNameOut
  126. // )
  127. //
  128. // Description:
  129. // Retrieves the node's fully qualified domain name. e.g.
  130. // cluster1.ntdev.microsoft.com.
  131. //
  132. // Parameter:
  133. // pbstrNameOut
  134. // Pointer to the name of the node. This should be freed by the caller
  135. // by calling SysFreeString( ).
  136. //
  137. // Return Values:
  138. // S_OK
  139. // The call succeeded.
  140. //
  141. // E_OUTOFMEMORY
  142. // Out of memory.
  143. //
  144. // other HRESULTs
  145. // The call failed.
  146. //
  147. //////////////////////////////////////////////////////////////////////////////
  148. HRESULT
  149. GetName( [ out ] BSTR * pbstrNameOut );
  150. //////////////////////////////////////////////////////////////////////////////
  151. //
  152. // STDMETHOD
  153. // SetName(
  154. // [ in ] LPCWSTR pcszNameIn
  155. // )
  156. //
  157. // Description:
  158. // Stores the new name for the node. This does not take effect until after
  159. // the changes have been commited. This is stubbed out for future
  160. // functionality.
  161. //
  162. // Parameter:
  163. // pcszNameIn
  164. // The new name for the node.
  165. //
  166. // Return Values:
  167. // E_NOTIMPL
  168. // The call is not implemented.
  169. //
  170. //////////////////////////////////////////////////////////////////////////////
  171. HRESULT
  172. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  173. //
  174. // Membership?
  175. //
  176. //////////////////////////////////////////////////////////////////////////////
  177. //
  178. // STDMETHOD
  179. // IsMemberOfCluster( void )
  180. //
  181. // Description:
  182. // Call this to determine if the node is part of a cluster.
  183. //
  184. // Return Values:
  185. // S_OK
  186. // Call succeeded and the result is "TRUE."
  187. //
  188. // S_FALSE
  189. // Call succeeded and the result is "FALSE."
  190. //
  191. // other HRESULT
  192. // The call failed.
  193. //
  194. //////////////////////////////////////////////////////////////////////////////
  195. HRESULT
  196. IsMemberOfCluster( void );
  197. //////////////////////////////////////////////////////////////////////////////
  198. //
  199. // STDMETHOD
  200. // GetClusterConfigInfo(
  201. // [ out ] IClusCfgClusterInfo ** ppClusCfgClusterInfoOut
  202. // )
  203. //
  204. // Description:
  205. // If it is a member, use this method to obtain an interface to
  206. // IClusCfgClusterInfo.
  207. //
  208. // Parameter:
  209. // ppClusCfgClusterInfoOut
  210. // Pointer to the IClusCfgClusterInfo interface.
  211. //
  212. // Return Values:
  213. // S_OK
  214. // The call succeeded.
  215. //
  216. // other HRESULTs
  217. // The call failed.
  218. //
  219. //////////////////////////////////////////////////////////////////////////////
  220. HRESULT
  221. GetClusterConfigInfo( [ out ] IClusCfgClusterInfo ** ppClusCfgClusterInfoOut );
  222. //////////////////////////////////////////////////////////////////////////////
  223. //
  224. // STDMETHOD
  225. // GetOSVersion(
  226. // [ out ] DWORD * pdwMajorVersionOut,
  227. // [ out ] DWORD * pdwMinorVersionOut,
  228. // [ out ] WORD * pwSuiteMaskOut,
  229. // [ out ] BYTE * pbProductTypeOut,
  230. // [ out ] BSTR * pbstrCSDVersionOut
  231. // )
  232. //
  233. //////////////////////////////////////////////////////////////////////////////
  234. HRESULT
  235. GetOSVersion(
  236. [ out ] DWORD * pdwMajorVersionOut,
  237. [ out ] DWORD * pdwMinorVersionOut,
  238. [ out ] WORD * pwSuiteMaskOut,
  239. [ out ] BYTE * pbProductTypeOut,
  240. [ out ] BSTR * pbstrCSDVersionOut
  241. );
  242. //////////////////////////////////////////////////////////////////////////////
  243. //
  244. // STDMETHOD
  245. // GetClusterVersion(
  246. // [ out ] DWORD * pdwNodeHighestVersion,
  247. // [ out ] DWORD * pdwNodeLowestVersion
  248. // )
  249. //
  250. // Description:
  251. // Retrieves the version of the cluster.
  252. //
  253. // Parameters:
  254. // pdwNodeHighestVersion
  255. // The highest version in the cluster.
  256. //
  257. // pdwNodeLowestVersion
  258. // The lowest version in the cluster.
  259. //
  260. // Return Values:
  261. // S_OK
  262. // The call succeeded.
  263. //
  264. // other HRESULTs
  265. // The call failed.
  266. //
  267. //////////////////////////////////////////////////////////////////////////////
  268. HRESULT
  269. GetClusterVersion(
  270. [ out ] DWORD * pdwNodeHighestVersion,
  271. [ out ] DWORD * pdwNodeLowestVersion
  272. );
  273. //////////////////////////////////////////////////////////////////////////////
  274. //
  275. // STDMETHOD
  276. // GetDriveLetterMappings(
  277. // [ out ] SDriveLetterMapping dlmDriveLetterUsageOut
  278. // )
  279. //
  280. // Description:
  281. // Retrieves the drive letter mappings on the node.
  282. //
  283. // Parameter:
  284. // rgDriveLetterUsage
  285. // An array of flags representing A: thru Z: (26) drive mappings to
  286. // the device. See SDriveLetterMapping for flag values.
  287. //
  288. // Return Values:
  289. // S_OK
  290. // Success.
  291. //
  292. // other HRESULT
  293. // The call failed.
  294. //
  295. //////////////////////////////////////////////////////////////////////////
  296. HRESULT
  297. GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterUsageOut );
  298. }; //*** interface IClusCfgNodeInfo
  299. //****************************************************************************
  300. //++
  301. //
  302. // interface IEnumClusCfgManagedResources
  303. //
  304. // Description:
  305. // This interface enumerates all resources on this computer that the
  306. // cluster service can manage.
  307. //
  308. //--
  309. //****************************************************************************
  310. [
  311. object,
  312. uuid( 7DBE11EB-A5DF-4534-ABF6-8BAC7B53FC95 ),
  313. async_uuid( B138483F-9695-4fa6-A98F-0DE2FB355449 ),
  314. pointer_default( unique )
  315. ]
  316. interface IEnumClusCfgManagedResources : IUnknown
  317. {
  318. //////////////////////////////////////////////////////////////////////////
  319. //
  320. // STDMETHOD
  321. // Next(
  322. // [ in ] ULONG cNumberRequestedIn,
  323. // [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgManagedResourceInfo ** rgpManagedResourceInfoOut,
  324. // [ out ] ULONG * pcNumberFetchedOut
  325. // );
  326. //
  327. // Description:
  328. // Retrieves the next cNumberRequestedIn items in the enumeration sequence.
  329. // If there are fewer than the requested number of elements left in the
  330. // sequence, it retrieves the remaining elements. The number of elements
  331. // actually retrieved is returned through pcNumberFetchedOut (unless the
  332. // caller passed in NULL for that parameter).
  333. //
  334. // Parameters:
  335. // cNumberRequestedIn
  336. // number of elements being requested.
  337. //
  338. // rgpManagedResourceInfoOut
  339. // Array of size cNumberRequestedIn (or larger) of the elements of interest.
  340. // The type of this parameter depends on the item being enumerated.
  341. //
  342. // pcNumberFetchedOut
  343. // Pointer to the number of elements actually supplied in
  344. // rgpManagedResourceInfoOut. Caller can pass in NULL if cNumberRequestedIn
  345. // is one.
  346. //
  347. // Return Values:
  348. // S_OK
  349. // The number of elements supplied is cNumberRequestedIn
  350. //
  351. // S_FALSE
  352. // The number of elements supplied is not cNumberRequestedIn
  353. //
  354. // other HRESULT
  355. // The call failed.
  356. //
  357. //////////////////////////////////////////////////////////////////////////
  358. HRESULT
  359. Next(
  360. [ in ] ULONG cNumberRequestedIn,
  361. [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgManagedResourceInfo ** rgpManagedResourceInfoOut,
  362. [ out ] ULONG * pcNumberFetchedOut
  363. );
  364. //////////////////////////////////////////////////////////////////////////
  365. //
  366. // STDMETHOD
  367. // Reset( void );
  368. //
  369. // Description:
  370. // Reset the enumeration sequence to the beginning.
  371. //
  372. // Return Value:
  373. // S_OK
  374. // Success.
  375. //
  376. // other HRESULT
  377. // The call failed.
  378. //
  379. //////////////////////////////////////////////////////////////////////////
  380. HRESULT
  381. Reset( void );
  382. //////////////////////////////////////////////////////////////////////////
  383. //
  384. // STDMETHOD
  385. // Skip(
  386. // [ in ] ULONG cNumberToSkip
  387. // );
  388. //
  389. // Description:
  390. // Skips over the next specified number of elements in the enumeration sequence.
  391. //
  392. // Parameter:
  393. // cNumberToSkip
  394. // The number of elements to be skipped.
  395. //
  396. // Return Value:
  397. // S_OK
  398. // The number of elements skipped is cNumberToSkip.
  399. //
  400. // S_FALSE
  401. // Success, but you're past the last element.
  402. //
  403. // other HRESULT
  404. // The call failed.
  405. //
  406. //////////////////////////////////////////////////////////////////////////
  407. HRESULT
  408. Skip( [ in ] ULONG cNumberToSkip );
  409. //////////////////////////////////////////////////////////////////////////
  410. //
  411. // STDMETHOD
  412. // Clone(
  413. // [ out ] IEnumClusCfgManagedResources ** ppEnumManagedResources
  414. // );
  415. //
  416. // Description:
  417. // Creates another enumerator that contains the same enumeration state
  418. // as the current one. Using this function, a client can record a
  419. // particular point in the enumeration sequence, and then return to
  420. // that point at a later time. The new enumerator supports the same
  421. // interface as the original one.
  422. //
  423. // Return Values:
  424. // E_INVALIDARG
  425. // ppEnumManagedResources is invalid.
  426. //
  427. // E_OUTOFMEMORY
  428. // Out of memory.
  429. //
  430. // E_UNEXPECTED
  431. // Unknown error (it's in the EnumXXXX docs).
  432. //
  433. //////////////////////////////////////////////////////////////////////////
  434. HRESULT
  435. Clone( [ out ] IEnumClusCfgManagedResources ** ppEnumManagedResourcesOut );
  436. //////////////////////////////////////////////////////////////////////////
  437. //
  438. // STDMETHOD
  439. // Count(
  440. // [ out, ref ] DWORD * pnCountOut
  441. // );
  442. //
  443. // Description:
  444. // Returns the size (possibly zero) of the enumerator's collection.
  445. //
  446. // Return Values:
  447. // E_POINTER
  448. // pnCountOut was null.
  449. //
  450. //////////////////////////////////////////////////////////////////////////
  451. HRESULT
  452. Count( [ out, ref ] DWORD * pnCountOut );
  453. }; //*** interface IEnumClusCfgManagedResources
  454. //****************************************************************************
  455. //++
  456. //
  457. // interface IEnumClusCfgNetworks
  458. //
  459. // Description:
  460. // This interface enumerates the networks on this computer.
  461. //
  462. //--
  463. //****************************************************************************
  464. [
  465. object,
  466. uuid( CF3FAED8-1322-4bcb-9923-B5B745A69E36 ),
  467. async_uuid( F56B9B0D-E7B8-49ec-A843-5475076B947D ),
  468. pointer_default( unique )
  469. ]
  470. interface IEnumClusCfgNetworks : IUnknown
  471. {
  472. //////////////////////////////////////////////////////////////////////////
  473. //
  474. // STDMETHOD
  475. // Next(
  476. // [ in ] ULONG cNumberRequestedIn,
  477. // [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgNetworkInfo ** rgpNetworkInfoOut,
  478. // [ out ] ULONG * pcNumberFetchedOut
  479. // );
  480. //
  481. // Description:
  482. // Retrieves the next cNumberRequestedIn items in the enumeration sequence.
  483. // If there are fewer than the requested number of elements left in the
  484. // sequence, it retrieves the remaining elements. The number of elements
  485. // actually retrieved is returned through pcNumberFetchedOut (unless the
  486. // caller passed in NULL for that parameter).
  487. //
  488. // Parameters:
  489. // cNumberRequestedIn
  490. // number of elements being requested.
  491. //
  492. // rgpNetworkInfoOut
  493. // Array of size cNumberRequestedIn (or larger) of the elements of interest.
  494. // The type of this parameter depends on the item being enumerated.
  495. //
  496. // pcNumberFetchedOut
  497. // Pointer to the number of elements actually supplied in
  498. // rgpNetworkInfoOut. Caller can pass in NULL if cNumberRequestedIn
  499. // is one.
  500. //
  501. // Return Values:
  502. // S_OK
  503. // The number of elements supplied is cNumberRequestedIn
  504. //
  505. // S_FALSE
  506. // The number of elements supplied is not cNumberRequestedIn.
  507. //
  508. // other HRESULT
  509. // The call failed.
  510. //
  511. //////////////////////////////////////////////////////////////////////////
  512. HRESULT
  513. Next(
  514. [ in ] ULONG cNumberRequestedIn,
  515. [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgNetworkInfo ** rgpNetworkInfoOut,
  516. [ out ] ULONG * pcNumberFetchedOut
  517. );
  518. //////////////////////////////////////////////////////////////////////////
  519. //
  520. // STDMETHOD
  521. // Skip(
  522. // [ in ] ULONG cNumberToSkip
  523. // );
  524. //
  525. // Description:
  526. // Skips over the next specified number of elements in the enumeration sequence.
  527. //
  528. // Parameter:
  529. // cNumberToSkip
  530. // The number of elements to be skipped.
  531. //
  532. // Return Value:
  533. // S_OK
  534. // The number of elements skipped is cNumberToSkip.
  535. //
  536. // S_FALSE
  537. // Success, but you've past the last element.
  538. //
  539. // other HRESULT
  540. // The call failed.
  541. //
  542. //////////////////////////////////////////////////////////////////////////
  543. HRESULT
  544. Skip( [ in ] ULONG cNumberToSkipIn );
  545. //////////////////////////////////////////////////////////////////////////
  546. //
  547. // STDMETHOD
  548. // Reset( void );
  549. //
  550. // Description:
  551. // Reset the enumeration sequence to the beginning.
  552. //
  553. // Return Value:
  554. // S_OK
  555. // Success.
  556. //
  557. // other HRESULT
  558. // The call failed.
  559. //
  560. //////////////////////////////////////////////////////////////////////////
  561. HRESULT
  562. Reset( void );
  563. //////////////////////////////////////////////////////////////////////////
  564. //
  565. // STDMETHOD
  566. // Clone(
  567. // [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut
  568. // );
  569. //
  570. // Description:
  571. // Creates another enumerator that contains the same enumeration state
  572. // as the current one. Using this function, a client can record a
  573. // particular point in the enumeration sequence, and then return to
  574. // that point at a later time. The new enumerator supports the same
  575. // interface as the original one.
  576. //
  577. // Parameter:
  578. // ppEnumNetworksOut
  579. // Address of IEnumClusCfgManagedResources * pointer variable that receives
  580. // the interface pointer to the enumeration object. If the method is
  581. // unsuccessful, the value of this output variable is undefined.
  582. //
  583. // Return Values:
  584. // E_INVALIDARG
  585. // ppEnumNetworksOut is invalid.
  586. //
  587. // E_OUTOFMEMORY
  588. // Out of memory.
  589. //
  590. // E_UNEXPECTED
  591. // Unknown error (it's in the EnumXXXX docs).
  592. //
  593. //////////////////////////////////////////////////////////////////////////
  594. HRESULT
  595. Clone( [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut );
  596. //////////////////////////////////////////////////////////////////////////
  597. //
  598. // STDMETHOD
  599. // Count(
  600. // [ out, ref ] DWORD * pnCountOut
  601. // );
  602. //
  603. // Description:
  604. // Returns the size (possibly zero) of the enumerator's collection.
  605. //
  606. // Return Values:
  607. // E_POINTER
  608. // pnCountOut was null.
  609. //
  610. //////////////////////////////////////////////////////////////////////////
  611. HRESULT
  612. Count( [ out, ref ] DWORD * pnCountOut );
  613. }; //*** interface IEnumClusCfgNetworks
  614. //****************************************************************************
  615. //++
  616. //
  617. // interface IClusCfgManagedResourceInfo
  618. //
  619. // Description:
  620. // This interface encapsulates a manageable resource on this computer.
  621. //
  622. //--
  623. //****************************************************************************
  624. [
  625. object,
  626. uuid( E0324847-1520-41b0-B960-54198DA5F8AF ),
  627. async_uuid( 73616028-1243-4749-AD84-0B5EB358FFA0 ),
  628. pointer_default( unique )
  629. ]
  630. interface IClusCfgManagedResourceInfo : IUnknown
  631. {
  632. //
  633. // UID
  634. //
  635. //////////////////////////////////////////////////////////////////////////
  636. //
  637. // STDMETHOD
  638. // GetUID(
  639. // [ out ] BSTR * pbstrUIDOut
  640. // )
  641. //
  642. // Description:
  643. // Retrieve the Unique IDentifier for this device. This is not a Universally
  644. // Unique IDentifier (UUID or GUID). This indentifer should match identifiers
  645. // that can be generated on other nodes that can see this device from a shared
  646. // bus (such as a SCSI device).
  647. //
  648. // Parameters:
  649. // pbstrUIDOut
  650. // Pointer to the UID string. pbstrUIDOut should be freed by the caller
  651. // by calling SysFreeString( ).
  652. //
  653. // Return Values:
  654. // S_OK
  655. // Success.
  656. //
  657. // E_OUTOFMEMORY
  658. // Out of memory.
  659. //
  660. // other HRESULT
  661. // The call failed.
  662. //
  663. //////////////////////////////////////////////////////////////////////////
  664. HRESULT
  665. GetUID( [ out ] BSTR * pbstrUIDOut );
  666. //
  667. // Name
  668. //
  669. //////////////////////////////////////////////////////////////////////////
  670. //
  671. // STDMETHOD
  672. // GetName(
  673. // [ out ] BSTR * pbstrNameOut
  674. // )
  675. //
  676. // Description:
  677. // Retrieves a "user friendly" name of the device.
  678. //
  679. // Parameter:
  680. // pbstrNameOut
  681. // Pointer to device name. This should be freed by the caller by calling
  682. // SysFreeString( ).
  683. //
  684. // Return Values:
  685. // S_OK
  686. // Success.
  687. //
  688. // E_OUTOFMEMORY
  689. // Out of memory.
  690. //
  691. // other HRESULT
  692. // The call failed.
  693. //
  694. //////////////////////////////////////////////////////////////////////////
  695. HRESULT
  696. GetName( [ out ] BSTR * pbstrNameOut );
  697. //////////////////////////////////////////////////////////////////////////
  698. //
  699. // STDMETHOD
  700. // SetName(
  701. // [ in ] LPCWSTR pcszNameIn
  702. // )
  703. //
  704. // Description:
  705. // Stores a new name for the device to be set when the cluster
  706. // configuration is commited.
  707. //
  708. // Parameter:
  709. // pcszNameIn
  710. // The name of the user wants to assigned the device.
  711. //
  712. // Return Value:
  713. // S_OK
  714. // Success.
  715. //
  716. // E_OUTOFMEMORY
  717. // Out of memory.
  718. //
  719. // other HRESULT
  720. // The call failed.
  721. //
  722. //////////////////////////////////////////////////////////////////////////
  723. HRESULT
  724. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  725. //
  726. // Managed by cluster?
  727. //
  728. //////////////////////////////////////////////////////////////////////////
  729. //
  730. // STDMETHOD
  731. // IsManaged( void )
  732. //
  733. // Description:
  734. // Call this to determine if the device is/will be managed by the cluster.
  735. //
  736. // Return Values:
  737. // S_OK
  738. // Call succeeded and the result is "TRUE."
  739. //
  740. // S_FALSE
  741. // Call succeeded and the result is "FALSE."
  742. //
  743. // other HRESULT
  744. // The call failed.
  745. //
  746. //////////////////////////////////////////////////////////////////////////
  747. HRESULT
  748. IsManaged( void );
  749. //////////////////////////////////////////////////////////////////////////
  750. //
  751. // STDMETHOD
  752. // SetManaged(
  753. // [ in ] BOOL fIsManagedIn
  754. // )
  755. //
  756. // Description:
  757. // Setting this flag will cause the device to be configured as being managed
  758. // by the cluster.
  759. //
  760. // Parameter:
  761. // fIsManagedIn
  762. // If TRUE, the device will be marked as being managed by the cluster.
  763. //
  764. // Return Value:
  765. // S_OK
  766. // Success.
  767. //
  768. // other HRESULT
  769. // The call failed.
  770. //
  771. //////////////////////////////////////////////////////////////////////////
  772. HRESULT
  773. SetManaged( [ in ] BOOL fIsManagedIn );
  774. //
  775. // Quorum Device?
  776. //
  777. //////////////////////////////////////////////////////////////////////////
  778. //
  779. // STDMETHOD
  780. // IsQuorumDevice( void )
  781. //
  782. // Description:
  783. // Call this to determine if the device is/will be set as the quorum
  784. // device.
  785. //
  786. // Return Values:
  787. // S_OK
  788. // Call succeeded and the result is "TRUE."
  789. //
  790. // S_FALSE
  791. // Call succeeded and the result is "FALSE."
  792. //
  793. // other HRESULT
  794. // The call failed.
  795. //
  796. //////////////////////////////////////////////////////////////////////////
  797. HRESULT
  798. IsQuorumDevice( void );
  799. //////////////////////////////////////////////////////////////////////////
  800. //
  801. // STDMETHOD
  802. // SetQuorumedDevice(
  803. // [ in ] BOOL fIsQuorumDeviceIn
  804. // )
  805. //
  806. // Description:
  807. // Setting this flag will cause the device to be configured as the
  808. // quorum device in the cluster.
  809. //
  810. // Parameter:
  811. // fIsQuorumDeviceIn
  812. // If TRUE, the device will be marked to be the quorum device.
  813. //
  814. // Return Value:
  815. // S_OK
  816. // Success.
  817. //
  818. // E_UNEXPECTED
  819. // You tried to set a device to be the quorum when the device is not
  820. // capable of being a quorum device.
  821. //
  822. // other HRESULT
  823. // The call failed.
  824. //
  825. //////////////////////////////////////////////////////////////////////////
  826. HRESULT
  827. SetQuorumedDevice( [ in ] BOOL fIsQuorumDeviceIn );
  828. //
  829. // Quorum Capable?
  830. //
  831. //////////////////////////////////////////////////////////////////////////
  832. //
  833. // STDMETHOD
  834. // IsQuorumCapable( void )
  835. //
  836. // Description:
  837. // Call this to determine if the device is capable be set as the quorum
  838. // device.
  839. //
  840. // Return Values:
  841. // S_OK
  842. // Call succeeded and the result is "TRUE."
  843. //
  844. // S_FALSE
  845. // Call succeeded and the result is "FALSE."
  846. //
  847. // other HRESULT
  848. // The call failed.
  849. //
  850. //////////////////////////////////////////////////////////////////////////
  851. HRESULT
  852. IsQuorumCapable( void );
  853. //
  854. // Drive Letter Mapping
  855. //
  856. //////////////////////////////////////////////////////////////////////////
  857. //
  858. // STDMETHOD
  859. // GetDriveLetterMappings(
  860. // [ out ] SDriveLetterMapping dlmDriveLetterMappingsOut
  861. // )
  862. //
  863. // Description:
  864. // Retrieves the drive mappings for the device (if any).
  865. //
  866. // Parameter:
  867. // rgDriveLetterMappings
  868. // An array of flags representing A: thru Z: (26) drive mappings to
  869. // the device. See SDriveLetterMapping for flag values.
  870. //
  871. // Return Values:
  872. // S_OK
  873. // Success.
  874. //
  875. // other HRESULT
  876. // The call failed.
  877. //
  878. //////////////////////////////////////////////////////////////////////////
  879. HRESULT
  880. GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterMappingOut );
  881. //////////////////////////////////////////////////////////////////////////
  882. //
  883. // STDMETHOD
  884. // SetDriveLetterMappings(
  885. // [ in ] SDriveLetterMapping dlmDriveLetterMappingIn
  886. // )
  887. //
  888. // Description:
  889. // Stores the drive mappings for the device. The change will not take
  890. // effect until the configuration has been committed.
  891. //
  892. // Parameter:
  893. // rgDriveLetterMappings
  894. // An array of flags representing A: thru Z: (26) drive mappings to
  895. // the device. See EDriveLetterUsage for flag values.
  896. //
  897. // Return Values:
  898. // S_OK
  899. // Success.
  900. //
  901. // other HRESULT
  902. // The call failed.
  903. //
  904. //////////////////////////////////////////////////////////////////////////
  905. HRESULT
  906. SetDriveLetterMappings( [ in ] SDriveLetterMapping dlmDriveLetterMappingIn );
  907. //////////////////////////////////////////////////////////////////////////
  908. //
  909. // STDMETHOD
  910. // IsDeviceJoinable( void )
  911. //
  912. // Description:
  913. // Call this to determine if the quorum capable device allows other nodes
  914. // to join.
  915. //
  916. // Return Values:
  917. // S_OK
  918. // Call succeeded and the result is "TRUE."
  919. //
  920. // S_FALSE
  921. // Call succeeded and the result is "FALSE."
  922. //
  923. // other HRESULT
  924. // The call failed.
  925. //
  926. //////////////////////////////////////////////////////////////////////////
  927. HRESULT
  928. IsDeviceJoinable( void );
  929. //////////////////////////////////////////////////////////////////////////
  930. //
  931. // STDMETHOD
  932. // SetDeviceJoinable(
  933. // [ in ] BOOL fJoinableIn
  934. // )
  935. //
  936. // Description:
  937. // Call this to set the joinable flag.
  938. //
  939. // Return Values:
  940. // S_OK
  941. // Call succeeded
  942. //
  943. // other HRESULT
  944. // The call failed.
  945. //
  946. //////////////////////////////////////////////////////////////////////////
  947. HRESULT
  948. SetDeviceJoinable( [ in ] BOOL fJoinableIn );
  949. }; //*** interface IClusCfgManagedResourceInfo
  950. //****************************************************************************
  951. //++
  952. //
  953. // interface IEnumClusCfgPartitions
  954. //
  955. // Description:
  956. // This interface enumerates the partitions on a storage device that the
  957. // cluster service can manage.
  958. //
  959. //--
  960. //****************************************************************************
  961. [
  962. object,
  963. uuid( 4440BB6A-B0AC-479d-B534-7265A31D6C55 ),
  964. async_uuid( 4440BB6A-B0AC-479d-B534-7265A31D6C56 ),
  965. pointer_default( unique )
  966. ]
  967. interface IEnumClusCfgPartitions : IUnknown
  968. {
  969. //////////////////////////////////////////////////////////////////////////
  970. //
  971. // STDMETHOD
  972. // Next(
  973. // [ in ] ULONG cNumberRequestedIn,
  974. // [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgPartitionInfo ** rgpPartitionInfoOut,
  975. // [ out ] ULONG * pcNumberFetchedOut
  976. // );
  977. //
  978. // Description:
  979. // Retrieves the next cNumberRequestedIn items in the enumeration sequence.
  980. // If there are fewer than the requested number of elements left in the
  981. // sequence, it retrieves the remaining elements. The number of elements
  982. // actually retrieved is returned through pcNumberFetchedOut (unless the
  983. // caller passed in NULL for that parameter).
  984. //
  985. // Parameters:
  986. // cNumberRequestedIn
  987. // number of elements being requested.
  988. //
  989. // rgpPartitionInfoOut
  990. // Array of size cNumberRequestedIn (or larger) of the elements of interest.
  991. // The type of this parameter depends on the item being enumerated.
  992. //
  993. // pcNumberFetchedOut
  994. // Pointer to the number of elements actually supplied in
  995. // rgpPartitionInfoOut. Caller can pass in NULL if cNumberRequestedIn
  996. // is one.
  997. //
  998. // Return Values:
  999. // S_OK
  1000. // The number of elements supplied is cNumberRequestedIn
  1001. //
  1002. // S_FALSE
  1003. // The number of elements supplied is not cNumberRequestedIn
  1004. //
  1005. // other HRESULT
  1006. // The call failed.
  1007. //
  1008. //////////////////////////////////////////////////////////////////////////
  1009. HRESULT
  1010. Next(
  1011. [ in ] ULONG cNumberRequestedIn,
  1012. [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgPartitionInfo ** rgpPartitionInfoOut,
  1013. [ out ] ULONG * pcNumberFetchedOut
  1014. );
  1015. //////////////////////////////////////////////////////////////////////////
  1016. //
  1017. // STDMETHOD
  1018. // Reset( void );
  1019. //
  1020. // Description:
  1021. // Reset the enumeration sequence to the beginning.
  1022. //
  1023. // Return Value:
  1024. // S_OK
  1025. // Success.
  1026. //
  1027. // other HRESULT
  1028. // The call failed.
  1029. //
  1030. //////////////////////////////////////////////////////////////////////////
  1031. HRESULT
  1032. Reset( void );
  1033. //////////////////////////////////////////////////////////////////////////
  1034. //
  1035. // STDMETHOD
  1036. // Skip(
  1037. // [ in ] ULONG cNumberToSkip
  1038. // );
  1039. //
  1040. // Description:
  1041. // Skips over the next specified number of elements in the enumeration sequence.
  1042. //
  1043. // Parameter:
  1044. // cNumberToSkip
  1045. // The number of elements to be skipped.
  1046. //
  1047. // Return Value:
  1048. // S_OK
  1049. // The number of elements skipped is cNumberToSkip.
  1050. //
  1051. // S_FALSE
  1052. // Success, but you've past the last element.
  1053. //
  1054. // other HRESULT
  1055. // The call failed.
  1056. //
  1057. //////////////////////////////////////////////////////////////////////////
  1058. HRESULT
  1059. Skip( [ in ] ULONG cNumberToSkip );
  1060. //////////////////////////////////////////////////////////////////////////
  1061. //
  1062. // STDMETHOD
  1063. // Clone(
  1064. // [ out ] IEnumClusCfgPartitions ** ppEnumPartitions
  1065. // );
  1066. //
  1067. // Description:
  1068. // Creates another enumerator that contains the same enumeration state
  1069. // as the current one. Using this function, a client can record a
  1070. // particular point in the enumeration sequence, and then return to
  1071. // that point at a later time. The new enumerator supports the same
  1072. // interface as the original one.
  1073. //
  1074. // Return Values:
  1075. // E_INVALIDARG
  1076. // ppEnumPartitions is invalid.
  1077. //
  1078. // E_OUTOFMEMORY
  1079. // Out of memory.
  1080. //
  1081. // E_UNEXPECTED
  1082. // Unknown error (it's in the EnumXXXX docs).
  1083. //
  1084. //////////////////////////////////////////////////////////////////////////
  1085. HRESULT
  1086. Clone( [ out ] IEnumClusCfgPartitions ** ppEnumPartitions );
  1087. //////////////////////////////////////////////////////////////////////////
  1088. //
  1089. // STDMETHOD
  1090. // Count(
  1091. // [ out, ref ] DWORD * pnCountOut
  1092. // );
  1093. //
  1094. // Description:
  1095. // Returns the size (possibly zero) of the enumerator's collection.
  1096. //
  1097. // Return Values:
  1098. // E_POINTER
  1099. // pnCountOut was null.
  1100. //
  1101. //////////////////////////////////////////////////////////////////////////
  1102. HRESULT
  1103. Count( [ out, ref ] DWORD * pnCountOut );
  1104. }; //*** interface IEnumClusCfgPartitions
  1105. //****************************************************************************
  1106. //++
  1107. //
  1108. // interface IClusCfgPartitionInfo
  1109. //
  1110. // Description:
  1111. // This interface provides the partition info.
  1112. //
  1113. //--
  1114. //****************************************************************************
  1115. [
  1116. object,
  1117. uuid( EC1EBD9F-5866-4846-8952-EC36C3961EEE ),
  1118. async_uuid( EC1EBD9F-5866-4846-8952-EC36C3961EEF ),
  1119. pointer_default( unique )
  1120. ]
  1121. interface IClusCfgPartitionInfo : IUnknown
  1122. {
  1123. //
  1124. // UID
  1125. //
  1126. //////////////////////////////////////////////////////////////////////////
  1127. //
  1128. // STDMETHOD
  1129. // GetUID(
  1130. // [ out ] BSTR * pbstrUIDOut
  1131. // )
  1132. //
  1133. // Description:
  1134. // Retrieve the "Unique IDentifier" for this partition. This is not a Universally
  1135. // Unique IDentifier (UUID or GUID). This indentifer should match identifiers
  1136. // that can be generated on other nodes, but must be unique for the partition
  1137. // the interface (NIC) is on.
  1138. //
  1139. // Parameters:
  1140. // pbstrUIDOut
  1141. // Pointer to the UID string. pbstrUIDOut should be freed by the caller
  1142. // by calling SysFreeString( ).
  1143. //
  1144. // Return Values:
  1145. // S_OK
  1146. // Success.
  1147. //
  1148. // E_OUTOFMEMORY
  1149. // Out of memory.
  1150. //
  1151. // other HRESULT
  1152. // The call failed.
  1153. //
  1154. //////////////////////////////////////////////////////////////////////////
  1155. HRESULT
  1156. GetUID( [ out ] BSTR * pbstrUIDOut );
  1157. //
  1158. // Name
  1159. //
  1160. //////////////////////////////////////////////////////////////////////////
  1161. //
  1162. // STDMETHOD
  1163. // GetName(
  1164. // [ out ] BSTR * pbstrNameOut
  1165. // )
  1166. //
  1167. // Description:
  1168. // Retrieves a "user friendly" name of the interface.
  1169. //
  1170. // Parameter:
  1171. // pbstrNameOut
  1172. // Pointer to partition interface name. This should be freed by the caller
  1173. // by calling SysFreeString( ).
  1174. //
  1175. // Return Values:
  1176. // S_OK
  1177. // Success.
  1178. //
  1179. // E_OUTOFMEMORY
  1180. // Out of memory.
  1181. //
  1182. // other HRESULT
  1183. // The call failed.
  1184. //
  1185. //////////////////////////////////////////////////////////////////////////
  1186. HRESULT
  1187. GetName( [ out ] BSTR * pbstrNameOut );
  1188. //////////////////////////////////////////////////////////////////////////
  1189. //
  1190. // STDMETHOD
  1191. // SetName(
  1192. // [ in ] LPCWSTR pcszNameIn
  1193. // )
  1194. //
  1195. // Description:
  1196. // Stores a new name of the partition interface to be set when the cluster
  1197. // configuration is commited.
  1198. //
  1199. // Parameter:
  1200. // pcszNameIn
  1201. // The name of the user wants to assigned the interface.
  1202. //
  1203. // Return Value:
  1204. // S_OK
  1205. // Success.
  1206. //
  1207. // E_OUTOFMEMORY
  1208. // Out of memory.
  1209. //
  1210. // other HRESULT
  1211. // The call failed.
  1212. //
  1213. //////////////////////////////////////////////////////////////////////////
  1214. HRESULT
  1215. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  1216. //
  1217. // Description
  1218. //
  1219. //////////////////////////////////////////////////////////////////////////
  1220. //
  1221. // STDMETHOD
  1222. // GetDescription(
  1223. // [ out ] BSTR * pbstrDescriptionOut
  1224. // )
  1225. //
  1226. // Description:
  1227. // Retrieves the description string for a partition interface.
  1228. //
  1229. // Parameter:
  1230. // pbstrDescription
  1231. // Pointer to the description of the partition. This should be freed
  1232. // by the caller by calling SysFreeString( ).
  1233. //
  1234. // Return Values:
  1235. // S_OK
  1236. // Success.
  1237. //
  1238. // E_OUTOFMEMORY
  1239. // Out of memory.
  1240. //
  1241. // other HRESULT
  1242. // The call failed.
  1243. //
  1244. //////////////////////////////////////////////////////////////////////////
  1245. HRESULT
  1246. GetDescription( [ out ] BSTR * pbstrDescriptionOut );
  1247. //////////////////////////////////////////////////////////////////////////
  1248. //
  1249. // STDMETHOD
  1250. // SetDescription(
  1251. // [ in ] LPCWSTR pcszDescriptionIn
  1252. // )
  1253. //
  1254. // Description:
  1255. // Stores a new name of the partition interface to be set when the cluster
  1256. // configuration is commited.
  1257. //
  1258. // Parameter:
  1259. // pcszDescriptionIn
  1260. // The description the user wants to assign to the interface.
  1261. //
  1262. // Return Values:
  1263. // S_OK
  1264. // Success.
  1265. //
  1266. // E_OUTOFMEMORY
  1267. // Out of memory.
  1268. //
  1269. // other HRESULT
  1270. // The call failed.
  1271. //
  1272. //////////////////////////////////////////////////////////////////////////
  1273. HRESULT
  1274. SetDescription(
  1275. [ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn
  1276. );
  1277. //
  1278. // Drive Letter Mapping
  1279. //
  1280. //////////////////////////////////////////////////////////////////////////////
  1281. //
  1282. // STDMETHOD
  1283. // GetDriveLetterMappings(
  1284. // [ out ] SDriveLetterMapping dlmDriveLetterUsageOut
  1285. // )
  1286. //
  1287. // Description:
  1288. // Retrieves the drive letter mappings of the partition.
  1289. //
  1290. // Parameter:
  1291. // rgDriveLetterUsage
  1292. // An array of flags representing A: thru Z: (26) drive mappings to
  1293. // the device. See SDriveLetterMapping for flag values.
  1294. //
  1295. // Return Values:
  1296. // S_OK
  1297. // Success.
  1298. //
  1299. // other HRESULT
  1300. // The call failed.
  1301. //
  1302. //////////////////////////////////////////////////////////////////////////
  1303. HRESULT
  1304. GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterUsageOut );
  1305. //////////////////////////////////////////////////////////////////////////
  1306. //
  1307. // STDMETHOD
  1308. // SetDriveLetterMappings(
  1309. // [ in ] SDriveLetterMapping dlmDriveLetterMappingIn
  1310. // )
  1311. //
  1312. // Description:
  1313. // Stores the drive mappings for the device. The change will not take
  1314. // effect until the configuration has been committed.
  1315. //
  1316. // Parameter:
  1317. // rgDriveLetterMappings
  1318. // An array of flags representing A: thru Z: (26) drive mappings to
  1319. // the device. See EDriveLetterUsage for flag values.
  1320. //
  1321. // Return Values:
  1322. // S_OK
  1323. // Success.
  1324. //
  1325. // other HRESULT
  1326. // The call failed.
  1327. //
  1328. //////////////////////////////////////////////////////////////////////////
  1329. HRESULT
  1330. SetDriveLetterMappings( [ in ] SDriveLetterMapping dlmDriveLetterMappingIn );
  1331. //
  1332. // Partition Size
  1333. //
  1334. //////////////////////////////////////////////////////////////////////////////
  1335. //
  1336. // STDMETHOD
  1337. // GetSize(
  1338. // [ out ] ULONG * pcMegaBytes
  1339. // )
  1340. //
  1341. // Description:
  1342. // Retrieves the size of the partition in Megabytes.
  1343. //
  1344. // Parameter:
  1345. // pcMegaBytes
  1346. // Retrieves the partition size.
  1347. //
  1348. // Return Values:
  1349. // S_OK
  1350. // Success.
  1351. //
  1352. // other HRESULT
  1353. // The call failed.
  1354. //
  1355. //////////////////////////////////////////////////////////////////////////
  1356. HRESULT
  1357. GetSize( [ out ] ULONG * pcMegaBytes );
  1358. }; //*** interface IClusCfgPartitionInfo
  1359. //****************************************************************************
  1360. //++
  1361. //
  1362. // interface IEnumClusCfgIPAddresses
  1363. //
  1364. // Description:
  1365. // This interface enumerates the IP addresses on this adapter.
  1366. //
  1367. //--
  1368. //****************************************************************************
  1369. [
  1370. object,
  1371. uuid( BD5F35BA-0BC0-455f-926D-C3D356419486 ),
  1372. async_uuid( BD5F35BA-0BC0-455f-926D-C3D356419487 ),
  1373. pointer_default( unique )
  1374. ]
  1375. interface IEnumClusCfgIPAddresses : IUnknown
  1376. {
  1377. //////////////////////////////////////////////////////////////////////////
  1378. //
  1379. // STDMETHOD
  1380. // Next(
  1381. // [ in ] ULONG cNumberRequestedIn,
  1382. // [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgIPAddressInfo ** rgpIPAddressInfoOut,
  1383. // [ out ] ULONG * pcNumberFetchedOut
  1384. // );
  1385. //
  1386. // Description:
  1387. // Retrieves the next cNumberRequestedIn items in the enumeration sequence.
  1388. // If there are fewer than the requested number of elements left in the
  1389. // sequence, it retrieves the remaining elements. The number of elements
  1390. // actually retrieved is returned through pcNumberFetchedOut (unless the
  1391. // caller passed in NULL for that parameter).
  1392. //
  1393. // Parameters:
  1394. // cNumberRequestedIn
  1395. // number of elements being requested.
  1396. //
  1397. // rgpIPAddressInfoOut
  1398. // Array of size cNumberRequestedIn (or larger) of the elements of interest.
  1399. // The type of this parameter depends on the item being enumerated.
  1400. //
  1401. // pcNumberFetchedOut
  1402. // Pointer to the number of elements actually supplied in
  1403. // rgpIPAddressInfoOut. Caller can pass in NULL if cNumberRequestedIn
  1404. // is one.
  1405. //
  1406. // Return Values:
  1407. // S_OK
  1408. // The number of elements supplied is cNumberRequestedIn
  1409. //
  1410. // S_FALSE
  1411. // The number of elements supplied is not cNumberRequestedIn.
  1412. //
  1413. // other HRESULT
  1414. // The call failed.
  1415. //
  1416. //////////////////////////////////////////////////////////////////////////
  1417. HRESULT
  1418. Next(
  1419. [ in ] ULONG cNumberRequestedIn,
  1420. [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgIPAddressInfo ** rgpIPAddressInfoOut,
  1421. [ out ] ULONG * pcNumberFetchedOut
  1422. );
  1423. //////////////////////////////////////////////////////////////////////////
  1424. //
  1425. // STDMETHOD
  1426. // Skip(
  1427. // [ in ] ULONG cNumberToSkip
  1428. // );
  1429. //
  1430. // Description:
  1431. // Skips over the next specified number of elements in the enumeration sequence.
  1432. //
  1433. // Parameter:
  1434. // cNumberToSkip
  1435. // The number of elements to be skipped.
  1436. //
  1437. // Return Value:
  1438. // S_OK
  1439. // The number of elements skipped is cNumberToSkip.
  1440. //
  1441. // S_FALSE
  1442. // Success, but you've past the last element.
  1443. //
  1444. // other HRESULT
  1445. // The call failed.
  1446. //
  1447. //////////////////////////////////////////////////////////////////////////
  1448. HRESULT
  1449. Skip( [ in ] ULONG cNumberToSkipIn );
  1450. //////////////////////////////////////////////////////////////////////////
  1451. //
  1452. // STDMETHOD
  1453. // Reset( void );
  1454. //
  1455. // Description:
  1456. // Reset the enumeration sequence to the beginning.
  1457. //
  1458. // Return Value:
  1459. // S_OK
  1460. // Success.
  1461. //
  1462. // other HRESULT
  1463. // The call failed.
  1464. //
  1465. //////////////////////////////////////////////////////////////////////////
  1466. HRESULT
  1467. Reset( void );
  1468. //////////////////////////////////////////////////////////////////////////
  1469. //
  1470. // STDMETHOD
  1471. // Clone(
  1472. // [ out ] IEnumClusCfgIPAddresses ** ppEnumIPAddressesOut
  1473. // );
  1474. //
  1475. // Description:
  1476. // Creates another enumerator that contains the same enumeration state
  1477. // as the current one. Using this function, a client can record a
  1478. // particular point in the enumeration sequence, and then return to
  1479. // that point at a later time. The new enumerator supports the same
  1480. // interface as the original one.
  1481. //
  1482. // Parameter:
  1483. // ppEnumIPAddressesOut
  1484. // Address of IEnumClusCfgManagedResources * pointer variable that receives
  1485. // the interface pointer to the enumeration object. If the method is
  1486. // unsuccessful, the value of this output variable is undefined.
  1487. //
  1488. // Return Values:
  1489. // E_INVALIDARG
  1490. // ppEnumIPAddressesOut is invalid.
  1491. //
  1492. // E_OUTOFMEMORY
  1493. // Out of memory.
  1494. //
  1495. // E_UNEXPECTED
  1496. // Unknown error (it's in the EnumXXXX docs).
  1497. //
  1498. //////////////////////////////////////////////////////////////////////////
  1499. HRESULT
  1500. Clone( [ out ] IEnumClusCfgIPAddresses ** ppEnumIPAddressesOut );
  1501. //////////////////////////////////////////////////////////////////////////
  1502. //
  1503. // STDMETHOD
  1504. // Count(
  1505. // [ out, ref ] DWORD * pnCountOut
  1506. // );
  1507. //
  1508. // Description:
  1509. // Returns the size (possibly zero) of the enumerator's collection.
  1510. //
  1511. // Return Values:
  1512. // E_POINTER
  1513. // pnCountOut was null.
  1514. //
  1515. //////////////////////////////////////////////////////////////////////////
  1516. HRESULT
  1517. Count( [ out, ref ] DWORD * pnCountOut );
  1518. }; //*** interface IEnumClusCfgIPAddresses
  1519. //****************************************************************************
  1520. //++
  1521. //
  1522. // interface IClusCfgIPAddressInfo
  1523. //
  1524. // Description:
  1525. // This interface encapsulates the info about an IP address.
  1526. //
  1527. //--
  1528. //****************************************************************************
  1529. [
  1530. object,
  1531. uuid( AAEAF0A5-E310-4604-A55E-2F9DDC4157A8 ),
  1532. async_uuid( AAEAF0A5-E310-4604-A55E-2F9DDC4157A9 ),
  1533. pointer_default( unique )
  1534. ]
  1535. interface IClusCfgIPAddressInfo : IUnknown
  1536. {
  1537. //
  1538. // UID
  1539. //
  1540. //////////////////////////////////////////////////////////////////////////
  1541. //
  1542. // STDMETHOD
  1543. // GetUID(
  1544. // [ out ] BSTR * pbstrUIDOut
  1545. // )
  1546. //
  1547. // Description:
  1548. // Retrieve the "Unique IDentifier" for this IP address. This is not a Universally
  1549. // Unique IDentifier (UUID or GUID). This indentifer should match identifiers
  1550. // that can be generated on other nodes, but must be unique for the network
  1551. // the interface (NIC) is on.
  1552. //
  1553. // Parameters:
  1554. // pbstrUIDOut
  1555. // Pointer to the UID string. pbstrUIDOut should be freed by the caller
  1556. // by calling SysFreeString( ).
  1557. //
  1558. // Return Values:
  1559. // S_OK
  1560. // Success.
  1561. //
  1562. // E_OUTOFMEMORY
  1563. // Out of memory.
  1564. //
  1565. // other HRESULT
  1566. // The call failed.
  1567. //
  1568. //////////////////////////////////////////////////////////////////////////
  1569. HRESULT
  1570. GetUID( [ out ] BSTR * pbstrUIDOut );
  1571. //
  1572. // IP Address
  1573. //
  1574. //////////////////////////////////////////////////////////////////////////
  1575. //
  1576. // STDMETHOD
  1577. // GetIPAddress(
  1578. // [ out ] ULONG * pulDottedQuadOut
  1579. // )
  1580. //
  1581. // Description:
  1582. // Retrieves an IP Address for the network inteface.
  1583. //
  1584. // Paramater:
  1585. // pulDottedQuadOut
  1586. // The IP address of the interface in dotted quad format.
  1587. //
  1588. // Return Values:
  1589. // S_OK
  1590. // Success.
  1591. //
  1592. // other HRESULT
  1593. // The call failed.
  1594. //
  1595. //////////////////////////////////////////////////////////////////////////
  1596. HRESULT
  1597. GetIPAddress( [ out ] ULONG * pulDottedQuadOut );
  1598. //////////////////////////////////////////////////////////////////////////
  1599. //
  1600. // STDMETHOD
  1601. // SetIPAddress(
  1602. // [ in ] ULONG ulDottedQuadIn
  1603. // )
  1604. //
  1605. // Description:
  1606. // Stores an IP Address of the network interface to be set when the cluster
  1607. // configuration is committed.
  1608. //
  1609. // Parameter:
  1610. // ulDottedQuadIn
  1611. // The IP address of the interface to be stored in dotted quad format.
  1612. //
  1613. // Return Values:
  1614. // S_OK
  1615. // Success.
  1616. //
  1617. // other HRESULT
  1618. // The call failed.
  1619. //
  1620. //////////////////////////////////////////////////////////////////////////
  1621. HRESULT
  1622. SetIPAddress( [ in ] ULONG ulDottedQuadIn );
  1623. //
  1624. // Subnet Mask
  1625. //
  1626. //////////////////////////////////////////////////////////////////////////
  1627. //
  1628. // STDMETHOD
  1629. // GetSubnetMask(
  1630. // [ out ] ULONG * pulDottedQuadOut
  1631. // )
  1632. //
  1633. // Description:
  1634. // Retrieves a subnet mask for the network interface.
  1635. //
  1636. // Parameter:
  1637. // ulDottedQuadOut
  1638. // The subnet mask of the interface in dotted quad format.
  1639. //
  1640. // Return Value:
  1641. // S_OK
  1642. // Success.
  1643. //
  1644. // other HRESULT
  1645. // The call failed.
  1646. //
  1647. //////////////////////////////////////////////////////////////////////////
  1648. HRESULT
  1649. GetSubnetMask( [ out ] ULONG * pulDottedQuadOut );
  1650. //////////////////////////////////////////////////////////////////////////
  1651. //
  1652. // STDMETHOD
  1653. // SetSubnetMask(
  1654. // [ in ] ULONG ulDottedQuadIn
  1655. // )
  1656. //
  1657. // Description:
  1658. // Stores a subnet mask for the network interface to be set when the cluster
  1659. // configuration is committed.
  1660. //
  1661. // Parameter:
  1662. // ulDottedQuadIn
  1663. // The subnet mask of the interface to be stored in dotted quad format.
  1664. //
  1665. // Return Values:
  1666. // S_OK
  1667. // Success.
  1668. //
  1669. // other HRESULT
  1670. // The call failed.
  1671. //
  1672. //////////////////////////////////////////////////////////////////////////
  1673. HRESULT
  1674. SetSubnetMask( [ in ] ULONG ulDottedQuadIn );
  1675. }; //*** interface IClusCfgIPAddressInfo
  1676. //****************************************************************************
  1677. //++
  1678. //
  1679. // interface IClusCfgNetworkInfo
  1680. //
  1681. // Description:
  1682. // This interface enumerates the networks on this computer.
  1683. //
  1684. //--
  1685. //****************************************************************************
  1686. [
  1687. object,
  1688. uuid( 19FC7580-950A-44a6-966E-74B14B20918F ),
  1689. async_uuid( ED71FD2D-AD02-4dfc-B376-5FFA5F5A7C2C ),
  1690. pointer_default( unique )
  1691. ]
  1692. interface IClusCfgNetworkInfo : IUnknown
  1693. {
  1694. //
  1695. // UID
  1696. //
  1697. //////////////////////////////////////////////////////////////////////////
  1698. //
  1699. // STDMETHOD
  1700. // GetUID(
  1701. // [ out ] BSTR * pbstrUIDOut
  1702. // )
  1703. //
  1704. // Description:
  1705. // Retrieve the "Unique IDentifier" for this network. This is not a Universally
  1706. // Unique IDentifier (UUID or GUID). This indentifer should match identifiers
  1707. // that can be generated on other nodes, but must be unique for the network
  1708. // the interface (NIC) is on.
  1709. //
  1710. // Parameters:
  1711. // pbstrUIDOut
  1712. // Pointer to the UID string. pbstrUIDOut should be freed by the caller
  1713. // by calling SysFreeString( ).
  1714. //
  1715. // Return Values:
  1716. // S_OK
  1717. // Success.
  1718. //
  1719. // E_OUTOFMEMORY
  1720. // Out of memory.
  1721. //
  1722. // other HRESULT
  1723. // The call failed.
  1724. //
  1725. //////////////////////////////////////////////////////////////////////////
  1726. HRESULT
  1727. GetUID( [ out ] BSTR * pbstrUIDOut );
  1728. //
  1729. // Name
  1730. //
  1731. //////////////////////////////////////////////////////////////////////////
  1732. //
  1733. // STDMETHOD
  1734. // GetName(
  1735. // [ out ] BSTR * pbstrNameOut
  1736. // )
  1737. //
  1738. // Description:
  1739. // Retrieves a "user friendly" name of the interface.
  1740. //
  1741. // Parameter:
  1742. // pbstrNameOut
  1743. // Pointer to network interface name. This should be freed by the caller
  1744. // by calling SysFreeString( ).
  1745. //
  1746. // Return Values:
  1747. // S_OK
  1748. // Success.
  1749. //
  1750. // E_OUTOFMEMORY
  1751. // Out of memory.
  1752. //
  1753. // other HRESULT
  1754. // The call failed.
  1755. //
  1756. //////////////////////////////////////////////////////////////////////////
  1757. HRESULT
  1758. GetName( [ out ] BSTR * pbstrNameOut );
  1759. //////////////////////////////////////////////////////////////////////////
  1760. //
  1761. // STDMETHOD
  1762. // SetName(
  1763. // [ in ] LPCWSTR pcszNameIn
  1764. // )
  1765. //
  1766. // Description:
  1767. // Stores a new name of the network interface to be set when the cluster
  1768. // configuration is commited.
  1769. //
  1770. // Parameter:
  1771. // pcszNameIn
  1772. // The name of the user wants to assigned the interface.
  1773. //
  1774. // Return Value:
  1775. // S_OK
  1776. // Success.
  1777. //
  1778. // E_OUTOFMEMORY
  1779. // Out of memory.
  1780. //
  1781. // other HRESULT
  1782. // The call failed.
  1783. //
  1784. //////////////////////////////////////////////////////////////////////////
  1785. HRESULT
  1786. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  1787. //
  1788. // Description
  1789. //
  1790. //////////////////////////////////////////////////////////////////////////
  1791. //
  1792. // STDMETHOD
  1793. // GetDescription(
  1794. // [ out ] BSTR * pbstrDescriptionOut
  1795. // )
  1796. //
  1797. // Description:
  1798. // Retrieves the description string for a network interface.
  1799. //
  1800. // Parameter:
  1801. // pbstrDescription
  1802. // Pointer to the description of the network. This should be freed
  1803. // by the caller by calling SysFreeString( ).
  1804. //
  1805. // Return Values:
  1806. // S_OK
  1807. // Success.
  1808. //
  1809. // E_OUTOFMEMORY
  1810. // Out of memory.
  1811. //
  1812. // other HRESULT
  1813. // The call failed.
  1814. //
  1815. //////////////////////////////////////////////////////////////////////////
  1816. HRESULT
  1817. GetDescription( [ out ] BSTR * pbstrDescriptionOut );
  1818. //////////////////////////////////////////////////////////////////////////
  1819. //
  1820. // STDMETHOD
  1821. // SetDescription(
  1822. // [ in ] LPCWSTR pcszDescriptionIn
  1823. // )
  1824. //
  1825. // Description:
  1826. // Stores a new name of the network interface to be set when the cluster
  1827. // configuration is commited.
  1828. //
  1829. // Parameter:
  1830. // pcszDescriptionIn
  1831. // The description the user wants to assign to the interface.
  1832. //
  1833. // Return Values:
  1834. // S_OK
  1835. // Success.
  1836. //
  1837. // E_OUTOFMEMORY
  1838. // Out of memory.
  1839. //
  1840. // other HRESULT
  1841. // The call failed.
  1842. //
  1843. //////////////////////////////////////////////////////////////////////////
  1844. HRESULT
  1845. SetDescription(
  1846. [ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn
  1847. );
  1848. //
  1849. // Network Address
  1850. //
  1851. //////////////////////////////////////////////////////////////////////////
  1852. //
  1853. // STDMETHOD
  1854. // GetPrimaryNetworkAddress(
  1855. // [ out ] IClusCfgIPAddressInfo ** ppIPAddressOut
  1856. // )
  1857. //
  1858. // Description:
  1859. // Get the primary network address.
  1860. //
  1861. // Parameter:
  1862. // ppIPAddressOut
  1863. // Pointer to the IClusCfgIPAddressInfo interface.
  1864. //
  1865. // Return Values:
  1866. // S_OK
  1867. // The call succeeded.
  1868. //
  1869. // other HRESULTs
  1870. // The call failed.
  1871. //
  1872. //////////////////////////////////////////////////////////////////////////
  1873. HRESULT
  1874. GetPrimaryNetworkAddress( [ out ] IClusCfgIPAddressInfo ** ppIPAddressOut );
  1875. //////////////////////////////////////////////////////////////////////////
  1876. //
  1877. // STDMETHOD
  1878. // SetPrimaryNetworkAddress(
  1879. // [ in ] IClusCfgIPAddressInfo * pIPAddressIn
  1880. // )
  1881. //
  1882. // Description:
  1883. // Set the primary network address.
  1884. //
  1885. // Parameter:
  1886. // pIPAddressIn
  1887. // Pointer to the IClusCfgIPAddressInfo interface.
  1888. //
  1889. // Return Values:
  1890. // S_OK
  1891. // The call succeeded.
  1892. //
  1893. // other HRESULTs
  1894. // The call failed.
  1895. //
  1896. //////////////////////////////////////////////////////////////////////////
  1897. HRESULT
  1898. SetPrimaryNetworkAddress( [ in ] IClusCfgIPAddressInfo * pIPAddressIn );
  1899. //
  1900. // Public?
  1901. //
  1902. //////////////////////////////////////////////////////////////////////////
  1903. //
  1904. // STDMETHOD
  1905. // IsPublic( void )
  1906. //
  1907. // Description:
  1908. // Call this to determine if the network has been configured to be a
  1909. // public network. Note that an interface can be both public and private.
  1910. //
  1911. // Return Values:
  1912. // S_OK
  1913. // Call succeeded and the result is "TRUE."
  1914. //
  1915. // S_FALSE
  1916. // Call succeeded and the result is "FALSE."
  1917. //
  1918. // other HRESULT
  1919. // The call failed.
  1920. //
  1921. //////////////////////////////////////////////////////////////////////////
  1922. HRESULT
  1923. IsPublic( void );
  1924. //////////////////////////////////////////////////////////////////////////
  1925. //
  1926. // STDMETHOD
  1927. // SetPublic(
  1928. // [ in ] BOOL fIsPublicIn
  1929. // )
  1930. //
  1931. // Description:
  1932. // Sets the "public property" of a network interface. The change will not
  1933. // take effect until the configuration has been committed.
  1934. //
  1935. // Parameter:
  1936. // fIsPublicIn
  1937. // If TRUE, the interface will be marked to be a public interface.
  1938. //
  1939. // Return Value:
  1940. // S_OK
  1941. // Success.
  1942. //
  1943. // other HRESULT
  1944. // The call failed.
  1945. //
  1946. //////////////////////////////////////////////////////////////////////////
  1947. HRESULT
  1948. SetPublic( [ in ] BOOL fIsPublicIn );
  1949. //
  1950. // Private?
  1951. //
  1952. //////////////////////////////////////////////////////////////////////////
  1953. //
  1954. // STDMETHOD
  1955. // IsPrivate( void )
  1956. //
  1957. // Description:
  1958. // Call this to determine if the network has been configured to be a
  1959. // private network. Note that an interface can be both public and private.
  1960. //
  1961. // Return Values:
  1962. // S_OK
  1963. // Call succeeded and the result is "TRUE."
  1964. // S_FALSE
  1965. // Call succeeded and the result is "FALSE."
  1966. // other HRESULT
  1967. // The call failed.
  1968. //
  1969. //////////////////////////////////////////////////////////////////////////
  1970. HRESULT
  1971. IsPrivate( void );
  1972. //////////////////////////////////////////////////////////////////////////
  1973. //
  1974. // STDMETHOD
  1975. // SetPrivate(
  1976. // [ in ] BOOL fIsPrivateIn
  1977. // )
  1978. //
  1979. // Description:
  1980. // Sets the "private property" of a network interface. The change will not
  1981. // take effect until the configuration has been committed.
  1982. //
  1983. // Parameter:
  1984. // fIsPrivateIn
  1985. // Value to set the flag to. If TRUE the interface will be marked as
  1986. // a private interface. If FALSE the interface will be marked as NOT
  1987. // a private interface.
  1988. //
  1989. // Return Value:
  1990. // S_OK
  1991. // Success.
  1992. //
  1993. // other HRESULT
  1994. // The call failed.
  1995. //
  1996. //////////////////////////////////////////////////////////////////////////
  1997. HRESULT
  1998. SetPrivate( [ in ] BOOL fIsPrivateIn );
  1999. }; //*** interface IClusCfgNetworkInfo
  2000. //****************************************************************************
  2001. //++
  2002. //
  2003. // interface IClusCfgClusterInfo
  2004. //
  2005. // Description:
  2006. // This interface contains information about the cluster configuration.
  2007. //
  2008. //--
  2009. //****************************************************************************
  2010. [
  2011. object,
  2012. uuid( 85B4BBC0-DDC4-4ae7-8268-F4850BB2A6EE ),
  2013. async_uuid( 8BDBA247-04F5-4114-837E-B263412A4B64 ),
  2014. pointer_default( unique )
  2015. ]
  2016. interface IClusCfgClusterInfo : IUnknown
  2017. {
  2018. //
  2019. // CommitChanges Mode
  2020. //
  2021. //////////////////////////////////////////////////////////////////////////
  2022. //
  2023. // STDMETHOD
  2024. // SetCommitMode(
  2025. // [ in ] ECommitMode ecmNewModeIn
  2026. // )
  2027. //
  2028. // Description:
  2029. // Sets the CommitChanges processing to be the new mode that
  2030. /// is passed in.
  2031. //
  2032. // Parameter:
  2033. // eccbNewModeIn
  2034. // The new mode to set the CommitChanges processing to.
  2035. //
  2036. // Return Values:
  2037. // S_OK
  2038. // Call succeed.
  2039. //
  2040. // other HRESULT
  2041. // The call failed.
  2042. //
  2043. //////////////////////////////////////////////////////////////////////////
  2044. HRESULT
  2045. SetCommitMode( [ in ] ECommitMode ecmNewModeIn );
  2046. //////////////////////////////////////////////////////////////////////////
  2047. //
  2048. // STDMETHOD
  2049. // GetCommitMode(
  2050. // [ out ] ECommitMode * pecmCurrentModeOut
  2051. // )
  2052. //
  2053. // Description:
  2054. // Call this to determine the operation that will be done when
  2055. // CommitChanges is invoked.
  2056. //
  2057. // Parameter:
  2058. // pecmCurrentModeOut
  2059. // The current mode for CommitChanges processing.
  2060. //
  2061. // Return Values:
  2062. // S_OK
  2063. // Call succeeded.
  2064. //
  2065. // other HRESULT
  2066. // The call failed.
  2067. //
  2068. //////////////////////////////////////////////////////////////////////////
  2069. HRESULT
  2070. GetCommitMode( [ out ] ECommitMode * pecmCurrentModeOut );
  2071. //
  2072. // Cluster Name
  2073. //
  2074. //////////////////////////////////////////////////////////////////////////
  2075. //
  2076. // STDMETHOD
  2077. // GetName(
  2078. // [ out ] BSTR * pbstrNameOut
  2079. // )
  2080. //
  2081. // Description:
  2082. // Retrieves the name of the cluster to be formed or joined.
  2083. //
  2084. // Notes:
  2085. // Name (Fully Qualified Domiain Name) e.g. cluster1.ntdev.microsoft.com
  2086. //
  2087. // In Forming the cluster, this is the resulting cluster name.
  2088. // In Joining the cluster, this is the sponsers cluster name.
  2089. //
  2090. // Parameter:
  2091. // pbstrNameOut
  2092. // Pointer to device name. This should be freed by the caller by calling
  2093. // SysFreeString( ).
  2094. //
  2095. // Return Values:
  2096. // S_OK
  2097. // Success.
  2098. //
  2099. // E_OUTOFMEMORY
  2100. // Out of memory.
  2101. //
  2102. // other HRESULT
  2103. // The call failed.
  2104. //
  2105. //////////////////////////////////////////////////////////////////////////
  2106. HRESULT
  2107. GetName( [ out ] BSTR * pbstrNameOut );
  2108. //////////////////////////////////////////////////////////////////////////
  2109. //
  2110. // STDMETHOD
  2111. // SetName(
  2112. // [ in ] LPCWSTR pcszNameIn
  2113. // )
  2114. //
  2115. // Description:
  2116. // Stores a new name for the cluster to be set when the cluster
  2117. // configuration is commited. If the node is joining, then this will
  2118. /// will be the cluster to be joined.
  2119. //
  2120. // Notes:
  2121. // Name (Fully Qualified Domiain Name) e.g. cluster1.ntdev.microsoft.com
  2122. //
  2123. // In Forming the cluster, this is the resulting cluster name.
  2124. // In Joining the cluster, this is the sponsers cluster name.
  2125. //
  2126. // Parameter:
  2127. // pcszNameIn
  2128. // The name of the user wants to assigned the device.
  2129. //
  2130. // Return Value:
  2131. // S_OK
  2132. // Success.
  2133. //
  2134. // E_OUTOFMEMORY
  2135. // Out of memory.
  2136. //
  2137. // other HRESULT
  2138. // The call failed.
  2139. //
  2140. //////////////////////////////////////////////////////////////////////////
  2141. HRESULT
  2142. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  2143. //
  2144. // Cluster IP Address
  2145. //
  2146. //////////////////////////////////////////////////////////////////////////
  2147. //
  2148. // STDMETHOD
  2149. // GetIPAddress(
  2150. // [ out ] ULONG * pulDottedQuadOut
  2151. // )
  2152. //
  2153. // Description:
  2154. // Retrieves the IP address of the cluster.
  2155. //
  2156. // Parameter:
  2157. // pulDottedQuadOut
  2158. // The IP address of the cluster in dotted quad format.
  2159. //
  2160. // Return Value:
  2161. // S_OK
  2162. // The call succeeded.
  2163. //
  2164. // other HRESULTs
  2165. // The call failed.
  2166. //
  2167. //////////////////////////////////////////////////////////////////////////
  2168. HRESULT
  2169. GetIPAddress( [ out ] ULONG * pulDottedQuadOut );
  2170. //////////////////////////////////////////////////////////////////////////
  2171. //
  2172. // STDMETHOD
  2173. // SetIPAddress(
  2174. // [ in ] ULONG ulDottedQuadIn
  2175. // )
  2176. //
  2177. // Description:
  2178. // Stores the IP address to be used to form the cluster. If joining,
  2179. // this is the IP address of the sponsor.
  2180. //
  2181. // Parameter:
  2182. // ulDottedQuadIn
  2183. // IP address in dotted quad format.
  2184. //
  2185. // Return Value:
  2186. // S_OK
  2187. // The call succeeded.
  2188. //
  2189. // other HRESULT
  2190. // The call failed.
  2191. //
  2192. //////////////////////////////////////////////////////////////////////////
  2193. HRESULT
  2194. SetIPAddress( [ in ] ULONG ulDottedQuadIn );
  2195. //
  2196. // Cluster Subnet Mask
  2197. //
  2198. //////////////////////////////////////////////////////////////////////////
  2199. //
  2200. // STDMETHOD
  2201. // GetSubnetMask(
  2202. // [ out ] ULONG * pulDottedQuadOut
  2203. // )
  2204. //
  2205. // Description:
  2206. // Retrieves the subnet mask to be used for the cluster.
  2207. //
  2208. // Parameter:
  2209. // pulDottedQuadOut
  2210. // Subnet mask of the cluster in dotted quad format.
  2211. //
  2212. // Return Values:
  2213. // S_OK
  2214. // The call succeeded.
  2215. //
  2216. // other HRESULTs
  2217. // The call failed.
  2218. //
  2219. //////////////////////////////////////////////////////////////////////////
  2220. HRESULT
  2221. GetSubnetMask( [ out ] ULONG * pulDottedQuadOut );
  2222. //////////////////////////////////////////////////////////////////////////
  2223. //
  2224. // STDMETHOD
  2225. // SetSubnetMask(
  2226. // [ in ] ULONG ulDottedQuadIn
  2227. // )
  2228. //
  2229. // Description:
  2230. // Stores the subnet mask to be used to form the cluster. If joining,
  2231. // this is the subnet mask of the sponsor.
  2232. //
  2233. // Parameter:
  2234. // ulDottedQuadIn
  2235. // Subnet mask in dotted quad format.
  2236. //
  2237. // Return Values:
  2238. // S_OK
  2239. // The call succeeded.
  2240. //
  2241. // other HRESULTs
  2242. // The call failed.
  2243. //
  2244. //////////////////////////////////////////////////////////////////////////
  2245. HRESULT
  2246. SetSubnetMask( [ in ] ULONG ulDottedQuadIn );
  2247. //////////////////////////////////////////////////////////////////////////
  2248. //
  2249. // STDMETHOD
  2250. // GetNetworkInfo(
  2251. // [ out ] IClusCfgNetworkInfo ** ppiccniOut
  2252. // )
  2253. //
  2254. // Description:
  2255. // Retrieves the network to be used for the cluster IP address
  2256. // and name.
  2257. //
  2258. // Parameter:
  2259. // ppiccniOut
  2260. // Pointer of the network to use for the cluster IP address
  2261. // and name.
  2262. //
  2263. // Return Values:
  2264. // S_OK
  2265. // The call succeeded.
  2266. //
  2267. // other HRESULTs
  2268. // The call failed.
  2269. //
  2270. //////////////////////////////////////////////////////////////////////////
  2271. HRESULT
  2272. GetNetworkInfo( [ out ] IClusCfgNetworkInfo ** ppiccniOut );
  2273. //////////////////////////////////////////////////////////////////////////
  2274. //
  2275. // STDMETHOD
  2276. // SetNetworkInfo(
  2277. // [ in ] IClusCfgNetworkInfo * piccniIn
  2278. // )
  2279. //
  2280. // Description:
  2281. // Stores the network to be used for the cluster IP address and name.
  2282. //
  2283. // Parameter:
  2284. // piccniIn
  2285. // Pointer to the network to use for the cluster IP address
  2286. // and name.
  2287. //
  2288. // Return Values:
  2289. // S_OK
  2290. // The call succeeded.
  2291. //
  2292. // other HRESULTs
  2293. // The call failed.
  2294. //
  2295. //////////////////////////////////////////////////////////////////////////
  2296. HRESULT
  2297. SetNetworkInfo( [ in ] IClusCfgNetworkInfo * piccniIn );
  2298. //
  2299. // Cluster Service Account
  2300. //
  2301. //////////////////////////////////////////////////////////////////////////
  2302. //
  2303. // STDMETHOD
  2304. // GetClusterServiceAccountCredentials(
  2305. // [ out ] IClusCfgCredentials ** ppicccCredentialsOut
  2306. // )
  2307. //
  2308. // Description:
  2309. // Retrieves the cluster service account credentials used by the
  2310. // cluster for authenication. The password is not available from the
  2311. // sponsor node and must be supplied by the user. Once supplied, it can
  2312. // be retrieved by calling this method.
  2313. //
  2314. // Parameters:
  2315. // ppicccCredentialsOut
  2316. // An IClusCfgCredentials * that contains the cluster
  2317. // service account credentials.
  2318. //
  2319. // Return Values:
  2320. // S_OK
  2321. // The called succeeded.
  2322. //
  2323. // E_OUTOFMEMORY
  2324. // Out of memory.
  2325. //
  2326. // other HRESULTs
  2327. // The call failed.
  2328. //
  2329. //////////////////////////////////////////////////////////////////////////
  2330. HRESULT
  2331. GetClusterServiceAccountCredentials(
  2332. [ out ] IClusCfgCredentials ** ppicccCredentialsOut
  2333. );
  2334. //
  2335. // Cluster Binding String
  2336. //
  2337. //////////////////////////////////////////////////////////////////////////
  2338. //
  2339. // STDMETHOD
  2340. // GetBindingString(
  2341. // [ out ] BSTR * pbstrBindingStringOut
  2342. // )
  2343. //
  2344. // Description:
  2345. // Retrieves the binding string (IP address) of the cluster to be
  2346. // formed or joined.
  2347. //
  2348. // Notes:
  2349. //
  2350. // Parameter:
  2351. // pbstrBindingStringOut
  2352. // Pointer to a BSTR. This should be freed by the caller by
  2353. // calling SysFreeString( ).
  2354. //
  2355. // Return Values:
  2356. // S_OK
  2357. // Success.
  2358. //
  2359. // E_OUTOFMEMORY
  2360. // Out of memory.
  2361. //
  2362. // other HRESULT
  2363. // The call failed.
  2364. //
  2365. //////////////////////////////////////////////////////////////////////////
  2366. HRESULT
  2367. GetBindingString( [ out ] BSTR * pbstrBindingStringOut );
  2368. //////////////////////////////////////////////////////////////////////////
  2369. //
  2370. // STDMETHOD
  2371. // SetBindingString(
  2372. // [ in ] LPCWSTR pcszBindingStringIn
  2373. // )
  2374. //
  2375. // Description:
  2376. // Stores the binding string for the cluster.
  2377. //
  2378. // Notes:
  2379. //
  2380. // Parameter:
  2381. // pcszBindingStringIn
  2382. // The binding string to use when connecting to this cluster.
  2383. //
  2384. // Return Value:
  2385. // S_OK
  2386. // Success.
  2387. //
  2388. // E_OUTOFMEMORY
  2389. // Out of memory.
  2390. //
  2391. // other HRESULT
  2392. // The call failed.
  2393. //
  2394. //////////////////////////////////////////////////////////////////////////
  2395. HRESULT
  2396. SetBindingString(
  2397. [ in, pointer_default( unique ) ] LPCWSTR pcszBindingStringIn
  2398. );
  2399. }; //*** interface IClusCfgClusterInfo
  2400. //****************************************************************************
  2401. //++
  2402. //
  2403. // interface IClusCfgInitialize
  2404. //
  2405. // Description:
  2406. // This interface is used to initialize a configuration object.
  2407. //
  2408. //--
  2409. //****************************************************************************
  2410. [
  2411. object,
  2412. uuid( 2A0EB82D-F878-492a-951E-AE000918C4A6 ),
  2413. async_uuid( 2A0EB82E-F878-492a-951E-AE000918C4A6 ),
  2414. pointer_default( unique )
  2415. ]
  2416. interface IClusCfgInitialize : IUnknown
  2417. {
  2418. //////////////////////////////////////////////////////////////////////////
  2419. //
  2420. // STDMETHOD
  2421. // Initialize(
  2422. // [ in ] IUnknown * punkCallbackIn,
  2423. // [ in ] LCID lcidIn
  2424. // )
  2425. //
  2426. // Description:
  2427. // Register callbacks, locale id, etc.
  2428. //
  2429. // Parameters:
  2430. // punkCallbackIn
  2431. // The callback interface.
  2432. //
  2433. // lcidIn
  2434. // The locale ID to be used for strings that are passed.
  2435. //
  2436. // Return Values:
  2437. // S_OK
  2438. // The initialization succeeded.
  2439. //
  2440. // other HRESULTs
  2441. // The call failed.
  2442. //
  2443. //////////////////////////////////////////////////////////////////////////
  2444. HRESULT
  2445. Initialize(
  2446. [ in ] IUnknown * punkCallbackIn,
  2447. [ in ] LCID lcidIn
  2448. );
  2449. }; //*** interface IClusCfgInitialize
  2450. //****************************************************************************
  2451. //++
  2452. //
  2453. // interface IClusCfgCallback
  2454. //
  2455. // Description:
  2456. // This interface is used to callback to the client to indicate
  2457. // status or progess (or both) about a task being completed on the
  2458. // server.
  2459. //
  2460. //--
  2461. //****************************************************************************
  2462. [
  2463. object,
  2464. uuid( 238DCA63-E2EF-4f32-A24D-ACBF975BE842 ),
  2465. async_uuid( EBCE8945-AC69-4b3a-865D-E2D4EB33E41B ),
  2466. pointer_default( unique )
  2467. ]
  2468. interface IClusCfgCallback : IUnknown
  2469. {
  2470. //////////////////////////////////////////////////////////////////////////
  2471. //
  2472. // STDMETHOD
  2473. // SendStatusReport(
  2474. // [ in ] LPCWSTR pcszNodeNameIn,
  2475. // [ in ] CLSID clsidTaskMajorIn
  2476. // [ in ] CLSID clsidTaskMinorIn,
  2477. // [ in ] ULONG ulMinIn,
  2478. // [ in ] ULONG ulMaxIn,
  2479. // [ in ] ULONG ulCurrentIn,
  2480. // [ in ] HRESULT hrStatusIn,
  2481. // [ in ] LPCWSTR pcszDescriptionIn,
  2482. // [ in ] FILETIME * pftTimeIn,
  2483. // [ in ] LPCWSTR pcszReferenceIn
  2484. // )
  2485. //
  2486. // Description:
  2487. // Send a status report back to the user interface/script.
  2488. //
  2489. // Parameters:
  2490. // pcszNodeNameIn
  2491. // The name of the node (server) that sent the report.
  2492. //
  2493. // clsidTaskMajorIn
  2494. // CLSID of the major task item to give status about. For the
  2495. // wizard, this indicates which node in the tree view control
  2496. // to publish this status message under. If clsidTaskMajorIn
  2497. // equals TASKID_Major_Client_Log, TASKID_Major_Server_Log, or
  2498. // TASKID_Major_Client_And_Server_Log, only a log entry will be
  2499. // made.
  2500. //
  2501. // clsidTaskMinorIn
  2502. // CLSID of the minor task to give status about. These should be
  2503. // unique to each sub-task and message.
  2504. //
  2505. // ulMinIn
  2506. // The min value of progress.
  2507. //
  2508. // ulMaxIn
  2509. // The max value of progress.
  2510. //
  2511. // ulCurrentIn
  2512. // The current value of progress.
  2513. //
  2514. // hrStatusIn
  2515. // The current status.
  2516. //
  2517. // pcszDescriptionIn
  2518. // The description of the status. Can be NULL to indicate that nothing
  2519. // needs to be passed.
  2520. //
  2521. // pftTimeIn
  2522. // UTC time of when this event was generated.
  2523. //
  2524. // pcszReference
  2525. // Optional reference data, additional context, URL, etc. that
  2526. // might better help explain the problem is this is an error
  2527. // report.
  2528. //
  2529. // Return Values:
  2530. // S_OK
  2531. // The call succeeded.
  2532. //
  2533. // other HRESULTs
  2534. // The call failed.
  2535. //
  2536. //////////////////////////////////////////////////////////////////////////
  2537. HRESULT
  2538. SendStatusReport(
  2539. [ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn,
  2540. [ in ] CLSID clsidTaskMajorIn,
  2541. [ in ] CLSID clsidTaskMinorIn,
  2542. [ in ] ULONG ulMinIn,
  2543. [ in ] ULONG ulMaxIn,
  2544. [ in ] ULONG ulCurrentIn,
  2545. [ in ] HRESULT hrStatusIn,
  2546. [ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn,
  2547. [ in ] FILETIME * pftTimeIn,
  2548. [ in, pointer_default( unique ) ] LPCWSTR pcszReferenceIn
  2549. );
  2550. }; //*** interface IClusCfgCallback
  2551. //****************************************************************************
  2552. //++
  2553. //
  2554. // interface IClusCfgCredentials
  2555. //
  2556. // Description:
  2557. // The IClusCfgCredentials interface provides the functions
  2558. // for getting and setting user credentials.
  2559. //
  2560. //--
  2561. //****************************************************************************
  2562. [
  2563. object,
  2564. uuid( 54AA9406-A409-4b49-B314-5F0A0CE4C88E ),
  2565. async_uuid( 54AA9406-A409-4b49-B314-5F0A0CE4C88F ),
  2566. pointer_default( unique )
  2567. ]
  2568. interface IClusCfgCredentials : IUnknown
  2569. {
  2570. //////////////////////////////////////////////////////////////////////////
  2571. //
  2572. // STDMETHOD
  2573. // SetCredentials(
  2574. // [ in ] LPCWSTR pcszUserIn,
  2575. // [ in ] LPCWSTR pcszDomainIn,
  2576. // [ in ] LPCWSTR pcszPasswordIn
  2577. // )
  2578. //
  2579. // Description:
  2580. // Set the credentials.
  2581. //
  2582. // Parameters:
  2583. // pcszUserIn
  2584. // The user name.
  2585. //
  2586. // pcszDomainIn
  2587. // The domain name.
  2588. //
  2589. // pcszPasswordIn
  2590. // The user's password.
  2591. //
  2592. // Return Values:
  2593. // S_OK
  2594. // The call succeeded.
  2595. //
  2596. // other HRESULTs
  2597. // The call failed.
  2598. //
  2599. //////////////////////////////////////////////////////////////////////////
  2600. HRESULT
  2601. SetCredentials(
  2602. [ in, pointer_default( unique ) ] LPCWSTR pcszUserIn
  2603. , [ in, pointer_default( unique ) ] LPCWSTR pcszDomainIn
  2604. , [ in, pointer_default( unique ) ] LPCWSTR pcszPasswordIn
  2605. );
  2606. //////////////////////////////////////////////////////////////////////////
  2607. //
  2608. // STDMETHOD
  2609. // GetCredentials(
  2610. // [ out ] BSTR * pbstrUserOut,
  2611. // [ out ] BTSR * pbstrDomainOut,
  2612. // [ out ] BTSR * pbstrPasswordOut
  2613. // )
  2614. //
  2615. // Description:
  2616. // Get the credentials.
  2617. //
  2618. // Parameters:
  2619. // pbstrUserOut
  2620. // Catches the user name.
  2621. //
  2622. // pbstrDomainOut
  2623. // Catches the domain name.
  2624. //
  2625. // pbstrPasswordOut
  2626. // Catches the user's password.
  2627. //
  2628. // Return Values:
  2629. // S_OK
  2630. // The call succeeded.
  2631. //
  2632. // other HRESULTs
  2633. // The call failed.
  2634. //
  2635. //////////////////////////////////////////////////////////////////////////
  2636. HRESULT
  2637. GetCredentials(
  2638. [ out ] BSTR * pbstrUserOut
  2639. , [ out ] BSTR * pbstrDomainOut
  2640. , [ out ] BSTR * pbstrPasswordOut
  2641. );
  2642. }; //*** interface IClusCfgCredentials
  2643. //****************************************************************************
  2644. //++
  2645. //
  2646. // interface IClusCfgCapabilities
  2647. //
  2648. // Description:
  2649. // The IClusCfgCapabilities interface provides the functions
  2650. // for determining the capabilities of a node.
  2651. //
  2652. //--
  2653. //****************************************************************************
  2654. [
  2655. object,
  2656. uuid( D94AB253-36C7-41c1-B52E-26B451975C8D ),
  2657. pointer_default( unique )
  2658. ]
  2659. interface IClusCfgCapabilities : IUnknown
  2660. {
  2661. //////////////////////////////////////////////////////////////////////////
  2662. //
  2663. // STDMETHOD
  2664. // CanNodeBeClustered( void )
  2665. //
  2666. // Description:
  2667. // Determines if a node can be clustered.
  2668. //
  2669. // Parameters:
  2670. // None.
  2671. //
  2672. // Return Values:
  2673. // S_OK
  2674. // The call succeeded. The node can be clustered.
  2675. //
  2676. // S_FALSE
  2677. // The call succeeded. The node can not be clustered.
  2678. //
  2679. // E_NOTIMPL
  2680. // The call failed. This is treated as a "don't care."
  2681. //
  2682. // other HRESULTs
  2683. // The call failed.
  2684. //
  2685. //////////////////////////////////////////////////////////////////////////
  2686. HRESULT
  2687. CanNodeBeClustered( void );
  2688. }; //*** interface IClusCfgCapabilities
  2689. //****************************************************************************
  2690. //++
  2691. //
  2692. // interface IClusCfgManagedResourceCfg
  2693. //
  2694. // Description:
  2695. // TODO: gpease 06-JUN-2000
  2696. // Write a description.
  2697. //
  2698. //--
  2699. //****************************************************************************
  2700. [
  2701. object,
  2702. uuid( 60300A0F-77E1-440c-BD94-6BFB0DBFDB3A ),
  2703. local,
  2704. pointer_default( unique )
  2705. ]
  2706. interface IClusCfgManagedResourceCfg : IUnknown
  2707. {
  2708. //////////////////////////////////////////////////////////////////////////
  2709. //
  2710. // STDMETHOD
  2711. // IClusCfgManagedResourceCfg::PreCreate(
  2712. // IUnknown * punkServicesIn
  2713. // )
  2714. //
  2715. // Description:
  2716. // This method is called by the post configuration manager to
  2717. // determine the requirements of the resource. Querying the
  2718. // punkServicesIn allows the managed resource to use services
  2719. // provided by the manager.
  2720. //
  2721. // Arguments:
  2722. // punkServicesIn
  2723. // The resource should QI this interface for services provided
  2724. // by the post configuration manager and to set its dependencies.
  2725. //
  2726. // Return Values:
  2727. // S_OK
  2728. // Success.
  2729. //
  2730. // other HRESULTs.
  2731. // The call failed.
  2732. //
  2733. //////////////////////////////////////////////////////////////////////////
  2734. HRESULT
  2735. PreCreate( [ in ] IUnknown * punkServicesIn );
  2736. //////////////////////////////////////////////////////////////////////////
  2737. //
  2738. // STDMETHOD
  2739. // IClusCfgManagedResourceCfg::Create(
  2740. // IUnknown * punkServicesIn
  2741. // )
  2742. //
  2743. // Description:
  2744. // This method is called by the post configuration manager to
  2745. // have the resource create an instance of itself. Querying the
  2746. // punkServicesIn allows the managed resource to use services
  2747. // provided by the manager.
  2748. //
  2749. // Arguments:
  2750. // punkServicesIn
  2751. // The resource should QI this interface for services provided
  2752. // by the post configuration manager and to create itself.
  2753. //
  2754. // Return Values:
  2755. // S_OK
  2756. // Success.
  2757. //
  2758. // other HRESULTs.
  2759. // The call failed.
  2760. //
  2761. //////////////////////////////////////////////////////////////////////////
  2762. HRESULT
  2763. Create( [ in ] IUnknown * punkServicesIn );
  2764. //////////////////////////////////////////////////////////////////////////
  2765. //
  2766. // STDMETHOD
  2767. // IClusCfgManagedResourceCfg::PostCreate(
  2768. // IUnknown * punkServicesIn
  2769. // )
  2770. //
  2771. // Description:
  2772. // This method is called by the post configuration manager to allow
  2773. // resources to perform any post-creation configuration that may be
  2774. // needed. At this point the cluster is fully configured. Querying
  2775. // the punkServicesIn allows the managed resource to use services
  2776. // provided by the manager.
  2777. //
  2778. // Arguments:
  2779. // punkServicesIn
  2780. // The resource should QI this interface for services provided
  2781. // by the post configuration manager.
  2782. //
  2783. // Return Values:
  2784. // S_OK
  2785. // Success.
  2786. //
  2787. // other HRESULTs.
  2788. // The call failed.
  2789. //
  2790. //////////////////////////////////////////////////////////////////////////
  2791. HRESULT
  2792. PostCreate( [ in ] IUnknown * punkServicesIn );
  2793. //////////////////////////////////////////////////////////////////////////
  2794. //
  2795. // STDMETHOD
  2796. // IClusCfgManagedResourceCfg::Evict(
  2797. // IUnknown * punkServicesIn
  2798. // )
  2799. //
  2800. // Description:
  2801. // This method is called by the post configuration manager to alert
  2802. // the resource that this node was evicted from the cluster. The
  2803. // resource should do whatever cleanup it needs to do revert to a
  2804. // non-clustered state. Querying the punkServicesIn allows the
  2805. // managed resource to uses services provided by the post
  2806. // configuration manager.
  2807. //
  2808. // Arguments:
  2809. // punkServicesIn
  2810. // The resource should QI this interface for services provided
  2811. // by the post configuration manager.
  2812. //
  2813. // Return Values:
  2814. // S_OK
  2815. // Success.
  2816. //
  2817. // other HRESULTs.
  2818. // The call failed. Errors are ignored and do not prevent a node
  2819. // from being evicted.
  2820. //
  2821. //////////////////////////////////////////////////////////////////////////
  2822. HRESULT
  2823. Evict( [ in ] IUnknown * punkServicesIn );
  2824. }; //*** interface IClusCfgManagedResourceCfg
  2825. //****************************************************************************
  2826. //++
  2827. //
  2828. // interface IClusCfgResourcePreCreate
  2829. //
  2830. // Description:
  2831. // TODO: gpease 06-JUN-2000
  2832. // Write a description.
  2833. //
  2834. //--
  2835. //****************************************************************************
  2836. [
  2837. object,
  2838. uuid( 4240F6A1-9D49-427e-8F3D-09384E1F59E4 ),
  2839. local,
  2840. pointer_default( unique )
  2841. ]
  2842. interface IClusCfgResourcePreCreate : IUnknown
  2843. {
  2844. typedef
  2845. [
  2846. uuid( 1DAF9692-6662-43b1-AD45-D50F7849B0CD ),
  2847. helpstring("Resource dependency flags")
  2848. ]
  2849. enum EDependencyFlags {
  2850. [helpstring("Unknown access")] dfUNKNOWN = 0,
  2851. [helpstring("Shared access resource")] dfSHARED = 1,
  2852. [helpstring("Exclusive access resource")] dfEXCLUSIVE = 2,
  2853. } EDependencyFlags;
  2854. //////////////////////////////////////////////////////////////////////////
  2855. //
  2856. // STDMETHOD
  2857. // IClusCfgResourcePreCreate::SetDependency(
  2858. // LPCLSID pclsidDepResTypeIn,
  2859. // EDependencyFlags dflagIn
  2860. // )
  2861. //
  2862. // Description:
  2863. // Informs the post configuration manager that a resource has a
  2864. // dependency on another type of resource and if the resource needs
  2865. // the resource for shared access or exclusive access.
  2866. //
  2867. // Arguments:
  2868. // pclsidDepResTypeIn
  2869. // The CLSID of the type of resource that a resource is
  2870. // requesting a dependency on. These are documented in the SDK
  2871. // or by the 3rd party resource.
  2872. //
  2873. // dfIn
  2874. // Flags to modify the dependency relationship. The following
  2875. // are defined flags:
  2876. //
  2877. // dfSHARED - the dependent resource can be shared.
  2878. // dfEXCLUSIVE - the dependent resource can not be shared.
  2879. //
  2880. // Return Value:
  2881. // S_OK
  2882. // Success.
  2883. //
  2884. // other HRESULTs.
  2885. // The call failed.
  2886. //
  2887. //////////////////////////////////////////////////////////////////////////
  2888. HRESULT
  2889. SetDependency(
  2890. [ in ] LPCLSID pclsidDepResTypeIn
  2891. , [ in ] DWORD dfIn
  2892. );
  2893. //////////////////////////////////////////////////////////////////////////
  2894. //
  2895. // STDMETHOD
  2896. // IClusCfgResourcePreCreate::GetType(
  2897. // CLSID * pclsidIn
  2898. // )
  2899. //
  2900. // Description:
  2901. // A managed resource MUST call this to indicate its resource type.
  2902. // Failure to call this during PreCreate will result in your
  2903. // resource not being created.
  2904. //
  2905. // Arguments:
  2906. // pclsidIn
  2907. // Pointer to the GUID of the resource type.
  2908. //
  2909. // Return Values:
  2910. // S_OK
  2911. // Success.
  2912. //
  2913. // other HRESULTs.
  2914. // The call failed.
  2915. //
  2916. //////////////////////////////////////////////////////////////////////////
  2917. HRESULT
  2918. SetType( [ in ] CLSID * pclsidIn );
  2919. //////////////////////////////////////////////////////////////////////////
  2920. //
  2921. // STDMETHOD
  2922. // IClusCfgResourcePreCreate::SetClassType(
  2923. // CLSID * pclsidIn
  2924. // )
  2925. //
  2926. // Description:
  2927. // A managed resource sets this to indicate that its resource type
  2928. // can be considered to be of a class of resource. You may call this
  2929. // multiple times to indicate all the classes you belong to.
  2930. //
  2931. // Arguments:
  2932. // pclsidIn
  2933. // Pointer to the GUID of the resource class type.
  2934. //
  2935. // Return Values:
  2936. // S_OK
  2937. // Success.
  2938. //
  2939. // other HRESULTs.
  2940. // The call failed.
  2941. //
  2942. //////////////////////////////////////////////////////////////////////////
  2943. HRESULT
  2944. SetClassType( [ in ] CLSID * pclsidIn );
  2945. }; //*** interface IClusCfgResourcePreCreate
  2946. //****************************************************************************
  2947. //++
  2948. //
  2949. // interface IClusCfgResourceCreate
  2950. //
  2951. // Description:
  2952. // TODO: gpease 06-JUN-2000
  2953. // Write a description.
  2954. //
  2955. //--
  2956. //****************************************************************************
  2957. [
  2958. object,
  2959. uuid( 0647B41A-C777-443c-9432-02CCCF4FF443 ),
  2960. local,
  2961. pointer_default( unique )
  2962. ]
  2963. interface IClusCfgResourceCreate : IUnknown
  2964. {
  2965. //////////////////////////////////////////////////////////////////////////
  2966. //
  2967. // STDMETHOD
  2968. // IClusCfgResourceCreate::SetPropertyBinary(
  2969. // [ in ] LPCWSTR pcszNameIn
  2970. // , [ in ] const DWORD cbSizeIn
  2971. // , [ in ] const BYTE * pbyteIn
  2972. // )
  2973. //
  2974. // Description:
  2975. //
  2976. // Arguments:
  2977. //
  2978. // Return Value:
  2979. // S_OK
  2980. // Success.
  2981. //
  2982. // other HRESULTs.
  2983. // The call failed.
  2984. //
  2985. //////////////////////////////////////////////////////////////////////////
  2986. HRESULT
  2987. SetPropertyBinary(
  2988. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  2989. , [ in ] const DWORD cbSizeIn
  2990. , [ in ] const BYTE * pbyteIn
  2991. );
  2992. //////////////////////////////////////////////////////////////////////////
  2993. //
  2994. // STDMETHOD
  2995. // IClusCfgResourceCreate::SetPropertyDWORD(
  2996. // [ in ] LPCWSTR pcszNameIn
  2997. // , [ in ] const DWORD dwDWORDIn
  2998. // )
  2999. //
  3000. // Description:
  3001. //
  3002. // Arguments:
  3003. //
  3004. // Return Value:
  3005. // S_OK
  3006. // Success.
  3007. //
  3008. // other HRESULTs.
  3009. // The call failed.
  3010. //
  3011. //////////////////////////////////////////////////////////////////////////
  3012. HRESULT
  3013. SetPropertyDWORD(
  3014. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3015. , [ in ] const DWORD dwDWORDIn
  3016. );
  3017. //////////////////////////////////////////////////////////////////////////
  3018. //
  3019. // STDMETHOD
  3020. // IClusCfgResourceCreate::SetPropertyString(
  3021. // [ in ] LPCWSTR pcszNameIn
  3022. // , [ in ] LPCWSTR pcszStringIn
  3023. // )
  3024. //
  3025. // Description:
  3026. //
  3027. // Arguments:
  3028. //
  3029. // Return Value:
  3030. // S_OK
  3031. // Success.
  3032. //
  3033. // other HRESULTs.
  3034. // The call failed.
  3035. //
  3036. //////////////////////////////////////////////////////////////////////////
  3037. HRESULT
  3038. SetPropertyString(
  3039. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3040. , [ in, pointer_default( unique ) ] LPCWSTR pcszStringIn
  3041. );
  3042. //////////////////////////////////////////////////////////////////////////
  3043. //
  3044. // STDMETHOD
  3045. // IClusCfgResourceCreate::SetPropertyExpandString(
  3046. // [ in ] LPCWSTR pcszNameIn
  3047. // , [ in ] LPCWSTR pcszStringIn
  3048. // )
  3049. //
  3050. // Description:
  3051. //
  3052. // Arguments:
  3053. //
  3054. // Return Value:
  3055. // S_OK
  3056. // Success.
  3057. //
  3058. // other HRESULTs.
  3059. // The call failed.
  3060. //
  3061. //////////////////////////////////////////////////////////////////////////
  3062. HRESULT
  3063. SetPropertyExpandString(
  3064. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3065. , [ in, pointer_default( unique ) ] LPCWSTR pcszStringIn
  3066. );
  3067. //////////////////////////////////////////////////////////////////////////
  3068. //
  3069. // STDMETHOD
  3070. // IClusCfgResourceCreate::SetPropertyMultiString(
  3071. // [ in ] LPCWSTR pcszNameIn
  3072. // , [ in ] const DWORD cbMultiStringIn
  3073. // , [ in ] LPCWSTR pcszMultiStringIn
  3074. // )
  3075. //
  3076. // Description:
  3077. //
  3078. // Arguments:
  3079. //
  3080. // Return Value:
  3081. // S_OK
  3082. // Success.
  3083. //
  3084. // other HRESULTs.
  3085. // The call failed.
  3086. //
  3087. //////////////////////////////////////////////////////////////////////////
  3088. HRESULT
  3089. SetPropertyMultiString(
  3090. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3091. , [ in ] const DWORD cbMultiStringIn
  3092. , [ in, pointer_default( unique ) ] LPCWSTR pcszMultiStringIn
  3093. );
  3094. //////////////////////////////////////////////////////////////////////////
  3095. //
  3096. // STDMETHOD
  3097. // IClusCfgResourceCreate::SetPropertyUnsignedLargeInt(
  3098. // [ in ] LPCWSTR pcszNameIn
  3099. // , [ in ] const ULARGE_INTEGER ulIntIn
  3100. // )
  3101. //
  3102. // Description:
  3103. //
  3104. // Arguments:
  3105. //
  3106. // Return Value:
  3107. // S_OK
  3108. // Success.
  3109. //
  3110. // other HRESULTs.
  3111. // The call failed.
  3112. //
  3113. //////////////////////////////////////////////////////////////////////////
  3114. HRESULT
  3115. SetPropertyUnsignedLargeInt(
  3116. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3117. , [ in ] const ULARGE_INTEGER ulIntIn
  3118. );
  3119. //////////////////////////////////////////////////////////////////////////
  3120. //
  3121. // STDMETHOD
  3122. // IClusCfgResourceCreate::SetPropertyLong(
  3123. // [ in ] LPCWSTR pcszNameIn
  3124. // , [ in ] const LONG lLongIn
  3125. // )
  3126. //
  3127. // Description:
  3128. //
  3129. // Arguments:
  3130. //
  3131. // Return Value:
  3132. // S_OK
  3133. // Success.
  3134. //
  3135. // other HRESULTs.
  3136. // The call failed.
  3137. //
  3138. //////////////////////////////////////////////////////////////////////////
  3139. HRESULT
  3140. SetPropertyLong(
  3141. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3142. , [ in ] const LONG lLongIn
  3143. );
  3144. //////////////////////////////////////////////////////////////////////////
  3145. //
  3146. // STDMETHOD
  3147. // IClusCfgResourceCreate::SetPropertySecurityDescriptor(
  3148. // [ in ] LPCWSTR pcszNameIn
  3149. // , [ in ] const SECURITY_DESCRIPTOR * pcsdIn
  3150. // )
  3151. //
  3152. // Description:
  3153. //
  3154. // Arguments:
  3155. //
  3156. // Return Value:
  3157. // S_OK
  3158. // Success.
  3159. //
  3160. // other HRESULTs.
  3161. // The call failed.
  3162. //
  3163. //////////////////////////////////////////////////////////////////////////
  3164. HRESULT
  3165. SetPropertySecurityDescriptor(
  3166. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3167. , [ in ] const SECURITY_DESCRIPTOR * pcsdIn );
  3168. //////////////////////////////////////////////////////////////////////////
  3169. //
  3170. // STDMETHOD
  3171. // IClusCfgResourceCreate::SetPropertyLargeInt(
  3172. // [ in ] LPCWSTR pcszNameIn
  3173. // , [ in ] const LARGE_INTEGER lIntIn
  3174. // )
  3175. //
  3176. // Description:
  3177. //
  3178. // Arguments:
  3179. //
  3180. // Return Value:
  3181. // S_OK
  3182. // Success.
  3183. //
  3184. // other HRESULTs.
  3185. // The call failed.
  3186. //
  3187. //////////////////////////////////////////////////////////////////////////
  3188. HRESULT
  3189. SetPropertyLargeInt(
  3190. [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
  3191. , [ in ] const LARGE_INTEGER lIntIn
  3192. );
  3193. //////////////////////////////////////////////////////////////////////////
  3194. //
  3195. // STDMETHOD
  3196. // IClusCfgResourceCreate::SendResourceControl(
  3197. // [ in ] DWORD dwControlCode
  3198. // , [ in ] LPVOID lpInBuffer
  3199. // , [ in ] DWORD cbInBufferSize
  3200. // )
  3201. //
  3202. // Description:
  3203. //
  3204. // Arguments:
  3205. //
  3206. // Return Value:
  3207. // S_OK
  3208. // Success.
  3209. //
  3210. // other HRESULTs.
  3211. // The call failed.
  3212. //
  3213. //////////////////////////////////////////////////////////////////////////
  3214. HRESULT
  3215. SendResourceControl(
  3216. [ in ] DWORD dwControlCodeIn
  3217. , [ in ] LPVOID lpBufferIn
  3218. , [ in ] DWORD cbBufferSizeIn
  3219. );
  3220. }; //*** interface IClusCfgResourceCreate
  3221. //****************************************************************************
  3222. //++
  3223. //
  3224. // interface IClusCfgResourcePostCreate
  3225. //
  3226. // Description:
  3227. // TODO: gpease 06-JUN-2000
  3228. // Write a description.
  3229. //
  3230. //--
  3231. //****************************************************************************
  3232. [
  3233. object,
  3234. uuid( 72A9BF54-13B6-451f-910D-6913EBF025AB ),
  3235. local,
  3236. pointer_default( unique )
  3237. ]
  3238. interface IClusCfgResourcePostCreate : IUnknown
  3239. {
  3240. //////////////////////////////////////////////////////////////////////////
  3241. //
  3242. // STDMETHOD
  3243. // IClusCfgResourcePostCreate::ChangeName(
  3244. // [ in ] LPCWSTR pcszNameIn
  3245. // )
  3246. //
  3247. // Description:
  3248. // Changes the name of the resource.
  3249. //
  3250. // Arguments:
  3251. // pcszNameIn
  3252. // The name to assign the group.
  3253. //
  3254. // Return Value:
  3255. // S_OK
  3256. // Success.
  3257. //
  3258. // other HRESULTs.
  3259. // The call failed.
  3260. //
  3261. //////////////////////////////////////////////////////////////////////////
  3262. HRESULT
  3263. ChangeName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  3264. //////////////////////////////////////////////////////////////////////////
  3265. //
  3266. // STDMETHOD
  3267. // IClusCfgResourceCreate::SendResourceControl(
  3268. // [ in ] DWORD dwControlCode
  3269. // , [ in ] LPVOID lpInBuffer
  3270. // , [ in ] DWORD cbInBufferSize
  3271. // , [ in ] LPVOID lpOutBuffer
  3272. // , [ in ] DWORD cbOutBufferSize
  3273. // , [ out ] LPDWORD lpcbBytesReturned
  3274. // )
  3275. //
  3276. // Description:
  3277. //
  3278. // Arguments:
  3279. //
  3280. // Return Value:
  3281. // S_OK
  3282. // Success.
  3283. //
  3284. // other HRESULTs.
  3285. // The call failed.
  3286. //
  3287. //////////////////////////////////////////////////////////////////////////
  3288. HRESULT
  3289. SendResourceControl(
  3290. [ in ] DWORD dwControlCodeIn
  3291. , [ in ] LPVOID lpBufferIn
  3292. , [ in ] DWORD cbBufferSizeIn
  3293. , [ in ] LPVOID lBufferInout
  3294. , [ in ] DWORD cbOutBufferSizeIn
  3295. , [ out ] LPDWORD lpcbBytesReturnedOut
  3296. );
  3297. }; //*** interface IClusCfgResourcePostCreate
  3298. //****************************************************************************
  3299. //++
  3300. //
  3301. // interface IClusCfgGroupCfg
  3302. //
  3303. // Description:
  3304. // TODO: gpease 06-JUN-2000
  3305. // Write a description.
  3306. //
  3307. //--
  3308. //****************************************************************************
  3309. [
  3310. object,
  3311. uuid( DCB6D3D2-A55F-49e5-A64A-0CCFEB01ED3A ),
  3312. local,
  3313. pointer_default( unique )
  3314. ]
  3315. interface IClusCfgGroupCfg : IUnknown
  3316. {
  3317. //////////////////////////////////////////////////////////////////////////
  3318. //
  3319. // STDMETHOD
  3320. // IClusCfgGroupCfg::SetName(
  3321. // [ in ] LPCWSTR pcszNameIn
  3322. // )
  3323. //
  3324. // Description:
  3325. // Changes the name of the group in which the resource was created.
  3326. // Note that the last resource to set the name wins. The ordering
  3327. // of the last resource is the resource that doesn't have anything
  3328. // depending on it.
  3329. //
  3330. // Arguments:
  3331. // pcszNameIn
  3332. // The name to assign the group.
  3333. //
  3334. // Return Value:
  3335. // S_OK
  3336. // Success.
  3337. //
  3338. // other HRESULTs.
  3339. // The call failed.
  3340. //
  3341. //////////////////////////////////////////////////////////////////////////
  3342. HRESULT
  3343. SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
  3344. //////////////////////////////////////////////////////////////////////////
  3345. //
  3346. // STDMETHOD
  3347. // IClusCfgGroupCfg::GetName(
  3348. // BSTR * pbstrNameOut
  3349. // )
  3350. //
  3351. // Description:
  3352. // Retrieves the name of the group in which the resource was created.
  3353. // Note that the last resource to set the name wins. The ordering
  3354. // of the last resource is the resource that doesn't have anything
  3355. // depending on it. Do not cache this value as the name may change
  3356. // after control has been returned to the manager.
  3357. //
  3358. // Arguments:
  3359. // pbstrNameOut
  3360. // The name to assign the group.
  3361. //
  3362. // Return Value:
  3363. // S_OK
  3364. // Success.
  3365. //
  3366. // HRESULT_FROM_WIN32( ERROR_MORE_DATA )
  3367. // The buffer size specified is too small.
  3368. //
  3369. // other HRESULTs.
  3370. // The call failed.
  3371. //
  3372. //////////////////////////////////////////////////////////////////////////
  3373. HRESULT
  3374. GetName( [ out ] BSTR * pbstrNameOut );
  3375. }; //*** interface IClusCfgGroupCfg
  3376. //****************************************************************************
  3377. //++
  3378. //
  3379. // interface IClusCfgMemberSetChangeListener
  3380. //
  3381. // Description:
  3382. // This interface is implemented by an component that wishes to be notified
  3383. // of when the local computer becomes part of a cluster or when it leaves
  3384. // a cluster - in other words, when the member set of a cluster changes
  3385. // as a result of a cluster configuration operation on the local computer.
  3386. //
  3387. //--
  3388. //****************************************************************************
  3389. [
  3390. object,
  3391. uuid( 2B64534F-2643-4ABC-A4E5-824D881B7582 ),
  3392. async_uuid( 2B645350-2643-4ABC-A4E5-824D881B7582 ),
  3393. pointer_default( unique )
  3394. ]
  3395. interface IClusCfgMemberSetChangeListener : IUnknown
  3396. {
  3397. //////////////////////////////////////////////////////////////////////////
  3398. //
  3399. // STDMETHOD
  3400. // IClusCfgMemberSetChangeListener::Notify(
  3401. // [ in ] IUnknown * punkClusterInfoIn
  3402. // )
  3403. //
  3404. // Description:
  3405. // This method is called to notify a component that this computer has
  3406. // either joined or left a cluster. During this call, a component typically
  3407. // performs operations that are required to switch it from the "clustered"
  3408. // to "non-clustered" mode or vice versa. For example, an application
  3409. // that implements this interface could use this function to create
  3410. // its resource type when the local computer joins a cluster.
  3411. //
  3412. // If the node has just become part of a cluster, the cluster
  3413. // service is guaranteed to be running when this method is called.
  3414. // Querying the punkClusterInfoIn allows the listener to get more
  3415. // information about the event that caused the listener to be notified.
  3416. //
  3417. // Arguments:
  3418. // punkClusterInfoIn
  3419. // The resource should QI this interface for services provided
  3420. // by the caller of this function. Typically, the component that
  3421. // this punk refers to also implements the IClusCfgClusterInfo
  3422. // interface.
  3423. //
  3424. // Return Values:
  3425. // S_OK
  3426. // Success.
  3427. //
  3428. // other HRESULTs.
  3429. // The call failed.
  3430. //
  3431. //////////////////////////////////////////////////////////////////////////
  3432. HRESULT
  3433. Notify( [ in ] IUnknown * punkClusterInfoIn );
  3434. }; //*** interface IClusCfgMemberSetChangeListener
  3435. //****************************************************************************
  3436. //++
  3437. //
  3438. // interface IClusCfgResourceTypeInfo
  3439. //
  3440. // Description:
  3441. // This interface is implemented by components that wish to configure
  3442. // ( create, delete, etc. ) resource types during cluster configuration
  3443. // ( cluster formation, node addition, node eviction, etc. ).
  3444. //
  3445. //--
  3446. //****************************************************************************
  3447. [
  3448. object,
  3449. uuid( C649A281-C847-4F5C-9841-D2F73B5AA71D ),
  3450. async_uuid( C649A282-C847-4F5C-9841-D2F73B5AA71D ),
  3451. pointer_default( unique )
  3452. ]
  3453. interface IClusCfgResourceTypeInfo : IUnknown
  3454. {
  3455. //////////////////////////////////////////////////////////////////////////
  3456. //
  3457. // STDMETHOD
  3458. // IClusCfgResourceTypeInfo::CommitChanges(
  3459. // [ in ] IUnknown * punkClusterInfoIn
  3460. // )
  3461. //
  3462. // Description:
  3463. // A component that wishes to participate in the configuration of
  3464. // cluster resource types should perform the configuration steps
  3465. // necessary for its resource type in this method.
  3466. //
  3467. // This method is called by the cluster configuration server when
  3468. // the local computer becomes part of a cluster. The cluster service
  3469. // is guaranteed to be running at this stage. This method is also
  3470. // called when the local computer is evicted from a cluster - the
  3471. // cluster service will not be running if this is the case.
  3472. //
  3473. // Typically, a component will create a resource type in this method
  3474. // during cluster formation and join and will perform any cleanup
  3475. // required during node evict.
  3476. //
  3477. // Arguments:
  3478. // punkClusterInfoIn
  3479. // The resource type should QI this interface for services provided
  3480. // by the caller of this function. Typically, the component that
  3481. // this punk refers to also implements the IClusCfgClusterInfo
  3482. // interface.
  3483. //
  3484. // punkResTypeServicesIn
  3485. // Pointer to the IUnknown interface of a component that provides
  3486. // methods that help configuring a resource type. For example,
  3487. // during a join or a form, this punk can be queried for the
  3488. // IClusCfgResourceTypeCreate interface, which provides methods
  3489. // for resource type creation.
  3490. //
  3491. // Return Values:
  3492. // S_OK
  3493. // Success.
  3494. //
  3495. // other HRESULTs.
  3496. // The call failed.
  3497. //
  3498. //////////////////////////////////////////////////////////////////////////
  3499. HRESULT
  3500. CommitChanges(
  3501. [ in ] IUnknown * punkClusterInfoIn,
  3502. [ in ] IUnknown * punkResTypeServicesIn
  3503. );
  3504. //////////////////////////////////////////////////////////////////////////
  3505. //
  3506. // STDMETHOD
  3507. // IClusCfgResourceTypeInfo::GetTypeName(
  3508. // [ out ] BSTR * pbstrTypeNameOut
  3509. // )
  3510. //
  3511. // Description:
  3512. // Get the resource type name of this resource type.
  3513. //
  3514. // Arguments:
  3515. // pbstrTypeNameOut
  3516. // Pointer to the BSTR that holds the name of the resource type.
  3517. // This BSTR has to be freed by the caller using the function
  3518. // SysFreeString().
  3519. //
  3520. // Return Values:
  3521. // S_OK
  3522. // The call succeeded.
  3523. //
  3524. // E_OUTOFMEMORY
  3525. // Out of memory.
  3526. //
  3527. // other HRESULTs
  3528. // The call failed.
  3529. //
  3530. //////////////////////////////////////////////////////////////////////////
  3531. HRESULT
  3532. GetTypeName( [ out ] BSTR * pbstrTypeNameOut );
  3533. //////////////////////////////////////////////////////////////////////////
  3534. //
  3535. // STDMETHOD
  3536. // IClusCfgResourceTypeInfo::GetTypeGUID(
  3537. // [ out ] GUID * pguidGUIDOut
  3538. // )
  3539. //
  3540. // Description:
  3541. // Get the globally unique identifier of this resource type.
  3542. //
  3543. // Arguments:
  3544. // pguidGUIDOut
  3545. // Pointer to the GUID object which will receive the GUID of this
  3546. // resource type.
  3547. //
  3548. // Return Values:
  3549. // S_OK
  3550. // The call succeeded and the *pguidGUIDOut contains the type GUID.
  3551. //
  3552. // S_FALSE
  3553. // The call succeeded but this resource type does not have a GUID.
  3554. // The value of *pguidGUIDOut is undefined after this call.
  3555. //
  3556. // other HRESULTs
  3557. // The call failed.
  3558. //
  3559. //////////////////////////////////////////////////////////////////////////
  3560. HRESULT
  3561. GetTypeGUID( [ out ] GUID * pguidGUIDOut );
  3562. }; //*** interface IClusCfgResourceTypeInfo
  3563. //****************************************************************************
  3564. //++
  3565. //
  3566. // interface IClusCfgResourceTypeCreate
  3567. //
  3568. // Description:
  3569. // This interface provides functions that help create a resource type
  3570. // during cluster configuration. A pointer to this interface is provided
  3571. // to components that participate in resource type configuration during
  3572. // cluster configuration.
  3573. //
  3574. //--
  3575. //****************************************************************************
  3576. [
  3577. object,
  3578. uuid( 3AFCE3B8-5F3E-4DDF-A8F4-4B4FCBF28F8F ),
  3579. async_uuid( 3AFCE3B9-5F3E-4DDF-A8F4-4B4FCBF28F8F ),
  3580. pointer_default( unique )
  3581. ]
  3582. interface IClusCfgResourceTypeCreate : IUnknown
  3583. {
  3584. //////////////////////////////////////////////////////////////////////////
  3585. //
  3586. // STDMETHOD
  3587. // IClusCfgResourceTypeCreate::Create(
  3588. // [in, string ] const WCHAR * pcszResTypeNameIn,
  3589. // [in, string ] const WCHAR * pcszResTypeDisplayNameIn,
  3590. // [in, string ] const WCHAR * pcszResDllNameIn,
  3591. // [in] DWORD dwLooksAliveIntervalIn,
  3592. // [in] DWORD dwIsAliveIntervalIn
  3593. // )
  3594. //
  3595. // Description:
  3596. // This method creates a cluster resource type.
  3597. //
  3598. // Arguments:
  3599. // pcszResTypeNameIn
  3600. // Name of the resource type
  3601. //
  3602. // pcszResTypeDisplayNameIn
  3603. // Display name of the resource type
  3604. //
  3605. // pcszResDllNameIn
  3606. // Name (with or without path information) of DLL of the resource type.
  3607. //
  3608. // dwLooksAliveIntervalIn
  3609. // Looks-alive interval for the resource type (in milliseconds).
  3610. //
  3611. // dwIsAliveIntervalIn
  3612. // Is-alive interval for the resource type (in milliseconds).
  3613. //
  3614. // Return Values:
  3615. // S_OK
  3616. // Success.
  3617. //
  3618. // other HRESULTs.
  3619. // The call failed.
  3620. //
  3621. //////////////////////////////////////////////////////////////////////////
  3622. HRESULT
  3623. Create(
  3624. [in, string ] const WCHAR * pcszResTypeNameIn,
  3625. [in, string ] const WCHAR * pcszResTypeDisplayNameIn,
  3626. [in, string ] const WCHAR * pcszResDllNameIn,
  3627. [in] DWORD dwLooksAliveIntervalIn,
  3628. [in] DWORD dwIsAliveIntervalIn
  3629. );
  3630. //////////////////////////////////////////////////////////////////////////
  3631. //
  3632. // STDMETHOD
  3633. // IClusCfgResourceTypeCreate::RegisterAdminExtensions(
  3634. // [in, string ] const WCHAR * pcszResDllNameIn,
  3635. // [in] ULONG cExtClsidCountIn,
  3636. // [in, size_is( cExtClsidCountIn ) ] const CLSID * rgclsidExtClsidsIn
  3637. // )
  3638. //
  3639. // Description:
  3640. // This method registers the cluster administrator extensions for
  3641. // a resource type.
  3642. //
  3643. // Arguments:
  3644. // pcszResTypeNameIn
  3645. // Name of the resource type against for the extensions are to be
  3646. // registered.
  3647. //
  3648. // cExtClsidCountIn
  3649. // Number of extension class ids in the next parameter.
  3650. //
  3651. // rgclsidExtClsidsIn
  3652. // Pointer to an array of class ids of cluster administrator extensions.
  3653. // This can be NULL if cExtClsidCountIn is 0.
  3654. //
  3655. //
  3656. // Return Values:
  3657. // S_OK
  3658. // Success.
  3659. //
  3660. // other HRESULTs.
  3661. // The call failed.
  3662. //
  3663. //////////////////////////////////////////////////////////////////////////
  3664. HRESULT
  3665. RegisterAdminExtensions(
  3666. [in, string ] const WCHAR * pcszResTypeNameIn,
  3667. [in] ULONG cExtClsidCountIn,
  3668. [in, size_is( cExtClsidCountIn ) ] const CLSID * rgclsidExtClsidsIn
  3669. );
  3670. }; //*** interface IClusCfgResourceTypeCreate
  3671. //****************************************************************************
  3672. //++
  3673. //
  3674. // interface IClusCfgEvictCleanup
  3675. //
  3676. // Description:
  3677. // This interface can be used to cleanup a node that has been evicted from
  3678. // a cluster.
  3679. //
  3680. //--
  3681. //****************************************************************************
  3682. [
  3683. object,
  3684. uuid( 6FE3E361-D373-4C5F-A0AF-1DFE8493C655 ),
  3685. async_uuid( 6FE3E362-D373-4C5F-A0AF-1DFE8493C655 ),
  3686. pointer_default( unique )
  3687. ]
  3688. interface
  3689. IClusCfgEvictCleanup : IUnknown
  3690. {
  3691. //////////////////////////////////////////////////////////////////////////
  3692. //
  3693. // STDMETHOD
  3694. // IClusCfgEvictCleanup::CleanupLocal( [ in ] DWORD dwDelayIn )
  3695. //
  3696. // Description:
  3697. // This method performs the clean up actions on the local node after
  3698. // it has been evicted from a cluster, so that the node can go back
  3699. // to its "pre-clustered" state.
  3700. //
  3701. // Arguments:
  3702. // DWORD dwDelayIn
  3703. // Number of milliseconds that this method will wait before starting
  3704. // cleanup. If some other process cleans up this node while this thread
  3705. // is waiting, the wait is terminated. If this value is zero, this method
  3706. // will attempt to clean up this node immediately.
  3707. //
  3708. // Return Values:
  3709. // S_OK
  3710. // Success.
  3711. //
  3712. // Other HRESULTs
  3713. // The call failed.
  3714. //
  3715. //////////////////////////////////////////////////////////////////////////
  3716. HRESULT
  3717. CleanupLocalNode( [ in ] DWORD dwDelayIn );
  3718. //////////////////////////////////////////////////////////////////////////
  3719. //
  3720. // STDMETHOD
  3721. // IClusCfgEvictCleanup::CleanupRemoteNode(
  3722. // const WCHAR * pcszEvicteeNodeNameIn
  3723. // , DWORD dwDelayIn
  3724. // )
  3725. //
  3726. // Description:
  3727. // This method performs the clean up actions on a remote node after
  3728. // it has been evicted from a cluster, so that the node can go back
  3729. // to its "pre-clustered" state.
  3730. //
  3731. // Arguments:
  3732. // const WCHAR * pcszEvictedNodeNameIn
  3733. // Name of the node that has just been evicted. This can be the
  3734. // NetBios name of the node, the fully qualified domain name or
  3735. // the node IP address.
  3736. //
  3737. // DWORD dwDelayIn
  3738. // Number of milliseconds that this method will wait before starting
  3739. // cleanup. If some other process cleans up this node while this thread
  3740. // is waiting, the wait is terminated. If this value is zero, this method
  3741. // will attempt to clean up this node immediately.
  3742. //
  3743. // Return Values:
  3744. // S_OK
  3745. // Success.
  3746. //
  3747. // Other HRESULTs
  3748. // The call failed.
  3749. //
  3750. //////////////////////////////////////////////////////////////////////////
  3751. HRESULT
  3752. CleanupRemoteNode(
  3753. [ in, string ] const WCHAR * pcszEvictedNodeNameIn
  3754. , [ in ] DWORD dwDelayIn
  3755. );
  3756. }; // interface IClusCfgEvictCleanup
  3757. //****************************************************************************
  3758. //++
  3759. //
  3760. // interface IClusCfgStartupListener
  3761. //
  3762. // Description:
  3763. // This interface is implemented by a component that wishes to be notified
  3764. // when the cluster service has started.
  3765. //
  3766. //--
  3767. //****************************************************************************
  3768. [
  3769. object,
  3770. uuid( D282CAEF-2EDE-4ab9-A5D5-F7BDE3D23F0F ),
  3771. async_uuid( D282CAF0-2EDE-4ab9-A5D5-F7BDE3D23F10 ),
  3772. pointer_default( unique )
  3773. ]
  3774. interface
  3775. IClusCfgStartupListener : IUnknown
  3776. {
  3777. //////////////////////////////////////////////////////////////////////////
  3778. //
  3779. // STDMETHOD
  3780. // IClusCfgStartupListener::Notify( [ in ] IUnknown * punkIn )
  3781. //
  3782. // Description:
  3783. // This method is called to inform a component that the cluster service
  3784. // has started on the local node.
  3785. //
  3786. // Arguments:
  3787. // IUnknown * punkIn
  3788. // The component that implements this Punk may also provide services
  3789. // that are useful to the implementor of this method. For example,
  3790. // this component usually implements the IClusCfgResourceTypeCreate
  3791. // interface.
  3792. //
  3793. // Return Values:
  3794. // S_OK
  3795. // Success.
  3796. //
  3797. // Other HRESULTs
  3798. // The call failed.
  3799. //
  3800. //////////////////////////////////////////////////////////////////////////
  3801. HRESULT
  3802. Notify( [ in ] IUnknown * punkIn );
  3803. }; // interface IClusCfgStartupListener
  3804. //****************************************************************************
  3805. //++
  3806. //
  3807. // interface IClusCfgStartupNotify
  3808. //
  3809. // Description:
  3810. // This interface is implemented by a component that the cluster service
  3811. // instantiates. When the cluster service calls the only method on this
  3812. // interface, this component will enumerate the startup listeners and
  3813. // inform them that the cluster service has started on the local node.
  3814. //
  3815. //--
  3816. //****************************************************************************
  3817. [
  3818. object,
  3819. uuid( C2B0D069-6353-4EE1-B253-6B0D75DB2CD3 ),
  3820. async_uuid( C2B0D06A-6353-4EE1-B253-6B0D75DB2CD3 ),
  3821. pointer_default( unique )
  3822. ]
  3823. interface
  3824. IClusCfgStartupNotify : IUnknown
  3825. {
  3826. //////////////////////////////////////////////////////////////////////////
  3827. //
  3828. // STDMETHOD
  3829. // IClusCfgStartupNotify::SendNotifications( [ in ] IUnknown * punkIn )
  3830. //
  3831. // Description:
  3832. // This method is called by the Cluster Service to inform the implementor
  3833. // of this interface to send out notification of cluster service startup
  3834. // to interested listeners. If this method is being called for the first
  3835. // time, the method waits till the post configuration steps are complete
  3836. // before sending out the notifications.
  3837. //
  3838. // Arguments:
  3839. // None.
  3840. //
  3841. // Return Values:
  3842. // S_OK
  3843. // Success.
  3844. //
  3845. // Other HRESULTs
  3846. // The call failed.
  3847. //
  3848. //////////////////////////////////////////////////////////////////////////
  3849. HRESULT
  3850. SendNotifications( void );
  3851. }; // interface IClusCfgStartupNotify