home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / CLUSAPI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  59.2 KB  |  2,167 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1997  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     clusapi.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines the common management and application interface to
  12.     the Microsoft Cluster Server services.
  13.  
  14. Revision History:
  15.  
  16. --*/
  17.  
  18. #ifndef _CLUSTER_API_
  19. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  20. #define _CLUSTER_API_
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26.  
  27. //
  28. // General cluster definitions
  29. //
  30.  
  31. #ifndef _CLUSTER_API_TYPES_
  32. //
  33. // Defined cluster handle types.
  34. //
  35. typedef struct _HCLUSTER *HCLUSTER;
  36. typedef struct _HNODE *HNODE;
  37. typedef struct _HRESOURCE *HRESOURCE;
  38. typedef struct _HGROUP *HGROUP;
  39. typedef struct _HRESTYPE *HRESTYPE;
  40. typedef struct _HNETWORK *HNETWORK;
  41. typedef struct _HNETINTERFACE *HNETINTERFACE;
  42. typedef struct _HCHANGE *HCHANGE;
  43. typedef struct _HCLUSENUM *HCLUSENUM;
  44. typedef struct _HGROUPENUM *HGROUPENUM;
  45. typedef struct _HRESENUM *HRESENUM;
  46. typedef struct _HNETWORKENUM *HNETWORKENUM;
  47. typedef struct _HNODEENUM *HNODEENUM;
  48.  
  49. #endif // _CLUSTER_API_TYPES_
  50.  
  51. //
  52. // Definitions used in cluster management routines.
  53. //
  54.  
  55. #define MAX_CLUSTERNAME_LENGTH      MAX_COMPUTERNAME_LENGTH
  56.  
  57. #ifndef _CLUSTER_API_TYPES_
  58. //
  59. // Cluster-related structures and types
  60. //
  61. typedef enum CLUSTER_QUORUM_TYPE {
  62.     OperationalQuorum,
  63.     ModifyQuorum
  64. } CLUSTER_QUORUM_TYPE;
  65.  
  66. #ifndef MIDL_PASS
  67.  
  68. typedef struct CLUSTERVERSIONINFO {
  69.     DWORD dwVersionInfoSize;
  70.     WORD  MajorVersion;
  71.     WORD  MinorVersion;
  72.     WORD  BuildNumber;
  73.     WCHAR szVendorId[64];
  74.     WCHAR szCSDVersion[64];
  75. } CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;
  76.  
  77. #endif // MIDL_PASS
  78.  
  79. #endif // _CLUSTER_API_TYPES_
  80.  
  81.  
  82. //
  83. // Interfaces for managing clusters
  84. //
  85.  
  86. //
  87. // Cluster API Specific Access Rights
  88. //
  89. #define CLUSAPI_READ_ACCESS     0x00000001L
  90. #define CLUSAPI_CHANGE_ACCESS   0x00000002L
  91. #define CLUSAPI_NO_ACCESS       0x00000004L
  92. #define CLUSAPI_ALL_ACCESS (CLUSAPI_READ_ACCESS | CLUSAPI_CHANGE_ACCESS)
  93.  
  94.  
  95.  
  96. #ifndef MIDL_PASS
  97. HCLUSTER
  98. WINAPI
  99. OpenCluster(
  100.     IN LPCWSTR lpszClusterName
  101.     );
  102.  
  103. BOOL
  104. WINAPI
  105. CloseCluster(
  106.     IN HCLUSTER hCluster
  107.     );
  108.  
  109. DWORD
  110. WINAPI
  111. SetClusterName(
  112.     IN HCLUSTER hCluster,
  113.     IN LPCWSTR lpszNewClusterName
  114.     );
  115.  
  116. DWORD
  117. WINAPI
  118. GetClusterInformation(
  119.     IN HCLUSTER hCluster,
  120.     OUT LPWSTR lpszClusterName,
  121.     IN OUT LPDWORD lpcbClusterName,
  122.     OUT OPTIONAL LPCLUSTERVERSIONINFO lpClusterInfo
  123.     );
  124.  
  125. DWORD
  126. WINAPI
  127. GetClusterQuorumResource(
  128.     IN HCLUSTER     hCluster,
  129.     OUT LPWSTR      lpszResourceName,
  130.     IN OUT LPDWORD  lpcbResourceName,
  131.     OUT LPWSTR      lpszDeviceName,
  132.     IN OUT LPDWORD  lpcbDeviceName,
  133.     OUT LPDWORD     lpdwMaxQuorumLogSize
  134.     );
  135.  
  136. DWORD
  137. WINAPI
  138. SetClusterQuorumResource(
  139.     IN HRESOURCE hResource,
  140.     IN LPCWSTR   lpszDeviceName,
  141.     IN DWORD     dwMaxQuoLogSize
  142.     );
  143.  
  144. DWORD
  145. WINAPI
  146. SetClusterNetworkPriorityOrder(
  147.     IN HCLUSTER hCluster,
  148.     IN DWORD NetworkCount,
  149.     IN HNETWORK NetworkList[]
  150.     );
  151.  
  152. #endif // MIDL_PASS
  153.  
  154. //
  155. // Cluster Event Notification API
  156. //
  157.  
  158. #ifndef _CLUSTER_API_TYPES_
  159. //
  160. // Cluster event filter flags.
  161. //
  162. typedef enum CLUSTER_CHANGE {
  163.     CLUSTER_CHANGE_NODE_STATE               = 0x00000001,
  164.     CLUSTER_CHANGE_NODE_DELETED             = 0x00000002,
  165.     CLUSTER_CHANGE_NODE_ADDED               = 0x00000004,
  166.     CLUSTER_CHANGE_NODE_PROPERTY            = 0x00000008,
  167.  
  168.     CLUSTER_CHANGE_REGISTRY_NAME            = 0x00000010,
  169.     CLUSTER_CHANGE_REGISTRY_ATTRIBUTES      = 0x00000020,
  170.     CLUSTER_CHANGE_REGISTRY_VALUE           = 0x00000040,
  171.     CLUSTER_CHANGE_REGISTRY_SUBTREE         = 0x00000080,
  172.  
  173.     CLUSTER_CHANGE_RESOURCE_STATE           = 0x00000100,
  174.     CLUSTER_CHANGE_RESOURCE_DELETED         = 0x00000200,
  175.     CLUSTER_CHANGE_RESOURCE_ADDED           = 0x00000400,
  176.     CLUSTER_CHANGE_RESOURCE_PROPERTY        = 0x00000800,
  177.  
  178.     CLUSTER_CHANGE_GROUP_STATE              = 0x00001000,
  179.     CLUSTER_CHANGE_GROUP_DELETED            = 0x00002000,
  180.     CLUSTER_CHANGE_GROUP_ADDED              = 0x00004000,
  181.     CLUSTER_CHANGE_GROUP_PROPERTY           = 0x00008000,
  182.  
  183.     CLUSTER_CHANGE_RESOURCE_TYPE_DELETED    = 0x00010000,
  184.     CLUSTER_CHANGE_RESOURCE_TYPE_ADDED      = 0x00020000,
  185.  
  186.     CLUSTER_CHANGE_NETWORK_STATE            = 0x00100000,
  187.     CLUSTER_CHANGE_NETWORK_DELETED          = 0x00200000,
  188.     CLUSTER_CHANGE_NETWORK_ADDED            = 0x00400000,
  189.     CLUSTER_CHANGE_NETWORK_PROPERTY         = 0x00800000,
  190.  
  191.     CLUSTER_CHANGE_NETINTERFACE_STATE       = 0x01000000,
  192.     CLUSTER_CHANGE_NETINTERFACE_DELETED     = 0x02000000,
  193.     CLUSTER_CHANGE_NETINTERFACE_ADDED       = 0x04000000,
  194.     CLUSTER_CHANGE_NETINTERFACE_PROPERTY    = 0x08000000,
  195.  
  196.     CLUSTER_CHANGE_QUORUM_STATE             = 0x10000000,
  197.     CLUSTER_CHANGE_CLUSTER_STATE            = 0x20000000,
  198.     CLUSTER_CHANGE_CLUSTER_PROPERTY         = 0x40000000,
  199.  
  200.     CLUSTER_CHANGE_HANDLE_CLOSE             = 0x80000000,
  201.  
  202.     CLUSTER_CHANGE_ALL                      = (CLUSTER_CHANGE_NODE_STATE                |
  203.                                                CLUSTER_CHANGE_NODE_DELETED              |
  204.                                                CLUSTER_CHANGE_NODE_ADDED                |
  205.                                                CLUSTER_CHANGE_NODE_PROPERTY             |
  206.                                                CLUSTER_CHANGE_REGISTRY_NAME             |
  207.                                                CLUSTER_CHANGE_REGISTRY_ATTRIBUTES       |
  208.                                                CLUSTER_CHANGE_REGISTRY_VALUE            |
  209.                                                CLUSTER_CHANGE_REGISTRY_SUBTREE          |
  210.                                                CLUSTER_CHANGE_RESOURCE_STATE            |
  211.                                                CLUSTER_CHANGE_RESOURCE_DELETED          |
  212.                                                CLUSTER_CHANGE_RESOURCE_ADDED            |
  213.                                                CLUSTER_CHANGE_RESOURCE_PROPERTY         |
  214.                                                CLUSTER_CHANGE_GROUP_STATE               |
  215.                                                CLUSTER_CHANGE_GROUP_DELETED             |
  216.                                                CLUSTER_CHANGE_GROUP_ADDED               |
  217.                                                CLUSTER_CHANGE_GROUP_PROPERTY            |
  218.                                                CLUSTER_CHANGE_RESOURCE_TYPE_DELETED     |
  219.                                                CLUSTER_CHANGE_RESOURCE_TYPE_ADDED       |
  220.                                                CLUSTER_CHANGE_NETWORK_STATE             |
  221.                                                CLUSTER_CHANGE_NETWORK_DELETED           |
  222.                                                CLUSTER_CHANGE_NETWORK_ADDED             |
  223.                                                CLUSTER_CHANGE_NETWORK_PROPERTY          |
  224.                                                CLUSTER_CHANGE_NETINTERFACE_STATE        |
  225.                                                CLUSTER_CHANGE_NETINTERFACE_DELETED      |
  226.                                                CLUSTER_CHANGE_NETINTERFACE_ADDED        |
  227.                                                CLUSTER_CHANGE_NETINTERFACE_PROPERTY     |
  228.                                                CLUSTER_CHANGE_QUORUM_STATE              |
  229.                                                CLUSTER_CHANGE_CLUSTER_STATE             |
  230.                                                CLUSTER_CHANGE_CLUSTER_PROPERTY          |
  231.                                                CLUSTER_CHANGE_HANDLE_CLOSE)
  232.  
  233. } CLUSTER_CHANGE;
  234.  
  235. #endif // _CLUSTER_API_TYPES_
  236.  
  237. #ifndef MIDL_PASS
  238. HCHANGE
  239. WINAPI
  240. CreateClusterNotifyPort(
  241.     IN OPTIONAL HCHANGE hChange,
  242.     IN OPTIONAL HCLUSTER hCluster,
  243.     IN DWORD dwFilter,
  244.     IN DWORD dwNotifyKey
  245.     );
  246.  
  247. DWORD
  248. WINAPI
  249. RegisterClusterNotify(
  250.     IN HCHANGE hChange,
  251.     IN DWORD dwFilterType,
  252.     IN HANDLE hObject,
  253.     IN DWORD dwNotifyKey
  254.     );
  255.  
  256. DWORD
  257. WINAPI
  258. GetClusterNotify(
  259.     IN HCHANGE hChange,
  260.     OUT LPDWORD lpdwNotifyKey,
  261.     OUT LPDWORD lpdwFilterType,
  262.     OUT OPTIONAL LPWSTR lpszName,
  263.     IN OUT LPDWORD lpcbName,
  264.     IN DWORD dwMilliseconds
  265.     );
  266.  
  267. BOOL
  268. WINAPI
  269. CloseClusterNotifyPort(
  270.     IN HCHANGE hChange
  271.     );
  272. #endif // MIDL_PASS
  273.  
  274. //
  275. // Enumeration routines
  276. //
  277.  
  278. #ifndef _CLUSTER_API_TYPES_
  279. //
  280. // Define enumerable types
  281. //
  282. typedef enum CLUSTER_ENUM {
  283.     CLUSTER_ENUM_NODE               = 0x00000001,
  284.     CLUSTER_ENUM_RESTYPE            = 0x00000002,
  285.     CLUSTER_ENUM_RESOURCE           = 0x00000004,
  286.     CLUSTER_ENUM_GROUP              = 0x00000008,
  287.     CLUSTER_ENUM_NETWORK            = 0x00000010,
  288.     CLUSTER_ENUM_NETINTERFACE       = 0x00000020,
  289.     CLUSTER_ENUM_INTERNAL_NETWORK   = 0x80000000,
  290.  
  291.     CLUSTER_ENUM_ALL                = (CLUSTER_ENUM_NODE      |
  292.                                        CLUSTER_ENUM_RESTYPE   |
  293.                                        CLUSTER_ENUM_RESOURCE  |
  294.                                        CLUSTER_ENUM_GROUP     |
  295.                                        CLUSTER_ENUM_NETWORK   |
  296.                                        CLUSTER_ENUM_NETINTERFACE)
  297.  
  298. } CLUSTER_ENUM;
  299.  
  300. #endif // _CLUSTER_API_TYPES_
  301.  
  302. #ifndef MIDL_PASS
  303. HCLUSENUM
  304. WINAPI
  305. ClusterOpenEnum(
  306.     IN HCLUSTER hCluster,
  307.     IN DWORD dwType
  308.     );
  309.  
  310. DWORD
  311. WINAPI
  312. ClusterEnum(
  313.     IN HCLUSENUM hEnum,
  314.     IN DWORD dwIndex,
  315.     OUT LPDWORD lpdwType,
  316.     OUT LPWSTR lpszName,
  317.     IN OUT LPDWORD lpcbName
  318.     );
  319.  
  320. DWORD
  321. WINAPI
  322. ClusterCloseEnum(
  323.     IN HCLUSENUM hEnum
  324.     );
  325. #endif // MIDL_PASS
  326.  
  327.  
  328. #ifndef _CLUSTER_API_TYPES_
  329. //
  330. // Define enumerable node types
  331. //
  332. typedef enum CLUSTER_NODE_ENUM {
  333.     CLUSTER_NODE_ENUM_NETINTERFACES = 0x00000001,
  334.  
  335.     CLUSTER_NODE_ENUM_ALL           = (CLUSTER_NODE_ENUM_NETINTERFACES)
  336.  
  337. } CLUSTER_NODE_ENUM;
  338.  
  339. //
  340. // Node-related structures and types.
  341. //
  342. typedef enum CLUSTER_NODE_STATE {
  343.     ClusterNodeStateUnknown = -1,
  344.     ClusterNodeUp,
  345.     ClusterNodeDown,
  346.     ClusterNodePaused,
  347.     ClusterNodeJoining
  348. } CLUSTER_NODE_STATE;
  349.  
  350. #endif // _CLUSTER_API_TYPES_
  351.  
  352. //
  353. // Interfaces for managing the nodes of a cluster.
  354. //
  355.  
  356. #ifndef MIDL_PASS
  357. HNODE
  358. WINAPI
  359. OpenClusterNode(
  360.     IN HCLUSTER hCluster,
  361.     IN LPCWSTR lpszNodeName
  362.     );
  363.  
  364. BOOL
  365. WINAPI
  366. CloseClusterNode(
  367.     IN HNODE hNode
  368.     );
  369.  
  370. CLUSTER_NODE_STATE
  371. WINAPI
  372. GetClusterNodeState(
  373.     IN HNODE hNode
  374.     );
  375.  
  376. DWORD
  377. WINAPI
  378. GetClusterNodeId(
  379.     IN HNODE hNode,
  380.     OUT LPWSTR lpszNodeId,
  381.     IN OUT LPDWORD lpcchName
  382.     );
  383.  
  384. #define GetCurrentClusterNodeId(_lpszNodeId_, _lpcchName_) \
  385.     GetClusterNodeId(NULL, (_lpszNodeId_), (_lpcchName_))
  386.  
  387. DWORD
  388. WINAPI
  389. PauseClusterNode(
  390.     IN HNODE hNode
  391.     );
  392.  
  393. DWORD
  394. WINAPI
  395. ResumeClusterNode(
  396.     IN HNODE hNode
  397.     );
  398.  
  399. DWORD
  400. WINAPI
  401. EvictClusterNode(
  402.     IN HNODE hNode
  403.     );
  404.  
  405. HNODEENUM
  406. WINAPI
  407. ClusterNodeOpenEnum(
  408.     IN HNODE hNode,
  409.     IN DWORD dwType
  410.     );
  411.  
  412. DWORD
  413. WINAPI
  414. ClusterNodeCloseEnum(
  415.     IN HNODEENUM hNodeEnum
  416.     );
  417.  
  418. DWORD
  419. WINAPI
  420. ClusterNodeEnum(
  421.     IN HNODEENUM hNodeEnum,
  422.     IN DWORD dwIndex,
  423.     OUT LPDWORD lpdwType,
  424.     OUT LPWSTR lpszName,
  425.     IN OUT LPDWORD lpcbName
  426.     );
  427. #endif // MIDL_PASS
  428.  
  429.  
  430. //
  431. // Interfaces for managing the resource types in a cluster
  432. //
  433.  
  434. #ifndef MIDL_PASS
  435. HKEY
  436. WINAPI
  437. GetClusterResourceTypeKey(
  438.     IN HCLUSTER hCluster,
  439.     IN LPCWSTR lpszTypeName,
  440.     IN REGSAM samDesired
  441.     );
  442. #endif // MIDL_PASS
  443.  
  444. #ifndef _CLUSTER_API_TYPES_
  445. //
  446. // Define enumerable group types
  447. //
  448. typedef enum CLUSTER_GROUP_ENUM {
  449.     CLUSTER_GROUP_ENUM_CONTAINS     = 0x00000001,
  450.     CLUSTER_GROUP_ENUM_NODES        = 0x00000002,
  451.  
  452.     CLUSTER_GROUP_ENUM_ALL          = (CLUSTER_GROUP_ENUM_CONTAINS |
  453.                                        CLUSTER_GROUP_ENUM_NODES)
  454. } CLUSTER_GROUP_ENUM;
  455.  
  456. //
  457. // Interfaces for managing the failover groups in a cluster.
  458. //
  459. typedef enum CLUSTER_GROUP_STATE {
  460.     ClusterGroupStateUnknown = -1,
  461.     ClusterGroupOnline,
  462.     ClusterGroupOffline,
  463.     ClusterGroupFailed,
  464.     ClusterGroupPartialOnline
  465. } CLUSTER_GROUP_STATE;
  466.  
  467. typedef enum CLUSTER_GROUP_AUTOFAILBACK_TYPE
  468. {
  469.     ClusterGroupPreventFailback = 0,
  470.     ClusterGroupAllowFailback,
  471.     ClusterGroupFailbackTypeCount
  472. } CLUSTER_GROUP_AUTOFAILBACK_TYPE, CGAFT;
  473.  
  474. #endif // _CLUSTER_API_TYPES_
  475.  
  476. #ifndef MIDL_PASS
  477. HGROUP
  478. WINAPI
  479. CreateClusterGroup(
  480.     IN HCLUSTER hCluster,
  481.     IN LPCWSTR lpszGroupName
  482.     );
  483.  
  484. HGROUP
  485. WINAPI
  486. OpenClusterGroup(
  487.     IN HCLUSTER hCluster,
  488.     IN LPCWSTR lpszGroupName
  489.     );
  490.  
  491. BOOL
  492. WINAPI
  493. CloseClusterGroup(
  494.     IN HGROUP hGroup
  495.     );
  496.  
  497. CLUSTER_GROUP_STATE
  498. WINAPI
  499. GetClusterGroupState(
  500.     IN HGROUP hGroup,
  501.     OUT OPTIONAL LPWSTR lpszNodeName,
  502.     IN OUT LPDWORD lpcbNodeName
  503.     );
  504.  
  505. DWORD
  506. WINAPI
  507. SetClusterGroupName(
  508.     IN HGROUP hGroup,
  509.     IN LPCWSTR lpszGroupName
  510.     );
  511.  
  512. DWORD
  513. WINAPI
  514. SetClusterGroupNodeList(
  515.     IN HGROUP hGroup,
  516.     IN DWORD NodeCount,
  517.     IN HNODE NodeList[]
  518.     );
  519.  
  520. DWORD
  521. WINAPI
  522. OnlineClusterGroup(
  523.     IN HGROUP hGroup,
  524.     IN OPTIONAL HNODE hDestinationNode
  525.     );
  526.  
  527. DWORD
  528. WINAPI
  529. MoveClusterGroup(
  530.     IN HGROUP hGroup,
  531.     IN OPTIONAL HNODE hDestinationNode
  532.     );
  533.  
  534. DWORD
  535. WINAPI
  536. OfflineClusterGroup(
  537.     IN HGROUP hGroup
  538.     );
  539.  
  540. DWORD
  541. WINAPI
  542. DeleteClusterGroup(
  543.     IN HGROUP hGroup
  544.     );
  545.  
  546. HGROUPENUM
  547. WINAPI
  548. ClusterGroupOpenEnum(
  549.     IN HGROUP hGroup,
  550.     IN DWORD dwType
  551.     );
  552.  
  553. DWORD
  554. WINAPI
  555. ClusterGroupEnum(
  556.     IN HGROUPENUM hGroupEnum,
  557.     IN DWORD dwIndex,
  558.     OUT LPDWORD lpdwType,
  559.     OUT LPWSTR lpszResourceName,
  560.     IN OUT LPDWORD lpcbName
  561.     );
  562.  
  563. DWORD
  564. WINAPI
  565. ClusterGroupCloseEnum(
  566.     IN HGROUPENUM hGroupEnum
  567.     );
  568. #endif // MIDL_PASS
  569.  
  570.  
  571. //
  572. // Definitions used in resource management routines.
  573. //
  574.  
  575. #ifndef _CLUSTER_API_TYPES_
  576. //
  577. // Resource-related structures and types
  578. //
  579. typedef enum CLUSTER_RESOURCE_STATE {
  580.     ClusterResourceStateUnknown = -1,
  581.     ClusterResourceInherited,
  582.     ClusterResourceInitializing,
  583.     ClusterResourceOnline,
  584.     ClusterResourceOffline,
  585.     ClusterResourceFailed,
  586.     ClusterResourcePending = 128,
  587.     ClusterResourceOnlinePending,
  588.     ClusterResourceOfflinePending
  589. } CLUSTER_RESOURCE_STATE;
  590.  
  591. typedef enum CLUSTER_RESOURCE_RESTART_ACTION {
  592.     ClusterResourceDontRestart = 0,
  593.     ClusterResourceRestartNoNotify,
  594.     ClusterResourceRestartNotify,
  595.     ClusterResourceRestartActionCount
  596. } CLUSTER_RESOURCE_RESTART_ACTION, CRRA;
  597.  
  598. //
  599. // Flags for resource creation
  600. //
  601. typedef enum CLUSTER_RESOURCE_CREATE_FLAGS {
  602.     CLUSTER_RESOURCE_SEPARATE_MONITOR   = 1,
  603.  
  604.     CLUSTER_RESOURCE_VALID_FLAGS        = CLUSTER_RESOURCE_SEPARATE_MONITOR
  605.  
  606. } CLUSTER_RESOURCE_CREATE_FLAGS;
  607.  
  608. #endif // _CLUSTER_API_TYPES_
  609.  
  610. //
  611. // Interfaces for managing the resources in a cluster
  612. //
  613.  
  614. #ifndef MIDL_PASS
  615. HRESOURCE
  616. WINAPI
  617. CreateClusterResource(
  618.     IN HGROUP hGroup,
  619.     IN LPCWSTR lpszResourceName,
  620.     IN LPCWSTR lpszResourceType,
  621.     IN DWORD dwFlags
  622.     );
  623.  
  624. HRESOURCE
  625. WINAPI
  626. OpenClusterResource(
  627.     IN HCLUSTER hCluster,
  628.     IN LPCWSTR lpszResourceName
  629.     );
  630.  
  631. BOOL
  632. WINAPI
  633. CloseClusterResource(
  634.     IN HRESOURCE hResource
  635.     );
  636.  
  637. DWORD
  638. WINAPI
  639. DeleteClusterResource(
  640.     IN HRESOURCE hResource
  641.     );
  642.  
  643. CLUSTER_RESOURCE_STATE
  644. WINAPI
  645. GetClusterResourceState(
  646.     IN HRESOURCE hResource,
  647.     OUT OPTIONAL LPWSTR lpszNodeName,
  648.     IN OUT LPDWORD lpcbNodeName,
  649.     OUT OPTIONAL LPWSTR lpszGroupName,
  650.     IN OUT LPDWORD lpcbGroupName
  651.     );
  652.  
  653. DWORD
  654. WINAPI
  655. SetClusterResourceName(
  656.     IN HRESOURCE hResource,
  657.     IN LPCWSTR lpszResourceName
  658.     );
  659.  
  660. DWORD
  661. WINAPI
  662. FailClusterResource(
  663.     IN HRESOURCE hResource
  664.     );
  665.  
  666. DWORD
  667. WINAPI
  668. OnlineClusterResource(
  669.     IN HRESOURCE hResource
  670.     );
  671.  
  672. DWORD
  673. WINAPI
  674. OfflineClusterResource(
  675.     IN HRESOURCE hResource
  676.     );
  677.  
  678. DWORD
  679. WINAPI
  680. ChangeClusterResourceGroup(
  681.     IN HRESOURCE hResource,
  682.     IN HGROUP hGroup
  683.     );
  684.  
  685. DWORD
  686. WINAPI
  687. AddClusterResourceNode(
  688.     IN HRESOURCE hResource,
  689.     IN HNODE hNode
  690.     );
  691.  
  692. DWORD
  693. WINAPI
  694. RemoveClusterResourceNode(
  695.     IN HRESOURCE hResource,
  696.     IN HNODE hNode
  697.     );
  698.  
  699. DWORD
  700. WINAPI
  701. AddClusterResourceDependency(
  702.     IN HRESOURCE hResource,
  703.     IN HRESOURCE hDependsOn
  704.     );
  705.  
  706. DWORD
  707. WINAPI
  708. RemoveClusterResourceDependency(
  709.     IN HRESOURCE hResource,
  710.     IN HRESOURCE hDependsOn
  711.     );
  712.  
  713. BOOL
  714. WINAPI
  715. CanResourceBeDependent(
  716.     IN HRESOURCE hResource,
  717.     IN HRESOURCE hResourceDependent
  718.     );
  719.  
  720. DWORD
  721. WINAPI
  722. ClusterResourceControl(
  723.     IN HRESOURCE hResource,
  724.     IN OPTIONAL HNODE hHostNode,
  725.     IN DWORD dwControlCode,
  726.     IN LPVOID lpInBuffer,
  727.     IN DWORD cbInBufferSize,
  728.     OUT LPVOID lpOutBuffer,
  729.     IN DWORD cbOutBufferSize,
  730.     OUT LPDWORD lpcbBytesReturned
  731.     );
  732.  
  733. DWORD
  734. WINAPI
  735. ClusterResourceTypeControl(
  736.     IN HCLUSTER hCluster,
  737.     IN LPCWSTR ResourceTypeName,
  738.     IN OPTIONAL HNODE hHostNode,
  739.     IN DWORD dwControlCode,
  740.     IN LPVOID lpInBuffer,
  741.     IN DWORD cbInBufferSize,
  742.     OUT LPVOID lpOutBuffer,
  743.     IN DWORD cbOutBufferSize,
  744.     OUT LPDWORD lpcbBytesReturned
  745.     );
  746.  
  747. DWORD
  748. WINAPI
  749. ClusterGroupControl(
  750.     IN HGROUP hGroup,
  751.     IN OPTIONAL HNODE hHostNode,
  752.     IN DWORD dwControlCode,
  753.     IN LPVOID lpInBuffer,
  754.     IN DWORD cbInBufferSize,
  755.     OUT LPVOID lpOutBuffer,
  756.     IN DWORD cbOutBufferSize,
  757.     OUT LPDWORD lpcbBytesReturned
  758.     );
  759.  
  760. DWORD
  761. WINAPI
  762. ClusterNodeControl(
  763.     IN HNODE hNode,
  764.     IN OPTIONAL HNODE hHostNode,
  765.     IN DWORD dwControlCode,
  766.     IN LPVOID lpInBuffer,
  767.     IN DWORD cbInBufferSize,
  768.     OUT LPVOID lpOutBuffer,
  769.     IN DWORD cbOutBufferSize,
  770.     OUT LPDWORD lpcbBytesReturned
  771.     );
  772.  
  773. BOOL
  774. WINAPI
  775. GetClusterResourceNetworkName(
  776.     IN HRESOURCE hResource,
  777.     OUT LPWSTR lpBuffer,
  778.     IN OUT LPDWORD nSize
  779.     );
  780.  
  781.  
  782. #endif // MIDL_PASS
  783.  
  784.  
  785. //
  786. // Cluster control properties
  787. //
  788.  
  789. #ifndef _CLUSTER_API_TYPES_
  790. //
  791. // Cluster Control Property Data - Types (a WORD)
  792. //
  793. typedef enum CLUSTER_PROPERTY_TYPE {
  794.     CLUSPROP_TYPE_ENDMARK = 0,
  795.     CLUSPROP_TYPE_LIST_VALUE,
  796.     CLUSPROP_TYPE_RESCLASS,
  797.     CLUSPROP_TYPE_RESERVED1,
  798.     CLUSPROP_TYPE_NAME,
  799.     CLUSPROP_TYPE_SIGNATURE,
  800.     CLUSPROP_TYPE_SCSI_ADDRESS,
  801.     CLUSPROP_TYPE_DISK_NUMBER,
  802.     CLUSPROP_TYPE_PARTITION_INFO,
  803.     CLUSPROP_TYPE_FTSET_INFO,
  804.     CLUSPROP_TYPE_USER=32768
  805. } CLUSTER_PROPERTY_TYPE;
  806.  
  807. //
  808. // Cluster Control Property Data - Formats (a WORD)
  809. //
  810. typedef enum CLUSTER_PROPERTY_FORMAT {
  811.     CLUSPROP_FORMAT_UNKNOWN = 0,
  812.     CLUSPROP_FORMAT_BINARY,
  813.     CLUSPROP_FORMAT_DWORD,
  814.     CLUSPROP_FORMAT_SZ,
  815.     CLUSPROP_FORMAT_EXPAND_SZ,
  816.     CLUSPROP_FORMAT_MULTI_SZ,
  817.     CLUSPROP_FORMAT_ULARGE_INTEGER,
  818.     CLUSPROP_FORMAT_USER=32768
  819. } CLUSTER_PROPERTY_FORMAT;
  820.  
  821. #endif // _CLUSTER_API_TYPES_
  822.  
  823. //
  824. // Cluster Control Property Data - Syntax
  825. //
  826. #define CLUSPROP_SYNTAX_VALUE( type, format ) ((DWORD) ((type << 16) | format))
  827.  
  828. #ifndef _CLUSTER_API_TYPES_
  829.  
  830. typedef enum CLUSTER_PROPERTY_SYNTAX {
  831.  
  832.     CLUSPROP_SYNTAX_ENDMARK         = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_ENDMARK, CLUSPROP_FORMAT_UNKNOWN ),
  833.     CLUSPROP_SYNTAX_NAME            = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_NAME, CLUSPROP_FORMAT_SZ ),
  834.     CLUSPROP_SYNTAX_RESCLASS        = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_RESCLASS, CLUSPROP_FORMAT_DWORD ),
  835.  
  836.     CLUSPROP_SYNTAX_LIST_VALUE_SZ           = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_LIST_VALUE, CLUSPROP_FORMAT_SZ ),
  837.     CLUSPROP_SYNTAX_LIST_VALUE_EXPAND_SZ    = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_LIST_VALUE, CLUSPROP_FORMAT_EXPAND_SZ ),
  838.     CLUSPROP_SYNTAX_LIST_VALUE_DWORD        = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_LIST_VALUE, CLUSPROP_FORMAT_DWORD ),
  839.     CLUSPROP_SYNTAX_LIST_VALUE_BINARY       = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_LIST_VALUE, CLUSPROP_FORMAT_BINARY ),
  840.     CLUSPROP_SYNTAX_LIST_VALUE_MULTI_SZ     = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_LIST_VALUE, CLUSPROP_FORMAT_MULTI_SZ ),
  841.  
  842.     // Storage syntax values
  843.  
  844.     CLUSPROP_SYNTAX_DISK_SIGNATURE  = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_SIGNATURE, CLUSPROP_FORMAT_DWORD ),
  845.     CLUSPROP_SYNTAX_SCSI_ADDRESS    = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_SCSI_ADDRESS, CLUSPROP_FORMAT_DWORD ),
  846.     CLUSPROP_SYNTAX_DISK_NUMBER     = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_DISK_NUMBER, CLUSPROP_FORMAT_DWORD ),
  847.     CLUSPROP_SYNTAX_PARTITION_INFO  = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_PARTITION_INFO, CLUSPROP_FORMAT_BINARY ),
  848.     CLUSPROP_SYNTAX_FTSET_INFO      = CLUSPROP_SYNTAX_VALUE( CLUSPROP_TYPE_FTSET_INFO, CLUSPROP_FORMAT_BINARY )
  849.  
  850. } CLUSTER_PROPERTY_SYNTAX;
  851.  
  852. #endif // _CLUSTER_API_TYPES_
  853.  
  854. //
  855. // Define Cluster Control Code access methods
  856. //
  857. #define CLUS_ACCESS_ANY        0
  858. #define CLUS_ACCESS_READ    0x01
  859. #define CLUS_ACCESS_WRITE   0x02
  860.  
  861. //
  862. // Define Cluster Control Code modification actions
  863. //
  864. #define CLUS_NO_MODIFY      0
  865. #define CLUS_MODIFY         0x01
  866.  
  867. //
  868. // Define Cluster Control Code Global actions
  869. //
  870. #define CLUS_NOT_GLOBAL     0
  871. #define CLUS_GLOBAL         0x01
  872.  
  873. #ifndef _CLUSTER_API_TYPES_
  874. //
  875. // Define Cluster Control Code target objects
  876. //
  877. typedef enum CLUSTER_CONTROL_OBJECT {
  878.     CLUS_OBJECT_INVALID=0,
  879.     CLUS_OBJECT_RESOURCE,
  880.     CLUS_OBJECT_RESOURCE_TYPE,
  881.     CLUS_OBJECT_GROUP,
  882.     CLUS_OBJECT_NODE,
  883.     CLUS_OBJECT_NETWORK,
  884.     CLUS_OBJECT_NETINTERFACE,
  885.     CLUS_OBJECT_USER=128
  886. } CLUSTER_CONTROL_OBJECT;
  887.  
  888. #endif // _CLUSTER_API_TYPES_
  889.  
  890. //
  891. // Macro to generate full cluster control codes
  892. //
  893. //  31      24 23 22 21 20 19       16 15                    2 1    0
  894. // +----------+--+--+--+--+-----------+-----------------------+------+
  895. // |  OBJECT  |G |M |U |I       CLUSTER CONTROL CODES         |ACCESS|
  896. // +----------+--+--+--+--+-----------+-----------------------+------+
  897. //
  898. // OBJECT - Object identifier (8 bits)
  899. // G - Global bit (operation must be performed on all nodes of cluster)
  900. // M - Modify bit (code causes a modification, may cause event notification)
  901. // U - User code bit (splits the control codes into 2 spaces each 2^^19 in size)
  902. // I - Internal code bit (only for non-user control codes)
  903. // CLUSTER CONTROL CODES - 2^^18 (256 thousand possible control codes)
  904. // ACCESS - Access mode (2 bits)
  905. //
  906.  
  907. //
  908. // Define control code shifts
  909. //
  910. #define CLUSCTL_ACCESS_SHIFT         0
  911. #define CLUSCTL_FUNCTION_SHIFT       2
  912. #define CLCTL_INTERNAL_SHIFT        20
  913. #define CLCTL_USER_SHIFT            21
  914. #define CLCTL_MODIFY_SHIFT          22
  915. #define CLCTL_GLOBAL_SHIFT          23
  916. #define CLUSCTL_OBJECT_SHIFT        24
  917.  
  918. //
  919. // Define control code masks
  920. //
  921. #define CLCTL_INTERNAL_MASK             (1<<CLCTL_INTERNAL_SHIFT)
  922. #define CLCTL_USER_MASK                 (1<<CLCTL_USER_SHIFT)
  923. #define CLCTL_MODIFY_MASK               (1<<CLCTL_MODIFY_SHIFT)
  924. #define CLCTL_GLOBAL_MASK               (1<<CLCTL_GLOBAL_SHIFT)
  925. #define CLUSCTL_CONTROL_CODE_MASK       0x3FFFFF // Includes access mask
  926. #define CLUSCTL_OBJECT_MASK             0xFF
  927. #define CLUSCTL_ACCESS_MODE_MASK        0x03
  928.  
  929. //
  930. // Cluster Control function codes (a DWORD)
  931. //
  932. #define CLCTL_CLUSTER_BASE  0           // Start of cluster defined functions
  933. #define CLCTL_USER_BASE     (1<<CLCTL_USER_SHIFT) // Start of user functions
  934.  
  935. #define CLCTL_EXTERNAL_CODE( Function, Access, Modify ) ( \
  936.     ((Access) << CLUSCTL_ACCESS_SHIFT) | \
  937.     ((CLCTL_CLUSTER_BASE + Function) << CLUSCTL_FUNCTION_SHIFT) | \
  938.     ((Modify) << CLCTL_MODIFY_SHIFT) )
  939.  
  940. #define CLCTL_INTERNAL_CODE( Function, Access, Modify ) ( \
  941.     ((Access) << CLUSCTL_ACCESS_SHIFT) | \
  942.     CLCTL_INTERNAL_MASK | \
  943.     ((CLCTL_CLUSTER_BASE + Function) << CLUSCTL_FUNCTION_SHIFT) | \
  944.     ((Modify) << CLCTL_MODIFY_SHIFT) )
  945.  
  946. #ifndef _CLUSTER_API_TYPES_
  947. typedef enum CLCTL_CODES {
  948.     //
  949.     // External control codes
  950.     //
  951.     CLCTL_UNKNOWN                           = CLCTL_EXTERNAL_CODE( 0, CLUS_ACCESS_ANY, CLUS_NO_MODIFY ),
  952.     CLCTL_GET_CHARACTERISTICS               = CLCTL_EXTERNAL_CODE( 1, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  953.     CLCTL_GET_FLAGS                         = CLCTL_EXTERNAL_CODE( 2, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  954.     CLCTL_GET_CLASS_INFO                    = CLCTL_EXTERNAL_CODE( 3, CLUS_ACCESS_READ, CLUS_NO_MODIFY ), 
  955.     CLCTL_GET_REQUIRED_DEPENDENCIES         = CLCTL_EXTERNAL_CODE( 4, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  956.  
  957.     CLCTL_GET_NAME                          = CLCTL_EXTERNAL_CODE( 10, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  958.     CLCTL_GET_RESOURCE_TYPE                 = CLCTL_EXTERNAL_CODE( 11, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  959.     CLCTL_GET_NODE                          = CLCTL_EXTERNAL_CODE( 12, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  960.     CLCTL_GET_NETWORK                       = CLCTL_EXTERNAL_CODE( 13, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  961.     CLCTL_GET_ID                            = CLCTL_EXTERNAL_CODE( 14, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  962.  
  963.     CLCTL_ENUM_COMMON_PROPERTIES            = CLCTL_EXTERNAL_CODE( 20, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  964.     CLCTL_GET_RO_COMMON_PROPERTIES          = CLCTL_EXTERNAL_CODE( 21, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  965.     CLCTL_GET_COMMON_PROPERTIES             = CLCTL_EXTERNAL_CODE( 22, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  966.     CLCTL_SET_COMMON_PROPERTIES             = CLCTL_EXTERNAL_CODE( 23, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  967.     CLCTL_VALIDATE_COMMON_PROPERTIES        = CLCTL_EXTERNAL_CODE( 24, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  968.  
  969.     CLCTL_ENUM_PRIVATE_PROPERTIES           = CLCTL_EXTERNAL_CODE( 30, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  970.     CLCTL_GET_RO_PRIVATE_PROPERTIES         = CLCTL_EXTERNAL_CODE( 31, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  971.     CLCTL_GET_PRIVATE_PROPERTIES            = CLCTL_EXTERNAL_CODE( 32, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  972.     CLCTL_SET_PRIVATE_PROPERTIES            = CLCTL_EXTERNAL_CODE( 33, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  973.     CLCTL_VALIDATE_PRIVATE_PROPERTIES       = CLCTL_EXTERNAL_CODE( 34, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  974.  
  975.     CLCTL_ADD_REGISTRY_CHECKPOINT           = CLCTL_EXTERNAL_CODE( 40, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  976.     CLCTL_DELETE_REGISTRY_CHECKPOINT        = CLCTL_EXTERNAL_CODE( 41, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  977.     CLCTL_GET_REGISTRY_CHECKPOINTS          = CLCTL_EXTERNAL_CODE( 42, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  978.  
  979.     CLCTL_GET_LOADBAL_PROCESS_LIST          = CLCTL_EXTERNAL_CODE( 50, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  980.  
  981.     CLCTL_STORAGE_GET_DISK_INFO             = CLCTL_EXTERNAL_CODE( 100, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  982.     CLCTL_STORAGE_GET_AVAILABLE_DISKS       = CLCTL_EXTERNAL_CODE( 101, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  983.     CLCTL_STORAGE_IS_PATH_VALID             = CLCTL_EXTERNAL_CODE( 102, CLUS_ACCESS_READ, CLUS_NO_MODIFY ),
  984.     CLCTL_STORAGE_GET_ALL_AVAILABLE_DISKS   = (CLCTL_EXTERNAL_CODE( 103, CLUS_ACCESS_READ, CLUS_NO_MODIFY ) | CLCTL_GLOBAL_MASK),
  985.  
  986.     //
  987.     // Internal control codes
  988.     //
  989.     CLCTL_DELETE                            = CLCTL_INTERNAL_CODE( 1, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  990.     CLCTL_INSTALL_NODE                      = CLCTL_INTERNAL_CODE( 2, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  991.     CLCTL_EVICT_NODE                        = CLCTL_INTERNAL_CODE( 3, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  992.     CLCTL_ADD_DEPENDENCY                    = CLCTL_INTERNAL_CODE( 4, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  993.     CLCTL_REMOVE_DEPENDENCY                 = CLCTL_INTERNAL_CODE( 5, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  994.     CLCTL_ADD_OWNER                         = CLCTL_INTERNAL_CODE( 6, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  995.     CLCTL_REMOVE_OWNER                      = CLCTL_INTERNAL_CODE( 7, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  996.     //************ Hole here at 8
  997.     CLCTL_SET_NAME                          = CLCTL_INTERNAL_CODE( 9, CLUS_ACCESS_WRITE, CLUS_MODIFY ),
  998.     CLCTL_CLUSTER_NAME_CHANGED              = CLCTL_INTERNAL_CODE( 10, CLUS_ACCESS_WRITE, CLUS_MODIFY )
  999.  
  1000. } CLCTL_CODES;
  1001.  
  1002. #endif // _CLUSTER_API_TYPES_
  1003.  
  1004. //
  1005. // Define macros to generate object specific control codes
  1006. //
  1007. #define CLUSCTL_RESOURCE_CODE( Function ) ( \
  1008.     ((CLUS_OBJECT_RESOURCE << CLUSCTL_OBJECT_SHIFT) | Function) )
  1009.  
  1010. #define CLUSCTL_RESOURCE_TYPE_CODE( Function ) ( \
  1011.     ((CLUS_OBJECT_RESOURCE_TYPE << CLUSCTL_OBJECT_SHIFT) | Function) )
  1012.  
  1013. #define CLUSCTL_GROUP_CODE( Function ) ( \
  1014.     ((CLUS_OBJECT_GROUP << CLUSCTL_OBJECT_SHIFT) | Function) )
  1015.  
  1016. #define CLUSCTL_NODE_CODE( Function ) ( \
  1017.     ((CLUS_OBJECT_NODE << CLUSCTL_OBJECT_SHIFT) | Function) )
  1018.  
  1019. #define CLUSCTL_NETWORK_CODE( Function ) ( \
  1020.     ((CLUS_OBJECT_NETWORK << CLUSCTL_OBJECT_SHIFT) | Function) )
  1021.  
  1022. #define CLUSCTL_NETINTERFACE_CODE( Function ) ( \
  1023.     ((CLUS_OBJECT_NETINTERFACE << CLUSCTL_OBJECT_SHIFT) | Function) )
  1024.  
  1025. #define CLUSCTL_USER_CODE( Function, Object ) ( \
  1026.     ((Object) << CLUSCTL_OBJECT_SHIFT) | (CLCTL_USER_BASE + Function) )
  1027.  
  1028. //
  1029. // Define macros to get the function or access mode out of a control code
  1030. //
  1031. #define CLUSCTL_GET_CONTROL_FUNCTION( ControlCode ) \
  1032.     ((ControlCode >> CLUSCTL_ACCESS_SHIFT) & CLUSCTL_CONTROL_CODE_MASK)
  1033.  
  1034. #define CLUSCTL_GET_ACCESS_MODE( ControlCode ) \
  1035.     ((ControlCode >> CLUSCTL_ACCESS_SHIFT) & CLUSCTL_ACCESS_MODE_MASK)
  1036.  
  1037. #define CLUSCTL_GET_CONTROL_OBJECT( ControlCode ) \
  1038.     ((ControlCode >> CLUSCTL_OBJECT_SHIFT) & CLUSCTL_OBJECT_MASK)
  1039.  
  1040. #ifndef _CLUSTER_API_TYPES_
  1041. //
  1042. // Cluster Control Codes for Resources
  1043. //
  1044. typedef enum CLUSCTL_RESOURCE_CODES {
  1045.  
  1046.     // External
  1047.     CLUSCTL_RESOURCE_UNKNOWN =
  1048.         CLUSCTL_RESOURCE_CODE( CLCTL_UNKNOWN ),
  1049.  
  1050.     CLUSCTL_RESOURCE_GET_CHARACTERISTICS =
  1051.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_CHARACTERISTICS ),
  1052.  
  1053.     CLUSCTL_RESOURCE_GET_FLAGS =
  1054.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_FLAGS ),
  1055.  
  1056.     CLUSCTL_RESOURCE_GET_CLASS_INFO =
  1057.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_CLASS_INFO ),
  1058.  
  1059.     CLUSCTL_RESOURCE_GET_REQUIRED_DEPENDENCIES =
  1060.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_REQUIRED_DEPENDENCIES ),
  1061.  
  1062.     CLUSCTL_RESOURCE_GET_NAME =
  1063.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_NAME ),
  1064.  
  1065.     CLUSCTL_RESOURCE_GET_ID =
  1066.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_ID ),
  1067.  
  1068.     CLUSCTL_RESOURCE_GET_RESOURCE_TYPE =
  1069.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_RESOURCE_TYPE ),
  1070.  
  1071.     CLUSCTL_RESOURCE_ENUM_COMMON_PROPERTIES =
  1072.         CLUSCTL_RESOURCE_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1073.  
  1074.     CLUSCTL_RESOURCE_GET_RO_COMMON_PROPERTIES =
  1075.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1076.  
  1077.     CLUSCTL_RESOURCE_GET_COMMON_PROPERTIES =
  1078.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1079.  
  1080.     CLUSCTL_RESOURCE_SET_COMMON_PROPERTIES =
  1081.         CLUSCTL_RESOURCE_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1082.  
  1083.     CLUSCTL_RESOURCE_VALIDATE_COMMON_PROPERTIES =
  1084.         CLUSCTL_RESOURCE_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1085.  
  1086.     CLUSCTL_RESOURCE_ENUM_PRIVATE_PROPERTIES =
  1087.         CLUSCTL_RESOURCE_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1088.  
  1089.     CLUSCTL_RESOURCE_GET_RO_PRIVATE_PROPERTIES =
  1090.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1091.  
  1092.     CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTIES =
  1093.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1094.  
  1095.     CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES =
  1096.         CLUSCTL_RESOURCE_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1097.  
  1098.     CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES =
  1099.         CLUSCTL_RESOURCE_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES ),
  1100.  
  1101.     CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT =
  1102.         CLUSCTL_RESOURCE_CODE( CLCTL_ADD_REGISTRY_CHECKPOINT ),
  1103.  
  1104.     CLUSCTL_RESOURCE_DELETE_REGISTRY_CHECKPOINT =
  1105.         CLUSCTL_RESOURCE_CODE( CLCTL_DELETE_REGISTRY_CHECKPOINT ),
  1106.  
  1107.     CLUSCTL_RESOURCE_GET_REGISTRY_CHECKPOINTS =
  1108.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_REGISTRY_CHECKPOINTS ),
  1109.  
  1110.     CLUSCTL_RESOURCE_GET_LOADBAL_PROCESS_LIST =
  1111.         CLUSCTL_RESOURCE_CODE( CLCTL_GET_LOADBAL_PROCESS_LIST ),
  1112.  
  1113.     CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO =
  1114.         CLUSCTL_RESOURCE_CODE( CLCTL_STORAGE_GET_DISK_INFO ),
  1115.  
  1116.     CLUSCTL_RESOURCE_STORAGE_IS_PATH_VALID =
  1117.         CLUSCTL_RESOURCE_CODE( CLCTL_STORAGE_IS_PATH_VALID ),
  1118.  
  1119.  
  1120.     // Internal
  1121.     CLUSCTL_RESOURCE_DELETE =
  1122.         CLUSCTL_RESOURCE_CODE( CLCTL_DELETE ),
  1123.  
  1124.     CLUSCTL_RESOURCE_INSTALL_NODE =
  1125.         CLUSCTL_RESOURCE_CODE( CLCTL_INSTALL_NODE ),
  1126.  
  1127.     CLUSCTL_RESOURCE_EVICT_NODE =
  1128.         CLUSCTL_RESOURCE_CODE( CLCTL_EVICT_NODE ),
  1129.  
  1130.     CLUSCTL_RESOURCE_ADD_DEPENDENCY =
  1131.         CLUSCTL_RESOURCE_CODE( CLCTL_ADD_DEPENDENCY ),
  1132.  
  1133.     CLUSCTL_RESOURCE_REMOVE_DEPENDENCY =
  1134.         CLUSCTL_RESOURCE_CODE( CLCTL_REMOVE_DEPENDENCY ),
  1135.  
  1136.     CLUSCTL_RESOURCE_ADD_OWNER =
  1137.         CLUSCTL_RESOURCE_CODE( CLCTL_ADD_OWNER ),
  1138.  
  1139.     CLUSCTL_RESOURCE_REMOVE_OWNER =
  1140.         CLUSCTL_RESOURCE_CODE( CLCTL_REMOVE_OWNER ),
  1141.  
  1142.     CLUSCTL_RESOURCE_SET_NAME =
  1143.         CLUSCTL_RESOURCE_CODE( CLCTL_SET_NAME ),
  1144.  
  1145.     CLUSCTL_RESOURCE_CLUSTER_NAME_CHANGED =
  1146.         CLUSCTL_RESOURCE_CODE( CLCTL_CLUSTER_NAME_CHANGED )
  1147.  
  1148. } CLUSCTL_RESOURCE_CODES;
  1149.  
  1150. //
  1151. // Cluster Control Codes for Resource Types
  1152. //
  1153. typedef enum CLUSCTL_RESOURCE_TYPE_CODES {
  1154.  
  1155.     // External
  1156.     CLUSCTL_RESOURCE_TYPE_UNKNOWN =
  1157.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_UNKNOWN ),
  1158.  
  1159.     CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS  =
  1160.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_CHARACTERISTICS ),
  1161.  
  1162.     CLUSCTL_RESOURCE_TYPE_GET_FLAGS =
  1163.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_FLAGS ),
  1164.  
  1165.     CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO =
  1166.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_CLASS_INFO ),
  1167.  
  1168.     CLUSCTL_RESOURCE_TYPE_GET_REQUIRED_DEPENDENCIES =
  1169.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_REQUIRED_DEPENDENCIES ),
  1170.  
  1171.     CLUSCTL_RESOURCE_TYPE_ENUM_COMMON_PROPERTIES =
  1172.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1173.  
  1174.     CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES =
  1175.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1176.  
  1177.     CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES =
  1178.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1179.  
  1180.     CLUSCTL_RESOURCE_TYPE_VALIDATE_COMMON_PROPERTIES =
  1181.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1182.  
  1183.     CLUSCTL_RESOURCE_TYPE_SET_COMMON_PROPERTIES =
  1184.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1185.  
  1186.     CLUSCTL_RESOURCE_TYPE_ENUM_PRIVATE_PROPERTIES =
  1187.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1188.  
  1189.     CLUSCTL_RESOURCE_TYPE_GET_RO_PRIVATE_PROPERTIES =
  1190.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1191.  
  1192.     CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES =
  1193.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1194.  
  1195.     CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES =
  1196.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1197.  
  1198.     CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES =
  1199.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES ),
  1200.  
  1201.     CLUSCTL_RESOURCE_TYPE_GET_REGISTRY_CHECKPOINTS =
  1202.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_GET_REGISTRY_CHECKPOINTS ),
  1203.  
  1204.     CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS =
  1205.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_STORAGE_GET_AVAILABLE_DISKS ),
  1206.  
  1207.  
  1208.     // Internal
  1209.     CLUSCTL_RESOURCE_TYPE_INSTALL_NODE =
  1210.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_INSTALL_NODE ),
  1211.  
  1212.     CLUSCTL_RESOURCE_TYPE_EVICT_NODE =
  1213.         CLUSCTL_RESOURCE_TYPE_CODE( CLCTL_EVICT_NODE )
  1214.  
  1215. } CLUSCTL_RESOURCE_TYPE_CODES;
  1216.  
  1217. //
  1218. // Cluster Control Codes for Groups
  1219. //
  1220. typedef enum CLUSCTL_GROUP_CODES {
  1221.  
  1222.     // External
  1223.     CLUSCTL_GROUP_UNKNOWN =
  1224.         CLUSCTL_GROUP_CODE( CLCTL_UNKNOWN ),
  1225.  
  1226.     CLUSCTL_GROUP_GET_CHARACTERISTICS =
  1227.         CLUSCTL_GROUP_CODE( CLCTL_GET_CHARACTERISTICS ),
  1228.  
  1229.     CLUSCTL_GROUP_GET_FLAGS =
  1230.         CLUSCTL_GROUP_CODE( CLCTL_GET_FLAGS ),
  1231.  
  1232.     CLUSCTL_GROUP_GET_NAME =
  1233.         CLUSCTL_GROUP_CODE( CLCTL_GET_NAME ),
  1234.  
  1235.     CLUSCTL_GROUP_GET_ID =
  1236.         CLUSCTL_GROUP_CODE( CLCTL_GET_ID ),
  1237.  
  1238.     CLUSCTL_GROUP_ENUM_COMMON_PROPERTIES =
  1239.         CLUSCTL_GROUP_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1240.  
  1241.     CLUSCTL_GROUP_GET_RO_COMMON_PROPERTIES =
  1242.         CLUSCTL_GROUP_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1243.  
  1244.     CLUSCTL_GROUP_GET_COMMON_PROPERTIES =
  1245.         CLUSCTL_GROUP_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1246.  
  1247.     CLUSCTL_GROUP_SET_COMMON_PROPERTIES =
  1248.         CLUSCTL_GROUP_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1249.  
  1250.     CLUSCTL_GROUP_VALIDATE_COMMON_PROPERTIES =
  1251.         CLUSCTL_GROUP_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1252.  
  1253.     CLUSCTL_GROUP_ENUM_PRIVATE_PROPERTIES =
  1254.         CLUSCTL_GROUP_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1255.  
  1256.     CLUSCTL_GROUP_GET_RO_PRIVATE_PROPERTIES =
  1257.         CLUSCTL_GROUP_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1258.  
  1259.     CLUSCTL_GROUP_GET_PRIVATE_PROPERTIES =
  1260.         CLUSCTL_GROUP_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1261.  
  1262.     CLUSCTL_GROUP_SET_PRIVATE_PROPERTIES =
  1263.         CLUSCTL_GROUP_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1264.  
  1265.     CLUSCTL_GROUP_VALIDATE_PRIVATE_PROPERTIES =
  1266.         CLUSCTL_GROUP_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES )
  1267.  
  1268. } CLUSCTL_GROUP_CODES;
  1269.  
  1270. //
  1271. // Cluster Control Codes for Nodes
  1272. //
  1273. typedef enum CLUSCTL_NODE_CODES {
  1274.  
  1275.     // External
  1276.     CLUSCTL_NODE_UNKNOWN =
  1277.         CLUSCTL_NODE_CODE( CLCTL_UNKNOWN ),
  1278.  
  1279.     CLUSCTL_NODE_GET_CHARACTERISTICS =
  1280.         CLUSCTL_NODE_CODE( CLCTL_GET_CHARACTERISTICS ),
  1281.  
  1282.     CLUSCTL_NODE_GET_FLAGS =
  1283.         CLUSCTL_NODE_CODE( CLCTL_GET_FLAGS ),
  1284.  
  1285.     CLUSCTL_NODE_GET_NAME =
  1286.         CLUSCTL_NODE_CODE( CLCTL_GET_NAME ),
  1287.  
  1288.     CLUSCTL_NODE_GET_ID =
  1289.         CLUSCTL_NODE_CODE( CLCTL_GET_ID ),
  1290.  
  1291.     CLUSCTL_NODE_ENUM_COMMON_PROPERTIES =
  1292.         CLUSCTL_NODE_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1293.  
  1294.     CLUSCTL_NODE_GET_RO_COMMON_PROPERTIES =
  1295.         CLUSCTL_NODE_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1296.  
  1297.     CLUSCTL_NODE_GET_COMMON_PROPERTIES =
  1298.         CLUSCTL_NODE_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1299.  
  1300.     CLUSCTL_NODE_SET_COMMON_PROPERTIES =
  1301.         CLUSCTL_NODE_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1302.  
  1303.     CLUSCTL_NODE_VALIDATE_COMMON_PROPERTIES =
  1304.         CLUSCTL_NODE_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1305.  
  1306.     CLUSCTL_NODE_ENUM_PRIVATE_PROPERTIES =
  1307.         CLUSCTL_NODE_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1308.  
  1309.     CLUSCTL_NODE_GET_RO_PRIVATE_PROPERTIES =
  1310.         CLUSCTL_NODE_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1311.  
  1312.     CLUSCTL_NODE_GET_PRIVATE_PROPERTIES =
  1313.         CLUSCTL_NODE_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1314.  
  1315.     CLUSCTL_NODE_SET_PRIVATE_PROPERTIES =
  1316.         CLUSCTL_NODE_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1317.  
  1318.     CLUSCTL_NODE_VALIDATE_PRIVATE_PROPERTIES =
  1319.         CLUSCTL_NODE_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES )
  1320.  
  1321. } CLUSCTL_NODE_CODES;
  1322.  
  1323. //
  1324. // Cluster Control Codes for Networks
  1325. //
  1326. typedef enum CLUSCTL_NETWORK_CODES {
  1327.  
  1328.     // External
  1329.     CLUSCTL_NETWORK_UNKNOWN =
  1330.         CLUSCTL_NETWORK_CODE( CLCTL_UNKNOWN ),
  1331.  
  1332.     CLUSCTL_NETWORK_GET_CHARACTERISTICS =
  1333.         CLUSCTL_NETWORK_CODE( CLCTL_GET_CHARACTERISTICS ),
  1334.  
  1335.     CLUSCTL_NETWORK_GET_FLAGS =
  1336.         CLUSCTL_NETWORK_CODE( CLCTL_GET_FLAGS ),
  1337.  
  1338.     CLUSCTL_NETWORK_GET_NAME =
  1339.         CLUSCTL_NETWORK_CODE( CLCTL_GET_NAME ),
  1340.  
  1341.     CLUSCTL_NETWORK_GET_ID =
  1342.         CLUSCTL_NETWORK_CODE( CLCTL_GET_ID ),
  1343.  
  1344.     CLUSCTL_NETWORK_ENUM_COMMON_PROPERTIES =
  1345.         CLUSCTL_NETWORK_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1346.  
  1347.     CLUSCTL_NETWORK_GET_RO_COMMON_PROPERTIES =
  1348.         CLUSCTL_NETWORK_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1349.  
  1350.     CLUSCTL_NETWORK_GET_COMMON_PROPERTIES =
  1351.         CLUSCTL_NETWORK_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1352.  
  1353.     CLUSCTL_NETWORK_SET_COMMON_PROPERTIES =
  1354.         CLUSCTL_NETWORK_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1355.  
  1356.     CLUSCTL_NETWORK_VALIDATE_COMMON_PROPERTIES =
  1357.         CLUSCTL_NETWORK_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1358.  
  1359.     CLUSCTL_NETWORK_ENUM_PRIVATE_PROPERTIES =
  1360.         CLUSCTL_NETWORK_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1361.  
  1362.     CLUSCTL_NETWORK_GET_RO_PRIVATE_PROPERTIES =
  1363.         CLUSCTL_NETWORK_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1364.  
  1365.     CLUSCTL_NETWORK_GET_PRIVATE_PROPERTIES =
  1366.         CLUSCTL_NETWORK_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1367.  
  1368.     CLUSCTL_NETWORK_SET_PRIVATE_PROPERTIES =
  1369.         CLUSCTL_NETWORK_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1370.  
  1371.     CLUSCTL_NETWORK_VALIDATE_PRIVATE_PROPERTIES =
  1372.         CLUSCTL_NETWORK_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES )
  1373.  
  1374. } CLUSCTL_NETWORK_CODES;
  1375.  
  1376. //
  1377. // Cluster Control Codes for Network Interfaces
  1378. //
  1379. typedef enum CLUSCTL_NETINTERFACE_CODES {
  1380.  
  1381.     // External
  1382.     CLUSCTL_NETINTERFACE_UNKNOWN =
  1383.         CLUSCTL_NETINTERFACE_CODE( CLCTL_UNKNOWN ),
  1384.  
  1385.     CLUSCTL_NETINTERFACE_GET_CHARACTERISTICS =
  1386.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_CHARACTERISTICS ),
  1387.  
  1388.     CLUSCTL_NETINTERFACE_GET_FLAGS =
  1389.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_FLAGS ),
  1390.  
  1391.     CLUSCTL_NETINTERFACE_GET_NAME =
  1392.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_NAME ),
  1393.  
  1394.     CLUSCTL_NETINTERFACE_GET_ID =
  1395.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_ID ),
  1396.  
  1397.     CLUSCTL_NETINTERFACE_GET_NODE =
  1398.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_NODE ),
  1399.  
  1400.     CLUSCTL_NETINTERFACE_GET_NETWORK =
  1401.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_NETWORK ),
  1402.  
  1403.     CLUSCTL_NETINTERFACE_ENUM_COMMON_PROPERTIES =
  1404.         CLUSCTL_NETINTERFACE_CODE( CLCTL_ENUM_COMMON_PROPERTIES ),
  1405.  
  1406.     CLUSCTL_NETINTERFACE_GET_RO_COMMON_PROPERTIES =
  1407.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_RO_COMMON_PROPERTIES ),
  1408.  
  1409.     CLUSCTL_NETINTERFACE_GET_COMMON_PROPERTIES =
  1410.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_COMMON_PROPERTIES ),
  1411.  
  1412.     CLUSCTL_NETINTERFACE_SET_COMMON_PROPERTIES =
  1413.         CLUSCTL_NETINTERFACE_CODE( CLCTL_SET_COMMON_PROPERTIES ),
  1414.  
  1415.     CLUSCTL_NETINTERFACE_VALIDATE_COMMON_PROPERTIES =
  1416.         CLUSCTL_NETINTERFACE_CODE( CLCTL_VALIDATE_COMMON_PROPERTIES ),
  1417.  
  1418.     CLUSCTL_NETINTERFACE_ENUM_PRIVATE_PROPERTIES =
  1419.         CLUSCTL_NETINTERFACE_CODE( CLCTL_ENUM_PRIVATE_PROPERTIES ),
  1420.  
  1421.     CLUSCTL_NETINTERFACE_GET_RO_PRIVATE_PROPERTIES =
  1422.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_RO_PRIVATE_PROPERTIES ),
  1423.  
  1424.     CLUSCTL_NETINTERFACE_GET_PRIVATE_PROPERTIES =
  1425.         CLUSCTL_NETINTERFACE_CODE( CLCTL_GET_PRIVATE_PROPERTIES ),
  1426.  
  1427.     CLUSCTL_NETINTERFACE_SET_PRIVATE_PROPERTIES =
  1428.         CLUSCTL_NETINTERFACE_CODE( CLCTL_SET_PRIVATE_PROPERTIES ),
  1429.  
  1430.     CLUSCTL_NETINTERFACE_VALIDATE_PRIVATE_PROPERTIES =
  1431.         CLUSCTL_NETINTERFACE_CODE( CLCTL_VALIDATE_PRIVATE_PROPERTIES )
  1432.  
  1433. } CLUSCTL_NETINTERFACE_CODES;
  1434.  
  1435. //
  1436. // Cluster Resource Class types
  1437. //
  1438. typedef enum CLUSTER_RESOURCE_CLASS {
  1439.     CLUS_RESCLASS_UNKNOWN = 0,
  1440.     CLUS_RESCLASS_STORAGE,
  1441.     CLUS_RESCLASS_USER = 32768
  1442. } CLUSTER_RESOURCE_CLASS;
  1443.  
  1444. //
  1445. // Define Resource SubClass bits
  1446. //
  1447. typedef enum CLUS_RESSUBCLASS {
  1448.     CLUS_RESSUBCLASS_SHARED = 0x80000000
  1449. } CLUS_RESSUBCLASS;
  1450.  
  1451. //
  1452. // Cluster Characteristics
  1453. //
  1454. typedef enum CLUS_CHARACTERISTICS {
  1455.     CLUS_CHAR_UNKNOWN                   = 0x00000000,
  1456.     CLUS_CHAR_QUORUM                    = 0x00000001,
  1457.     CLUS_CHAR_DELETE_REQUIRES_ALL_NODES = 0x00000002
  1458. } CLUS_CHARACTERISTICS;
  1459.  
  1460. //
  1461. // Cluster Flags
  1462. //
  1463. typedef enum CLUS_FLAGS {
  1464.     CLUS_FLAG_CORE          = 0x00000001
  1465. }  CLUS_FLAGS;
  1466.  
  1467.  
  1468. //
  1469. // Cluster Resource Property Helper Structures
  1470. //
  1471.  
  1472. #ifndef MIDL_PASS
  1473.  
  1474. // Property syntax.  Used for property names and values.
  1475. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1476. typedef union CLUSPROP_SYNTAX {
  1477.     DWORD dw;
  1478.     struct {
  1479.         WORD wFormat;
  1480.         WORD wType;
  1481.     };
  1482. } CLUSPROP_SYNTAX, *PCLUSPROP_SYNTAX;
  1483. #pragma warning( default : 4201 )
  1484.  
  1485. // Property value.
  1486. typedef struct CLUSPROP_VALUE {
  1487.     CLUSPROP_SYNTAX Syntax;
  1488.     DWORD           cbLength;
  1489. } CLUSPROP_VALUE, *PCLUSPROP_VALUE;
  1490.  
  1491. // Binary property value.
  1492. #pragma warning( disable : 4200 ) // nonstandard extension used : zero-sized array in struct/union
  1493. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1494. #ifdef __cplusplus
  1495. typedef struct CLUSPROP_BINARY : public CLUSPROP_VALUE {
  1496. #else
  1497. typedef struct CLUSPROP_BINARY {
  1498.     CLUSPROP_VALUE;
  1499. #endif
  1500.     BYTE            rgb[];
  1501. } CLUSPROP_BINARY, *PCLUSPROP_BINARY;
  1502. #pragma warning( default : 4200 )
  1503. #pragma warning( default : 4201 )
  1504.  
  1505. // DWORD property value.
  1506. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1507. #ifdef __cplusplus
  1508. typedef struct CLUSPROP_DWORD : public CLUSPROP_VALUE {
  1509. #else
  1510. typedef struct CLUSPROP_DWORD {
  1511.     CLUSPROP_VALUE;
  1512. #endif
  1513.     DWORD           dw;
  1514. } CLUSPROP_DWORD, *PCLUSPROP_DWORD;
  1515. #pragma warning( default : 4201 )
  1516.  
  1517. // String and multiple string property value.
  1518. #pragma warning( disable : 4200 ) // nonstandard extension used : zero-sized array in struct/union
  1519. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1520. #ifdef __cplusplus
  1521. typedef struct CLUSPROP_SZ : public CLUSPROP_VALUE {
  1522. #else
  1523. typedef struct CLUSPROP_SZ {
  1524.     CLUSPROP_VALUE;
  1525. #endif
  1526.     WCHAR           sz[];
  1527. } CLUSPROP_SZ, *PCLUSPROP_SZ;
  1528. #pragma warning( default : 4200 )
  1529. #pragma warning( default : 4201 )
  1530.  
  1531. // Multiple string property value.
  1532. typedef CLUSPROP_SZ CLUSPROP_MULTI_SZ, *PCLUSPROP_MULTI_SZ;
  1533.  
  1534. // Property name.
  1535. typedef CLUSPROP_SZ CLUSPROP_PROPERTY_NAME, *PCLUSPROP_PROPERTY_NAME;
  1536.  
  1537. // Large Integer property value.
  1538. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1539. #ifdef __cplusplus
  1540. typedef struct CLUSPROP_ULARGE_INTEGER
  1541.     : public CLUSPROP_VALUE {
  1542. #else
  1543. typedef struct CLUSPROP_ULARGE_INTEGER {
  1544.     CLUSPROP_VALUE;
  1545. #endif
  1546.     ULARGE_INTEGER li;
  1547. } CLUSPROP_LARGE_INTEGER, *PCLUSPROP_ULARGE_INTEGER;
  1548. #pragma warning( default : 4201 )
  1549.  
  1550. // Resource class info returned by CLCTL_GET_CLASS_INFO control functions.
  1551. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1552. typedef struct CLUS_RESOURCE_CLASS_INFO {
  1553.     union {
  1554.         struct {
  1555.             union {
  1556.                 DWORD                   dw;
  1557.                 CLUSTER_RESOURCE_CLASS  rc;
  1558.                 };
  1559.             DWORD           SubClass;
  1560.         };
  1561.         ULARGE_INTEGER      li;
  1562.     };
  1563. } CLUS_RESOURCE_CLASS_INFO, *PCLUS_RESOURCE_CLASS_INFO;
  1564. #pragma warning( default : 4201 )
  1565.  
  1566. // Resource class property value.
  1567. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1568. #ifdef __cplusplus
  1569. typedef struct CLUSPROP_RESOURCE_CLASS
  1570.     : public CLUSPROP_VALUE {
  1571. #else
  1572. typedef struct CLUSPROP_RESOURCE_CLASS {
  1573.     CLUSPROP_VALUE;
  1574. #endif
  1575.     CLUSTER_RESOURCE_CLASS rc;
  1576. } CLUSPROP_RESOURCE_CLASS, *PCLUSPROP_RESOURCE_CLASS;
  1577. #pragma warning( default : 4201 )
  1578.  
  1579. // Resource class info property value.
  1580. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1581. #ifdef __cplusplus
  1582. typedef struct CLUSPROP_RESOURCE_CLASS_INFO
  1583.     : public CLUSPROP_VALUE
  1584.     , public CLUS_RESOURCE_CLASS_INFO {
  1585. #else
  1586. typedef struct CLUSPROP_RESOURCE_CLASS_INFO {
  1587.     CLUSPROP_VALUE;
  1588.     CLUS_RESOURCE_CLASS_INFO;
  1589. #endif
  1590. } CLUSPROP_RESOURCE_CLASS_INFO, *PCLUSPROP_RESOURCE_CLASS_INFO;
  1591. #pragma warning( default : 4201 )
  1592.  
  1593. // One entry from list returned by CLCTL_GET_REQUIRED_DEPENDENCIES control functions.
  1594. typedef union CLUSPROP_REQUIRED_DEPENDENCY {
  1595.     CLUSPROP_VALUE          Value;
  1596.     CLUSPROP_RESOURCE_CLASS ResClass;
  1597.     CLUSPROP_SZ             ResTypeName;
  1598. } CLUSPROP_REQUIRED_DEPENDENCY, *PCLUSPROP_REQUIRED_DEPENDENCY;
  1599.  
  1600. typedef CLUSPROP_DWORD CLUSPROP_DISK_NUMBER, *PCLUSPROP_DISK_NUMBER;
  1601.  
  1602. #endif // MIDL_PASS
  1603. #endif // _CLUSTER_API_TYPES_
  1604.  
  1605. //#ifdef MIDL_PASS
  1606. //#ifndef MAX_PATH
  1607. //#define MAX_PATH 260
  1608. //#endif
  1609. //#endif // if MIDL_PASS
  1610.  
  1611. #ifndef _CLUSTER_API_TYPES_
  1612.  
  1613. // Disk partition information flags.
  1614. typedef enum CLUSPROP_PIFLAGS {
  1615.     CLUSPROP_PIFLAG_STICKY      = 0x00000001,
  1616.     CLUSPROP_PIFLAG_REMOVABLE   = 0x00000002,
  1617.     CLUSPROP_PIFLAG_USABLE      = 0x00000004
  1618. } CLUSPROP_PIFLAGS;
  1619.  
  1620. #ifndef MIDL_PASS
  1621.  
  1622. // Disk partition information.
  1623. typedef struct CLUS_PARTITION_INFO {
  1624.     DWORD           dwFlags;
  1625.     WCHAR           szDeviceName[MAX_PATH];
  1626.     WCHAR           szVolumeLabel[MAX_PATH];
  1627.     DWORD           dwSerialNumber;
  1628.     DWORD           rgdwMaximumComponentLength;
  1629.     DWORD           dwFileSystemFlags;
  1630.     WCHAR           szFileSystem[32];
  1631. } CLUS_PARTITION_INFO, *PCLUS_PARTITION_INFO;
  1632.  
  1633. // Disk partition information property value.
  1634. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1635. #ifdef __cplusplus
  1636. typedef struct CLUSPROP_PARTITION_INFO
  1637.     : public CLUSPROP_VALUE
  1638.     , public CLUS_PARTITION_INFO {
  1639. #else
  1640. typedef struct CLUSPROP_PARTITION_INFO {
  1641.     CLUSPROP_VALUE;
  1642.     CLUS_PARTITION_INFO;
  1643. #endif
  1644. } CLUSPROP_PARTITION_INFO, *PCLUSPROP_PARTITION_INFO;
  1645. #pragma warning( default : 4201 )
  1646.  
  1647. //
  1648. // FT set information.
  1649. //
  1650. typedef struct CLUS_FTSET_INFO {
  1651.     DWORD           dwRootSignature;
  1652.     DWORD           dwFtType;
  1653. } CLUS_FTSET_INFO, *PCLUS_FTSET_INFO;
  1654.  
  1655. // Disk partition information property value.
  1656. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1657. #ifdef __cplusplus
  1658. typedef struct CLUSPROP_FTSET_INFO
  1659.     : public CLUSPROP_VALUE
  1660.     , public CLUS_FTSET_INFO {
  1661. #else
  1662. typedef struct CLUSPROP_FTSET_INFO {
  1663.     CLUSPROP_VALUE;
  1664.     CLUS_FTSET_INFO;
  1665. #endif
  1666. } CLUSPROP_FTSET_INFO, *PCLUSPROP_FTSET_INFO;
  1667. #pragma warning( default : 4201 )
  1668.  
  1669. // Disk Signature property value.
  1670. typedef CLUSPROP_DWORD CLUSPROP_DISK_SIGNATURE, *PCLUSPROP_DISK_SIGNATURE;
  1671.  
  1672. // SCSI Address.
  1673. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1674. typedef struct CLUS_SCSI_ADDRESS {
  1675.     union {
  1676.         struct {
  1677.             UCHAR PortNumber;
  1678.             UCHAR PathId;
  1679.             UCHAR TargetId;
  1680.             UCHAR Lun;
  1681.         };
  1682.         DWORD   dw;
  1683.     };
  1684. } CLUS_SCSI_ADDRESS, *PCLUS_SCSI_ADDRESS;
  1685. #pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
  1686.  
  1687. // SCSI Address property value.
  1688. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  1689. #ifdef __cplusplus
  1690. typedef struct CLUSPROP_SCSI_ADDRESS
  1691.     : public CLUSPROP_VALUE
  1692.     , public CLUS_SCSI_ADDRESS {
  1693. #else
  1694. typedef struct CLUSPROP_SCSI_ADDRESS {
  1695.     CLUSPROP_VALUE;
  1696.     CLUS_SCSI_ADDRESS;
  1697. #endif
  1698. } CLUSPROP_SCSI_ADDRESS, *PCLUSPROP_SCSI_ADDRESS;
  1699. #pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
  1700.  
  1701.  
  1702. // Beginning of a property list.
  1703. typedef struct CLUSPROP_LIST {
  1704.     DWORD                   nPropertyCount;
  1705.     CLUSPROP_PROPERTY_NAME  PropertyName;
  1706. } CLUSPROP_LIST, *PCLUSPROP_LIST;
  1707.  
  1708. // Helper for building or parsing a property list buffer.
  1709. typedef union CLUSPROP_BUFFER_HELPER {
  1710.     BYTE *                          pb;
  1711.     WORD *                          pw;
  1712.     DWORD *                         pdw;
  1713.     LPWSTR                          psz;
  1714.     PCLUSPROP_LIST                  pList;
  1715.     PCLUSPROP_SYNTAX                pSyntax;
  1716.     PCLUSPROP_PROPERTY_NAME         pName;
  1717.     PCLUSPROP_VALUE                 pValue;
  1718.     PCLUSPROP_BINARY                pBinaryValue;
  1719.     PCLUSPROP_DWORD                 pDwordValue;
  1720.     PCLUSPROP_ULARGE_INTEGER        pULargeIntegerValue;
  1721.     PCLUSPROP_SZ                    pStringValue;
  1722.     PCLUSPROP_MULTI_SZ              pMultiSzValue;
  1723.     PCLUSPROP_RESOURCE_CLASS        pResourceClassValue;
  1724.     PCLUSPROP_RESOURCE_CLASS_INFO   pResourceClassInfoValue;
  1725.     PCLUSPROP_DISK_SIGNATURE        pDiskSignatureValue;
  1726.     PCLUSPROP_SCSI_ADDRESS          pScsiAddressValue;
  1727.     PCLUSPROP_DISK_NUMBER           pDiskNumberValue;
  1728.     PCLUSPROP_PARTITION_INFO        pPartitionInfoValue;
  1729.     PCLUSPROP_REQUIRED_DEPENDENCY   pRequiredDependencyValue;
  1730. } CLUSPROP_BUFFER_HELPER, *PCLUSPROP_BUFFER_HELPER;
  1731.  
  1732. #endif // MIDL_PASS
  1733.  
  1734. #endif // _CLUSTER_API_TYPES_
  1735.  
  1736. // Macro for aligning CLUSPROP buffers on a DWORD boundary.
  1737. #define ALIGN_CLUSPROP( count ) ((count + 3) & ~3)
  1738.  
  1739. // Macros for declaring array format values
  1740. #define CLUSPROP_BINARY_DECLARE( name, cb ) \
  1741.     struct {                                \
  1742.         CLUSPROP_SYNTAX Syntax;             \
  1743.         DWORD           cbLength;           \
  1744.         BYTE            rgb[(cb + 3) & ~3]; \
  1745.     } name
  1746.  
  1747. #define CLUSPROP_SZ_DECLARE( name, cch )    \
  1748.     struct {                                \
  1749.         CLUSPROP_SYNTAX Syntax;             \
  1750.         DWORD           cbLength;           \
  1751.         WCHAR           sz[(cch + 1) & ~1]; \
  1752.     } name
  1753.  
  1754. #define CLUSPROP_PROPERTY_NAME_DECLARE( name, cch ) CLUSPROP_SZ_DECLARE( name, cch )
  1755.  
  1756.  
  1757.  
  1758. //
  1759. // Cluster resource property enumeration.
  1760. //
  1761.  
  1762. #ifndef _CLUSTER_API_TYPES_
  1763. //
  1764. // Define enumerable types
  1765. //
  1766. typedef enum CLUSTER_RESOURCE_ENUM {
  1767.     CLUSTER_RESOURCE_ENUM_DEPENDS   = 0x00000001,
  1768.     CLUSTER_RESOURCE_ENUM_PROVIDES  = 0x00000002,
  1769.     CLUSTER_RESOURCE_ENUM_NODES     = 0x00000004,
  1770.  
  1771.     CLUSTER_RESOURCE_ENUM_ALL       = (CLUSTER_RESOURCE_ENUM_DEPENDS  |
  1772.                                          CLUSTER_RESOURCE_ENUM_PROVIDES |
  1773.                                          CLUSTER_RESOURCE_ENUM_NODES)
  1774. } CLUSTER_RESOURCE_ENUM;
  1775.  
  1776. #endif // _CLUSTER_API_TYPES_
  1777.  
  1778. #ifndef MIDL_PASS
  1779. HRESENUM
  1780. WINAPI
  1781. ClusterResourceOpenEnum(
  1782.     IN HRESOURCE hResource,
  1783.     IN DWORD dwType
  1784.     );
  1785.  
  1786. DWORD
  1787. WINAPI
  1788. ClusterResourceEnum(
  1789.     IN HRESENUM hResEnum,
  1790.     IN DWORD dwIndex,
  1791.     OUT LPDWORD lpdwType,
  1792.     OUT LPWSTR lpszName,
  1793.     IN OUT LPDWORD lpcbName
  1794.     );
  1795.  
  1796. DWORD
  1797. WINAPI
  1798. ClusterResourceCloseEnum(
  1799.     IN HRESENUM hResEnum
  1800.     );
  1801.  
  1802. DWORD
  1803. WINAPI
  1804. CreateClusterResourceType(
  1805.     IN HCLUSTER hCluster,
  1806.     IN LPCWSTR lpszResourceTypeName,
  1807.     IN LPCWSTR lpszDisplayName,
  1808.     IN LPCWSTR lpszResourceTypeDll,
  1809.     IN DWORD dwLooksAlivePollInterval,
  1810.     IN DWORD dwIsAlivePollInterval
  1811.     );
  1812.  
  1813. DWORD
  1814. WINAPI
  1815. DeleteClusterResourceType(
  1816.     IN HCLUSTER hCluster,
  1817.     IN LPCWSTR lpszResourceTypeName
  1818.     );
  1819. #endif // MIDL_PASS
  1820.  
  1821.  
  1822.  
  1823. //
  1824. // Network-related structures and types.
  1825. //
  1826.  
  1827. #ifndef _CLUSTER_API_TYPES_
  1828. //
  1829. // Define enumerable group types
  1830. //
  1831. typedef enum CLUSTER_NETWORK_ENUM {
  1832.     CLUSTER_NETWORK_ENUM_NETINTERFACES  = 0x00000001,
  1833.  
  1834.     CLUSTER_NETWORK_ENUM_ALL            = CLUSTER_NETWORK_ENUM_NETINTERFACES
  1835. } CLUSTER_NETWORK_ENUM;
  1836.  
  1837. typedef enum CLUSTER_NETWORK_STATE {
  1838.     ClusterNetworkStateUnknown = -1,
  1839.     ClusterNetworkUnavailable,
  1840.     ClusterNetworkDown,
  1841.     ClusterNetworkPartitioned,
  1842.     ClusterNetworkUp
  1843. } CLUSTER_NETWORK_STATE;
  1844.  
  1845. // Role the network plays in the cluster.  This is a bitmask.
  1846. typedef enum CLUSTER_NETWORK_ROLE {
  1847.     ClusterNetworkRoleNone              = 0,
  1848.     ClusterNetworkRoleInternalUse       = 0x00000001,
  1849.     ClusterNetworkRoleClientAccess      = 0x00000002,
  1850.     ClusterNetworkRoleInternalAndClient = 0x00000003
  1851. } CLUSTER_NETWORK_ROLE;
  1852.  
  1853. #endif // _CLUSTER_API_TYPES_
  1854.  
  1855. //
  1856. // Interfaces for managing the networks of a cluster.
  1857. //
  1858.  
  1859. #ifndef MIDL_PASS
  1860. HNETWORK
  1861. WINAPI
  1862. OpenClusterNetwork(
  1863.     IN HCLUSTER hCluster,
  1864.     IN LPCWSTR lpszNetworkName
  1865.     );
  1866.  
  1867. BOOL
  1868. WINAPI
  1869. CloseClusterNetwork(
  1870.     IN HNETWORK hNetwork
  1871.     );
  1872.  
  1873. HNETWORKENUM
  1874. WINAPI
  1875. ClusterNetworkOpenEnum(
  1876.     IN HNETWORK hNetwork,
  1877.     IN DWORD dwType
  1878.     );
  1879.  
  1880. DWORD
  1881. WINAPI
  1882. ClusterNetworkEnum(
  1883.     IN HNETWORKENUM hNetworkEnum,
  1884.     IN DWORD dwIndex,
  1885.     OUT LPDWORD lpdwType,
  1886.     OUT LPWSTR lpszName,
  1887.     IN OUT LPDWORD lpcbName
  1888.     );
  1889.  
  1890. DWORD
  1891. WINAPI
  1892. ClusterNetworkCloseEnum(
  1893.     IN HNETWORKENUM hNetworkEnum
  1894.     );
  1895.  
  1896. CLUSTER_NETWORK_STATE
  1897. WINAPI
  1898. GetClusterNetworkState(
  1899.     IN HNETWORK hNetwork
  1900.     );
  1901.  
  1902. DWORD
  1903. WINAPI
  1904. SetClusterNetworkName(
  1905.     IN HNETWORK hNetwork,
  1906.     IN LPCWSTR lpszName
  1907.     );
  1908.  
  1909. DWORD
  1910. WINAPI
  1911. GetClusterNetworkId(
  1912.     IN HNETWORK hNetwork,
  1913.     OUT LPWSTR lpszNetworkId,
  1914.     IN OUT LPDWORD lpcchNetworkId
  1915.     );
  1916.  
  1917. DWORD
  1918. WINAPI
  1919. ClusterNetworkControl(
  1920.     IN HNETWORK hNetwork,
  1921.     IN OPTIONAL HNODE hHostNode,
  1922.     IN DWORD dwControlCode,
  1923.     IN LPVOID lpInBuffer,
  1924.     IN DWORD cbInBufferSize,
  1925.     OUT LPVOID lpOutBuffer,
  1926.     IN DWORD cbOutBufferSize,
  1927.     OUT LPDWORD lpcbBytesReturned
  1928.     );
  1929. #endif // MIDL_PASS
  1930.  
  1931.  
  1932. #ifndef _CLUSTER_API_TYPES_
  1933. //
  1934. // Network interface-related structures and types.
  1935. //
  1936. typedef enum CLUSTER_NETINTERFACE_STATE {
  1937.     ClusterNetInterfaceStateUnknown = -1,
  1938.     ClusterNetInterfaceUnavailable,
  1939.     ClusterNetInterfaceFailed,
  1940.     ClusterNetInterfaceUnreachable,
  1941.     ClusterNetInterfaceUp
  1942. } CLUSTER_NETINTERFACE_STATE;
  1943.  
  1944. #endif // _CLUSTER_API_TYPES_
  1945.  
  1946. //
  1947. // Interfaces for managing the network interfaces of a cluster.
  1948. //
  1949.  
  1950. #ifndef MIDL_PASS
  1951. HNETINTERFACE
  1952. WINAPI
  1953. OpenClusterNetInterface(
  1954.     IN HCLUSTER hCluster,
  1955.     IN LPCWSTR lpszInterfaceName
  1956.     );
  1957.  
  1958. DWORD
  1959. WINAPI
  1960. GetClusterNetInterface(
  1961.     IN HCLUSTER hCluster,
  1962.     IN LPCWSTR lpszNodeName,
  1963.     IN LPCWSTR lpszNetworkName,
  1964.     OUT LPWSTR lpszInterfaceName,
  1965.     IN OUT LPDWORD lpcbInterfaceName
  1966.     );
  1967.  
  1968. BOOL
  1969. WINAPI
  1970. CloseClusterNetInterface(
  1971.     IN HNETINTERFACE hNetInterface
  1972.     );
  1973.  
  1974. CLUSTER_NETINTERFACE_STATE
  1975. WINAPI
  1976. GetClusterNetInterfaceState(
  1977.     IN HNETINTERFACE hNetInterface
  1978.     );
  1979.  
  1980. DWORD
  1981. WINAPI
  1982. ClusterNetInterfaceControl(
  1983.     IN HNETINTERFACE hNetInterface,
  1984.     IN OPTIONAL HNODE hHostNode,
  1985.     IN DWORD dwControlCode,
  1986.     IN LPVOID lpInBuffer,
  1987.     IN DWORD cbInBufferSize,
  1988.     OUT LPVOID lpOutBuffer,
  1989.     IN DWORD cbOutBufferSize,
  1990.     OUT LPDWORD lpcbBytesReturned
  1991.     );
  1992. #endif // MIDL_PASS
  1993.  
  1994.  
  1995. //
  1996. // Cluster registry update and access routines
  1997. //
  1998.  
  1999. #ifndef MIDL_PASS
  2000. HKEY
  2001. WINAPI
  2002. GetClusterKey(
  2003.     IN HCLUSTER hCluster,
  2004.     IN REGSAM samDesired
  2005.     );
  2006.  
  2007. HKEY
  2008. WINAPI
  2009. GetClusterGroupKey(
  2010.     IN HGROUP hGroup,
  2011.     IN REGSAM samDesired
  2012.     );
  2013.  
  2014. HKEY
  2015. WINAPI
  2016. GetClusterResourceKey(
  2017.     IN HRESOURCE hResource,
  2018.     IN REGSAM samDesired
  2019.     );
  2020.  
  2021. HKEY
  2022. WINAPI
  2023. GetClusterNodeKey(
  2024.     IN HNODE hNode,
  2025.     IN REGSAM samDesired
  2026.     );
  2027.  
  2028. HKEY
  2029. WINAPI
  2030. GetClusterNetworkKey(
  2031.     IN HNETWORK hNetwork,
  2032.     IN REGSAM samDesired
  2033.     );
  2034.  
  2035. HKEY
  2036. WINAPI
  2037. GetClusterNetInterfaceKey(
  2038.     IN HNETINTERFACE hNetInterface,
  2039.     IN REGSAM samDesired
  2040.     );
  2041.  
  2042. LONG
  2043. WINAPI
  2044. ClusterRegCreateKey(
  2045.     IN HKEY hKey,
  2046.     IN LPCWSTR lpszSubKey,
  2047.     IN DWORD dwOptions,
  2048.     IN REGSAM samDesired,
  2049.     IN LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  2050.     OUT PHKEY phkResult,
  2051.     OUT OPTIONAL LPDWORD lpdwDisposition
  2052.     );
  2053.  
  2054. LONG
  2055. WINAPI
  2056. ClusterRegOpenKey(
  2057.     IN HKEY hKey,
  2058.     IN LPCWSTR lpszSubKey,
  2059.     IN REGSAM samDesired,
  2060.     OUT PHKEY phkResult
  2061.     );
  2062.  
  2063. LONG
  2064. WINAPI
  2065. ClusterRegDeleteKey(
  2066.     IN HKEY hKey,
  2067.     IN LPCWSTR lpszSubKey
  2068.     );
  2069.  
  2070. LONG
  2071. WINAPI
  2072. ClusterRegCloseKey(
  2073.     IN HKEY hKey
  2074.     );
  2075.  
  2076. LONG
  2077. WINAPI
  2078. ClusterRegEnumKey(
  2079.     IN HKEY hKey,
  2080.     IN DWORD dwIndex,
  2081.     OUT LPWSTR lpszName,
  2082.     IN OUT LPDWORD lpcbName,
  2083.     OUT PFILETIME lpftLastWriteTime
  2084.     );
  2085.  
  2086. DWORD
  2087. WINAPI
  2088. ClusterRegSetValue(
  2089.     IN HKEY hKey,
  2090.     IN LPCWSTR lpszValueName,
  2091.     IN DWORD dwType,
  2092.     IN CONST BYTE* lpData,
  2093.     IN DWORD cbData
  2094.     );
  2095.  
  2096. DWORD
  2097. WINAPI
  2098. ClusterRegDeleteValue(
  2099.     IN HKEY hKey,
  2100.     IN LPCWSTR lpszValueName
  2101.     );
  2102.  
  2103. LONG
  2104. WINAPI
  2105. ClusterRegQueryValue(
  2106.     IN HKEY hKey,
  2107.     IN LPCWSTR lpszValueName,
  2108.     OUT LPDWORD lpValueType,
  2109.     OUT LPBYTE lpData,
  2110.     IN OUT LPDWORD lpcbData
  2111.     );
  2112.  
  2113. DWORD
  2114. WINAPI
  2115. ClusterRegEnumValue(
  2116.     IN HKEY hKey,
  2117.     IN DWORD dwIndex,
  2118.     OUT LPWSTR lpszValueName,
  2119.     IN OUT LPDWORD lpcbValueName,
  2120.     OUT LPDWORD lpType,
  2121.     OUT LPBYTE lpData,
  2122.     IN OUT LPDWORD lpcbData
  2123.     );
  2124.  
  2125. LONG
  2126. WINAPI
  2127. ClusterRegQueryInfoKey(
  2128.     IN HKEY hKey,
  2129.     IN LPDWORD lpcSubKeys,
  2130.     IN LPDWORD lpcbMaxSubKeyLen,
  2131.     IN LPDWORD lpcValues,
  2132.     IN LPDWORD lpcbMaxValueNameLen,
  2133.     IN LPDWORD lpcbMaxValueLen,
  2134.     IN LPDWORD lpcbSecurityDescriptor,
  2135.     IN PFILETIME lpftLastWriteTime
  2136.     );
  2137.  
  2138. LONG
  2139. WINAPI
  2140. ClusterRegGetKeySecurity (
  2141.     IN HKEY hKey,
  2142.     IN SECURITY_INFORMATION RequestedInformation,
  2143.     OUT PSECURITY_DESCRIPTOR pSecurityDescriptor,
  2144.     IN LPDWORD lpcbSecurityDescriptor
  2145.     );
  2146.  
  2147. LONG
  2148. WINAPI
  2149. ClusterRegSetKeySecurity(
  2150.     IN HKEY hKey,
  2151.     IN SECURITY_INFORMATION SecurityInformation,
  2152.     IN PSECURITY_DESCRIPTOR pSecurityDescriptor
  2153.     );
  2154.  
  2155. #endif // MIDL_PASS
  2156.  
  2157. #ifdef __cplusplus
  2158. }
  2159. #endif
  2160.  
  2161. #ifndef _CLUSTER_API_TYPES_
  2162. #define _CLUSTER_API_TYPES_
  2163. #endif // _CLUSTER_API_TYPES_
  2164.  
  2165. #pragma option pop /*P_O_Pop*/
  2166. #endif // _CLUSTER_API_
  2167.