ClusCfgServer.idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:125k
源码类别:

模拟服务器

开发平台:

C/C++

  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