Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1060 lines
25 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. clusrpc.idl
  5. Abstract:
  6. Interface Description for Cluster RPC interface. This contains
  7. two interfaces. The first is used for out-of-band cluster server
  8. RPC and is used for things like Join. The second is stricly for
  9. intra-cluster communications and runs only over the cluster
  10. transport.
  11. Author:
  12. John Vert (jvert) 6/5/1996
  13. --*/
  14. cpp_quote("#ifndef _CLUSRPC_INCLUDED_")
  15. cpp_quote("#define _CLUSRPC_INCLUDED_")
  16. ////////////////////////////////////////////////////////////////////////////
  17. //
  18. // Intracluster (Internal) RPC Interface Definition
  19. //
  20. ////////////////////////////////////////////////////////////////////////////
  21. [
  22. uuid(e248d0b8-bf15-11cf-8c5e-08002bb49649),
  23. version(2.0)
  24. ]
  25. interface IntraCluster
  26. {
  27. import "wtypes.idl";
  28. typedef WCHAR CLUSTER_ID[37]; // unicode representation of a GUID
  29. //
  30. // Interface descriptions for the FM component.
  31. //
  32. //
  33. // Types
  34. //
  35. typedef [context_handle] void *HGROUP_ENUM_RPC;
  36. //
  37. // Routines and structures for dealing with Groups
  38. //
  39. //
  40. // Cluster Group State
  41. //
  42. typedef enum _GROUP_STATE {
  43. GroupOnline,
  44. GroupOffline,
  45. GroupFailed,
  46. GroupPartialOnline
  47. } GROUP_STATE;
  48. //
  49. // Group and Resource enumeration interface
  50. //
  51. typedef struct _GROUP_ENUM_ENTRY {
  52. [string] LPWSTR Id;
  53. DWORD State;
  54. DWORD StateSequence;
  55. } GROUP_ENUM_ENTRY, *PGROUP_ENUM_ENTRY;
  56. typedef struct _GROUP_ENUM {
  57. DWORD EntryCount;
  58. [size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*];
  59. } GROUP_ENUM, *PGROUP_ENUM;
  60. typedef struct _RESOURCE_ENUM_ENTRY {
  61. [string] LPWSTR Id;
  62. DWORD State;
  63. DWORD StateSequence;
  64. } RESOURCE_ENUM_ENTRY, *PRESOURCE_ENUM_ENTRY;
  65. typedef struct _RESOURCE_ENUM {
  66. DWORD EntryCount;
  67. int ContainsQuorum;
  68. [size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*];
  69. } RESOURCE_ENUM, *PRESOURCE_ENUM;
  70. //
  71. // Remotely arbitrate a group.
  72. //
  73. error_status_t
  74. FmsQueryOwnedGroups(
  75. [ out ] PGROUP_ENUM *OwnedGroups,
  76. [ out ] PRESOURCE_ENUM *OwnedResources
  77. );
  78. //
  79. // Remotely bring a group online.
  80. //
  81. error_status_t
  82. FmsOnlineGroupRequest(
  83. [ in ] LPCWSTR GroupId
  84. );
  85. //
  86. // Remotely take a group offline.
  87. //
  88. error_status_t
  89. FmsOfflineGroupRequest(
  90. [ in ] LPCWSTR GroupId
  91. );
  92. //
  93. // Remotely move a group.
  94. //
  95. error_status_t
  96. FmsMoveGroupRequest(
  97. [ in ] LPCWSTR GroupId,
  98. [ in, unique ] LPCWSTR DestinationNode
  99. );
  100. //
  101. // Remotely take a group.
  102. //
  103. error_status_t
  104. FmsTakeGroupRequest(
  105. [ in ] LPCWSTR GroupId,
  106. [ in ] PRESOURCE_ENUM ResourceList
  107. );
  108. //
  109. // Remotely bring a resource online.
  110. //
  111. error_status_t
  112. FmsOnlineResourceRequest(
  113. [ in ] LPCWSTR ResourceId
  114. );
  115. //
  116. // Remotely take a resource offline.
  117. //
  118. error_status_t
  119. FmsOfflineResourceRequest(
  120. [ in ] LPCWSTR ResourceId
  121. );
  122. //
  123. // Remotely change node list for a resource.
  124. //
  125. error_status_t
  126. FmsChangeResourceNode(
  127. [ in ] LPCWSTR ResourceId,
  128. [ in ] LPCWSTR NodeId,
  129. [ in ] BOOL Add
  130. );
  131. //
  132. // Remotely arbitrate a resource.
  133. //
  134. error_status_t
  135. FmsArbitrateResource(
  136. [ in ] LPCWSTR ResourceId
  137. );
  138. //
  139. // Remotely fail a resource.
  140. //
  141. error_status_t
  142. FmsFailResource(
  143. [ in ] LPCWSTR ResourceId
  144. );
  145. //
  146. // Remotely create a resource.
  147. //
  148. error_status_t
  149. FmsCreateResource(
  150. [ in ] LPCWSTR GroupId,
  151. [ in ] LPWSTR ResourceId,
  152. [ in ] LPCWSTR ResourceName
  153. );
  154. //
  155. // Remotely delete a resource.
  156. //
  157. error_status_t
  158. FmsDeleteResource(
  159. [ in ] LPCWSTR ResourceId
  160. );
  161. //
  162. // Remotely synchronize the online/offline of a resource.
  163. //
  164. error_status_t
  165. FmsQuoNodeOnlineResource(
  166. [ in ] LPCWSTR ResourceId,
  167. [ in ] LPCWSTR NodeId,
  168. [ out ] LPDWORD State
  169. );
  170. error_status_t
  171. FmsQuoNodeOfflineResource(
  172. [ in ] LPCWSTR ResourceId,
  173. [ in ] LPCWSTR NodeId,
  174. [ out ] LPDWORD State
  175. );
  176. error_status_t
  177. FmsRmOnlineResource(
  178. [ in ] LPCWSTR ResourceId,
  179. [ out ] LPDWORD State
  180. );
  181. error_status_t
  182. FmsRmOfflineResource(
  183. [ in ] LPCWSTR ResourceId,
  184. [ out ] LPDWORD State
  185. );
  186. //
  187. // Remotely control a resource.
  188. //
  189. error_status_t
  190. FmsResourceControl(
  191. [ in ] LPCWSTR ResourceId,
  192. [ in ] DWORD ControlCode,
  193. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  194. [ in ] DWORD InBufferSize,
  195. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  196. [ in ] DWORD OutBufferSize,
  197. [ out ] LPDWORD BytesReturned,
  198. [ out ] LPDWORD Required
  199. );
  200. //
  201. // Remotely control a resource type.
  202. //
  203. error_status_t
  204. FmsResourceTypeControl(
  205. [ in ] LPCWSTR ResourceTypeName,
  206. [ in ] DWORD ControlCode,
  207. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  208. [ in ] DWORD InBufferSize,
  209. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  210. [ in ] DWORD OutBufferSize,
  211. [ out ] LPDWORD BytesReturned,
  212. [ out ] LPDWORD Required
  213. );
  214. //
  215. // Remotely control a group.
  216. //
  217. error_status_t
  218. FmsGroupControl(
  219. [ in ] LPCWSTR GroupId,
  220. [ in ] DWORD ControlCode,
  221. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  222. [ in ] DWORD InBufferSize,
  223. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  224. [ in ] DWORD OutBufferSize,
  225. [ out ] LPDWORD BytesReturned,
  226. [ out ] LPDWORD Required
  227. );
  228. //
  229. //Remotely prepare a resource to become the quorum resource(create quorum log file/take checkpoint)
  230. //
  231. error_status_t
  232. FmsPrepareQuorumResChange(
  233. [ in ] LPCWSTR ResourceId,
  234. [ in ] LPCWSTR lpszQuoLogPath,
  235. [ in ] DWORD dwMaxQuoLogSize
  236. );
  237. //
  238. //Remotely ask the resource to relinquish being a quorum resource or prepare a tombstone in the previous
  239. // location of quorum log files.
  240. //
  241. error_status_t
  242. FmsCompleteQuorumResChange(
  243. [ in ] LPCWSTR lpszResourceId,
  244. [ in ] LPCWSTR lpszQuoLogPath
  245. );
  246. //
  247. // Interface descriptions for the GUM component.
  248. //
  249. typedef UCHAR *PGUM_DATA;
  250. error_status_t
  251. GumQueueLockingUpdate(
  252. [ in ] DWORD NodeId,
  253. [ in ] DWORD Type,
  254. [ in ] DWORD Context,
  255. [ out ] LPDWORD Sequence,
  256. [ in ] DWORD BufferLength,
  257. [ in,size_is(BufferLength) ] PGUM_DATA Buffer
  258. );
  259. #ifdef GUM_POST_SUPPORT
  260. error_status_t
  261. GumQueueLockingPost(
  262. [ in ] DWORD NodeId,
  263. [ in ] DWORD Type,
  264. [ in ] DWORD Context,
  265. [ out ] LPDWORD Sequence,
  266. [ in ] DWORD BufferLength,
  267. [ in,size_is(BufferLength) ] PGUM_DATA Buffer,
  268. [ in ] DWORD ActualBuffer
  269. );
  270. error_status_t
  271. GumDeliverPostCallback(
  272. [ in ] DWORD FirstNode,
  273. [ in ] DWORD Type,
  274. [ in ] DWORD Context,
  275. [ in ] DWORD Sequence,
  276. [ in ] DWORD BufferLength,
  277. [ in ] DWORD Buffer
  278. );
  279. #endif
  280. error_status_t
  281. GumAttemptJoinUpdate(
  282. [ in ] DWORD JoiningId,
  283. [ in ] DWORD Type,
  284. [ in ] DWORD Context,
  285. [ in ] DWORD Sequence,
  286. [ in ] DWORD BufferLength,
  287. [ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
  288. );
  289. error_status_t
  290. GumUnlockUpdate(
  291. [ in ] DWORD Type,
  292. [ in ] DWORD Sequence
  293. );
  294. error_status_t
  295. GumUpdateNode(
  296. [ in ] DWORD Type,
  297. [ in ] DWORD Context,
  298. [ in ] DWORD Sequence,
  299. [ in ] DWORD BufferLength,
  300. [ in,size_is(BufferLength) ] PGUM_DATA Buffer
  301. );
  302. error_status_t
  303. GumJoinUpdateNode(
  304. [ in ] DWORD JoiningId,
  305. [ in ] DWORD Type,
  306. [ in ] DWORD Context,
  307. [ in ] DWORD Sequence,
  308. [ in ] DWORD BufferLength,
  309. [ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
  310. );
  311. typedef struct _GUM_NODE_LIST {
  312. DWORD NodeCount;
  313. [size_is(NodeCount)] DWORD NodeId[*];
  314. } GUM_NODE_LIST, *PGUM_NODE_LIST;
  315. error_status_t
  316. GumGetNodeSequence(
  317. [ in ] DWORD Type,
  318. [ out ] LPDWORD Sequence,
  319. [ out ] LPDWORD LockerNodeId,
  320. [ out ] PGUM_NODE_LIST *NodeList
  321. );
  322. //
  323. // Interface descriptions for the MM component.
  324. //
  325. error_status_t
  326. MmRpcMsgSend(
  327. [ in, size_is(length) ] const UCHAR *buffer,
  328. [ in ] DWORD length
  329. );
  330. //
  331. // we can't import sspi.h but SECURITY_STATUS is an HRESULT
  332. //
  333. typedef enum _SECURITY_ROLE {
  334. SecurityRoleJoiningMember = 1,
  335. SecurityRoleClusterMember
  336. } SECURITY_ROLE;
  337. error_status_t
  338. MmRpcEstablishSecurityContext(
  339. [ in ] DWORD NmJoinSequence,
  340. [ in ] DWORD EstablishingNodeId,
  341. [ in ] BOOL FirstTime,
  342. [ in ] SECURITY_ROLE RoleOfClient,
  343. [ in, size_is(ServerContextLength) ] const UCHAR *ServerContext,
  344. [ in ] DWORD ServerContextLength,
  345. [ out, size_is(*ClientContextLength) ] UCHAR *ClientContext,
  346. [ in, out ] DWORD * ClientContextLength,
  347. [ out ] HRESULT * ServerStatus
  348. );
  349. error_status_t
  350. MmRpcDeleteSecurityContext(
  351. [ in ] DWORD NodeId
  352. );
  353. error_status_t
  354. MmRpcBanishNode(
  355. [ in ] DWORD NodeId
  356. );
  357. error_status_t
  358. NmRpcCreateJoinerBinding(
  359. [in] DWORD JoinSequence,
  360. [in, string] LPWSTR JoinerNodeId,
  361. [in, string] LPWSTR JoinerInterfaceId
  362. );
  363. error_status_t
  364. NmRpcDeliverJoinMessage(
  365. [ in, size_is(MessageLength) ] UCHAR *Message,
  366. [ in ] DWORD MessageLength
  367. );
  368. //
  369. // Interface descriptions for the Checkpoint Manager (CP)
  370. //
  371. typedef pipe byte BYTE_PIPE;
  372. error_status_t
  373. CpDepositCheckpoint(
  374. [ in ] const CLUSTER_ID ResourceId,
  375. [ in ] DWORD dwCheckpointId,
  376. [ in ] BYTE_PIPE CheckpointData
  377. );
  378. error_status_t
  379. CpRetrieveCheckpoint(
  380. [ in ] const CLUSTER_ID ResourceId,
  381. [ in ] DWORD dwCheckpointId,
  382. [ out ] BYTE_PIPE CheckpointData
  383. );
  384. //
  385. // Interface descriptions for the ClusterEventlog Manager (Evtlog)
  386. //
  387. error_status_t
  388. EvPropEvents(
  389. [ in ] DWORD dwEventInfoSize,
  390. [in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo
  391. );
  392. //
  393. // Interface description for the Checkpoint managaer
  394. //
  395. error_status_t
  396. CpDeleteCheckpoint(
  397. [in] const CLUSTER_ID ResourceId,
  398. [in] DWORD dwCheckpointId,
  399. [in, unique] LPCWSTR lpszQuorumPath
  400. );
  401. //
  402. // New structures and procedures added for version 2.0 (NT 5.0)
  403. // that are understood by NT4 SP4.
  404. //
  405. //
  406. // Global Update Manager
  407. //
  408. error_status_t
  409. GumAttemptLockingUpdate(
  410. [ in ] DWORD NodeId,
  411. [ in ] DWORD Type,
  412. [ in ] DWORD Context,
  413. [ in ] DWORD Sequence,
  414. [ in ] DWORD BufferLength,
  415. [ in,size_is(BufferLength) ] PGUM_DATA Buffer
  416. );
  417. error_status_t
  418. GumCollectVoteFromNode(
  419. [ in ] DWORD UpdateType,
  420. [ in ] DWORD dwContext,
  421. [ in ] DWORD dwInputBufLength,
  422. [ in, size_is(dwInputBufLength) ] UCHAR *pInputBuf,
  423. [ in ] DWORD dwVoteLength,
  424. [ out, size_is(dwVoteLength) ] UCHAR *pVoteBuf
  425. );
  426. //
  427. // Node Manager
  428. //
  429. typedef UCHAR NM_STATE_ENTRY, *PNM_STATE_ENTRY;
  430. typedef struct _NM_CONNECTIVITY_VECTOR {
  431. DWORD EntryCount;
  432. [ size_is(EntryCount) ] NM_STATE_ENTRY Data[*];
  433. } NM_CONNECTIVITY_VECTOR, *PNM_CONNECTIVITY_VECTOR;
  434. typedef struct _NM_ADDRESS_ENUM {
  435. DWORD AddressSize;
  436. DWORD AddressCount;
  437. [size_is(AddressCount)] ULONGLONG AddressList[*];
  438. } NM_ADDRESS_ENUM, *PNM_ADDRESS_ENUM;
  439. error_status_t
  440. NmRpcReportInterfaceConnectivity(
  441. [ in, string ] LPWSTR ReportingInterfaceId,
  442. [ in ] PNM_CONNECTIVITY_VECTOR ConnectivityVector
  443. );
  444. error_status_t
  445. NmRpcGetInterfaceOnlineAddressEnum(
  446. [ in, string ] LPWSTR InterfaceId,
  447. [ out ] PNM_ADDRESS_ENUM * InterfaceAddressEnum
  448. );
  449. error_status_t
  450. NmRpcGetInterfacePingAddressEnum(
  451. [ in, string ] LPWSTR InterfaceId,
  452. [ in ] PNM_ADDRESS_ENUM OnlineAddressEnum,
  453. [ out ] PNM_ADDRESS_ENUM * PingAddressEnum
  454. );
  455. //
  456. // This call returns void rather than error_status_t because of a
  457. // bug in the MIDL compiler in an early beta of W2K. Making the
  458. // status the last argument results in the same format on the wire,
  459. // which will enable us to change the definition later and still
  460. // interoperate. The call works in its current format, so there
  461. // is little point in changing it.
  462. //
  463. void
  464. NmRpcDoInterfacePing(
  465. [ in ] LPWSTR InterfaceId,
  466. [ in ] PNM_ADDRESS_ENUM PingAddressEnum,
  467. [ out ] BOOLEAN * PingSucceeded,
  468. [ out ] error_status_t * CallStatus
  469. );
  470. //
  471. // Remotely request the owner of the quorum resource to make a backup of the
  472. // quorum log file and the checkpoint file to the supplied directory path
  473. //
  474. error_status_t
  475. FmsBackupClusterDatabase(
  476. [ in ] LPCWSTR lpszResourceId,
  477. [ in ] LPCWSTR lpszPathName
  478. );
  479. //
  480. // Remotely change the group for a resource
  481. //
  482. error_status_t
  483. FmsChangeResourceGroup(
  484. [ in ] LPCWSTR ResourceId,
  485. [ in ] LPCWSTR GroupId
  486. );
  487. //
  488. // Remotely request the owner of the node to handle the delete group request.
  489. //
  490. error_status_t
  491. FmsDeleteGroupRequest(
  492. [ in ] LPCWSTR GroupId
  493. );
  494. //
  495. // Interface descriptions for the Crypto Checkpoint Management (CP)
  496. //
  497. error_status_t
  498. CpDepositCryptoCheckpoint(
  499. [ in ] const CLUSTER_ID ResourceId,
  500. [ in ] DWORD dwCheckpointId,
  501. [ in ] BYTE_PIPE CheckpointData
  502. );
  503. error_status_t
  504. CpRetrieveCryptoCheckpoint(
  505. [ in ] const CLUSTER_ID ResourceId,
  506. [ in ] DWORD dwCheckpointId,
  507. [ out ] BYTE_PIPE CheckpointData
  508. );
  509. error_status_t
  510. CpDeleteCryptoCheckpoint(
  511. [in] const CLUSTER_ID ResourceId,
  512. [in] DWORD dwCheckpointId,
  513. [in, unique] LPCWSTR lpszQuorumPath
  514. );
  515. //
  516. // Remotely add a resource dependency
  517. //
  518. error_status_t
  519. FmsAddResourceDependency(
  520. [ in ] LPCWSTR pszResourceId,
  521. [ in ] LPCWSTR pszDependsOnId
  522. );
  523. //
  524. // Remotely remove a resource dependency
  525. //
  526. error_status_t
  527. FmsRemoveResourceDependency(
  528. [ in ] LPCWSTR pszResourceId,
  529. [ in ] LPCWSTR pszDependsOnId
  530. );
  531. //
  532. // New structures and procedures added for version 2.0 (NT 5.0)
  533. // that are not understood by NT4 SP4.
  534. //
  535. error_status_t
  536. NmRpcAddNode(
  537. [ in ] LPCWSTR NewNodeName,
  538. [ in ] DWORD NewNodeHighestVersion,
  539. [ in ] DWORD NewNodeLowestVersion,
  540. [ in ] DWORD NewNodeProductSuite
  541. );
  542. error_status_t
  543. FmsCreateResource2(
  544. [ in ] LPCWSTR GroupId,
  545. [ in ] LPWSTR ResourceId,
  546. [ in ] LPCWSTR ResourceName,
  547. [ in ] LPCWSTR ResourceType,
  548. [ in ] DWORD dwFlags
  549. );
  550. } // IntraCluster interface
  551. ////////////////////////////////////////////////////////////////////////////
  552. //
  553. // ExtroCluster (Join) RPC Interface Definition
  554. //
  555. ////////////////////////////////////////////////////////////////////////////
  556. [
  557. uuid(ffe561b8-bf15-11cf-8c5e-08002bb49649),
  558. version(2.0)
  559. ]
  560. interface ExtroCluster
  561. {
  562. import "wtypes.idl";
  563. //
  564. // Constants
  565. //
  566. const unsigned long CS_MAX_NODE_NAME_LENGTH = 15; // MAX_COMPUTERNAME_LENGTH
  567. const unsigned long CS_MAX_NODE_ID_LENGTH = 5; // enough for 99,999 nodes
  568. const unsigned long CS_NETWORK_ID_LENGTH = 36 ; // size of a GUID.
  569. const unsigned long CS_NETINTERFACE_ID_LENGTH = 36 ; // size of a GUID.
  570. //
  571. // Node Configuration Information
  572. //
  573. typedef struct _NM_NODE_INFO {
  574. [string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
  575. [string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
  576. DWORD State;
  577. } NM_NODE_INFO, *PNM_NODE_INFO;
  578. typedef struct _NM_NODE_ENUM {
  579. DWORD NodeCount;
  580. [ size_is(NodeCount) ] NM_NODE_INFO NodeList[*];
  581. } NM_NODE_ENUM, *PNM_NODE_ENUM;
  582. //
  583. // Network Configuration Information.
  584. //
  585. typedef struct _NM_INTERFACE_INFO {
  586. [string] LPWSTR Id;
  587. [string] LPWSTR Name;
  588. [string] LPWSTR Description;
  589. [string] LPWSTR NodeId;
  590. [string] LPWSTR NetworkId;
  591. [string] LPWSTR Adapter;
  592. [string] LPWSTR Address;
  593. [string] LPWSTR ClusnetEndpoint;
  594. DWORD State;
  595. BOOLEAN Ignore;
  596. } NM_INTERFACE_INFO, *PNM_INTERFACE_INFO;
  597. typedef struct _NM_INTERFACE_ENUM {
  598. DWORD InterfaceCount;
  599. [ size_is(InterfaceCount) ] NM_INTERFACE_INFO InterfaceList[*];
  600. } NM_INTERFACE_ENUM, *PNM_INTERFACE_ENUM;
  601. typedef struct _NM_NETWORK_INFO {
  602. [string] LPWSTR Id;
  603. [string] LPWSTR Name;
  604. [string] LPWSTR Description;
  605. DWORD Role;
  606. DWORD Priority;
  607. [string] LPWSTR Transport;
  608. [string] LPWSTR Address;
  609. [string] LPWSTR AddressMask;
  610. BOOLEAN Ignore;
  611. } NM_NETWORK_INFO, *PNM_NETWORK_INFO;
  612. typedef struct _NM_NETWORK_ENUM {
  613. DWORD NetworkCount;
  614. [ size_is(NetworkCount) ] NM_NETWORK_INFO NetworkList[*];
  615. } NM_NETWORK_ENUM, *PNM_NETWORK_ENUM;
  616. //
  617. // Routines
  618. //
  619. error_status_t
  620. NmRpcEnumNodeDefinitions(
  621. [ in ] DWORD JoinSequence,
  622. [ in, string ] LPWSTR JoinerNodeId,
  623. [ out ] PNM_NODE_ENUM * NodeEnum
  624. );
  625. error_status_t
  626. NmRpcEnumNetworkDefinitions(
  627. [ in ] DWORD JoinSequence,
  628. [ in, string ] LPWSTR JoinerNodeId,
  629. [ out ] PNM_NETWORK_ENUM * NetworkEnum
  630. );
  631. error_status_t
  632. NmRpcEnumInterfaceDefinitions(
  633. [ in ] DWORD JoinSequence,
  634. [ in, string ] LPWSTR JoinerNodeId,
  635. [ out ] PNM_INTERFACE_ENUM * InterfaceEnum
  636. );
  637. error_status_t
  638. NmRpcCreateNetwork(
  639. [ in ] DWORD JoinSequence,
  640. [ in, string ] LPWSTR JoinerNodeId,
  641. [ in ] PNM_NETWORK_INFO NetworkInfo,
  642. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  643. );
  644. error_status_t
  645. NmRpcCreateInterface(
  646. [ in ] DWORD JoinSequence,
  647. [ in, string ] LPWSTR JoinerNodeId,
  648. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  649. );
  650. error_status_t
  651. NmRpcSetInterfaceInfo(
  652. [ in ] DWORD JoinSequence,
  653. [ in, string ] LPWSTR JoinerNodeId,
  654. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  655. );
  656. error_status_t
  657. NmRpcDeleteInterface(
  658. [ in ] DWORD JoinSequence,
  659. [ in, string ] LPWSTR JoinerNodeId,
  660. [ in, string ] LPWSTR InterfaceId,
  661. [ out ] BOOLEAN * NetworkDeleted
  662. );
  663. error_status_t
  664. NmRpcJoinBegin(
  665. [in, string ] LPWSTR JoinerNodeId,
  666. [in, string ] LPWSTR JoinerNodeName,
  667. [ out ] LPDWORD SponsorNodeId,
  668. [ out ] LPDWORD JoinSequenceNumber,
  669. [ out, string ] LPWSTR * ClusnetEndpoint
  670. );
  671. error_status_t
  672. NmRpcCreateBinding(
  673. [ in ] DWORD JoinSequence,
  674. [ in, string ] LPWSTR JoinerNodeId,
  675. [ in, string ] LPWSTR JoinerInterfaceId,
  676. [ in, string ] LPWSTR MemberNodeId
  677. );
  678. error_status_t
  679. NmRpcPetitionForMembership(
  680. [ in ] DWORD JoinSequence,
  681. [ in, string ] LPCWSTR JoinerNodeId
  682. );
  683. error_status_t
  684. JoinAddNode(
  685. [ in, string ] LPCWSTR lpszNodeId
  686. );
  687. error_status_t
  688. DmSyncDatabase(
  689. [ out ] BYTE_PIPE reg_data
  690. );
  691. error_status_t
  692. TestRPCSecurity(
  693. );
  694. //
  695. // New structures added for version 2.0 (NT 5.0) that are understood
  696. // by NT4 SP4.
  697. //
  698. //
  699. // Node Configuration Information Structure
  700. //
  701. typedef struct _NM_NODE_INFO2{
  702. [string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
  703. [string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
  704. DWORD State;
  705. //
  706. // New fields in Version 2.0
  707. //
  708. DWORD NodeHighestVersion;
  709. DWORD NodeLowestVersion;
  710. } NM_NODE_INFO2, *PNM_NODE_INFO2;
  711. typedef struct _NM_NODE_ENUM2{
  712. DWORD NodeCount;
  713. [ size_is(NodeCount) ] NM_NODE_INFO2 NodeList[*];
  714. } NM_NODE_ENUM2, *PNM_NODE_ENUM2;
  715. //
  716. // Network Interface Configuration Information Structure
  717. //
  718. // Extension of NM_INTERFACE_INFO structure. Extended fields
  719. // are appended to the original structure.
  720. //
  721. typedef struct _NM_INTERFACE_INFO2 {
  722. [string] LPWSTR Id;
  723. [string] LPWSTR Name;
  724. [string] LPWSTR Description;
  725. [string] LPWSTR NodeId;
  726. [string] LPWSTR NetworkId;
  727. [string] LPWSTR AdapterName; // Field renamed, but location unchanged
  728. [string] LPWSTR Address;
  729. [string] LPWSTR ClusnetEndpoint;
  730. DWORD State;
  731. BOOLEAN Ignore;
  732. //
  733. // New fields in Version 2.0
  734. //
  735. [string] LPWSTR AdapterId;
  736. DWORD NetIndex;
  737. } NM_INTERFACE_INFO2, *PNM_INTERFACE_INFO2;
  738. typedef struct _NM_INTERFACE_ENUM2 {
  739. DWORD InterfaceCount;
  740. [ size_is(InterfaceCount) ] NM_INTERFACE_INFO2 InterfaceList[*];
  741. } NM_INTERFACE_ENUM2, *PNM_INTERFACE_ENUM2;
  742. cpp_quote("#define NmInvalidInterfaceNetIndex 0xFFFFFFFF")
  743. //
  744. // Network Interface State Information Structure
  745. //
  746. typedef struct _NM_INTERFACE_STATE_INFO {
  747. [string] LPWSTR Id;
  748. DWORD State;
  749. } NM_INTERFACE_STATE_INFO, *PNM_INTERFACE_STATE_INFO;
  750. typedef struct _NM_INTERFACE_STATE_ENUM {
  751. DWORD InterfaceCount;
  752. [ size_is(InterfaceCount) ] NM_INTERFACE_STATE_INFO InterfaceList[*];
  753. } NM_INTERFACE_STATE_ENUM, *PNM_INTERFACE_STATE_ENUM;
  754. typedef struct _NM_NETWORK_STATE_INFO {
  755. [string] LPWSTR Id;
  756. DWORD State;
  757. } NM_NETWORK_STATE_INFO, *PNM_NETWORK_STATE_INFO;
  758. typedef struct _NM_NETWORK_STATE_ENUM {
  759. DWORD NetworkCount;
  760. [ size_is(NetworkCount) ] NM_NETWORK_STATE_INFO NetworkList[*];
  761. } NM_NETWORK_STATE_ENUM, *PNM_NETWORK_STATE_ENUM;
  762. //
  763. // New routines added for version 2.0 (NT 5.0) that are understood
  764. // by NT4 SP4.
  765. //
  766. error_status_t
  767. NmRpcJoinBegin2(
  768. [in, string ] LPWSTR JoinerNodeId,
  769. [in, string ] LPWSTR JoinerNodeName,
  770. [in ] DWORD JoinerHighestVersion,
  771. [in ] DWORD JoinerLowestVersion,
  772. [ out ] LPDWORD SponsorNodeId,
  773. [ out ] LPDWORD JoinSequenceNumber,
  774. [ out, string ] LPWSTR * ClusnetEndpoint
  775. );
  776. error_status_t
  777. JoinAddNode2(
  778. [ in, string ] LPCWSTR lpszNodeId,
  779. [ in ] DWORD dwNodeHighestVersion,
  780. [ in ] DWORD dwNodeLowestVersion
  781. );
  782. error_status_t
  783. NmRpcEnumNodeDefinitions2(
  784. [ in ] DWORD JoinSequence,
  785. [ in, string ] LPWSTR JoinerNodeId,
  786. [ out ] PNM_NODE_ENUM2 * NodeEnum2
  787. );
  788. error_status_t
  789. NmRpcEnumInterfaceDefinitions2(
  790. [ in ] DWORD JoinSequence,
  791. [ in, string ] LPWSTR JoinerNodeId,
  792. [ out ] PNM_INTERFACE_ENUM2 * InterfaceEnum2
  793. );
  794. error_status_t
  795. NmRpcCreateNetwork2(
  796. [ in ] DWORD JoinSequence,
  797. [ in, string ] LPWSTR JoinerNodeId,
  798. [ in ] PNM_NETWORK_INFO NetworkInfo,
  799. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  800. );
  801. error_status_t
  802. NmRpcCreateInterface2(
  803. [ in ] DWORD JoinSequence,
  804. [ in, string ] LPWSTR JoinerNodeId,
  805. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  806. );
  807. error_status_t
  808. NmRpcSetInterfaceInfo2(
  809. [ in ] DWORD JoinSequence,
  810. [ in, string ] LPWSTR JoinerNodeId,
  811. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  812. );
  813. error_status_t
  814. NmRpcSetNetworkName(
  815. [ in ] DWORD JoinSequence,
  816. [ in, string ] LPWSTR JoinerNodeId,
  817. [ in ] PNM_NETWORK_INFO NetworkInfo
  818. );
  819. error_status_t
  820. NmRpcReportJoinerInterfaceConnectivity(
  821. [ in ] DWORD JoinSequence,
  822. [ in, string ] LPWSTR JoinerNodeId,
  823. [ in, string ] LPWSTR ReportingInterfaceId,
  824. [ in ] PNM_CONNECTIVITY_VECTOR ConnectivityVector
  825. );
  826. error_status_t
  827. NmRpcEnumNetworkAndInterfaceStates(
  828. [ in ] DWORD JoinSequence,
  829. [ in, string ] LPWSTR JoinerNodeId,
  830. [ out ] PNM_NETWORK_STATE_ENUM * NetworkStateEnum,
  831. [ out ] PNM_INTERFACE_STATE_ENUM * InterfaceStateEnum
  832. );
  833. error_status_t
  834. NmRpcGetLeaderNodeId(
  835. [ in ] DWORD JoinSequence,
  836. [ in, string ] LPWSTR JoinerNodeId,
  837. [ out ] LPDWORD LeaderNodeId
  838. );
  839. //
  840. // New structures and procedures added for version 2.0 (NT 5.0)
  841. // that are not understood by NT4 SP4.
  842. //
  843. error_status_t
  844. JoinAddNode3(
  845. [ in, string ] LPCWSTR lpszNodeId,
  846. [ in ] DWORD dwNodeHighestVersion,
  847. [ in ] DWORD dwNodeLowestVersion,
  848. [ in ] DWORD dwNodeProductSuite
  849. );
  850. //
  851. // New structures and procedures added for version 2.1 (NT 5.1)
  852. // that are not understood by NT 5.0 or earlier
  853. //
  854. error_status_t
  855. NmRpcJoinBegin3(
  856. [in, string ] LPWSTR JoinerClusterInstanceId,
  857. [in, string ] LPWSTR JoinerNodeId,
  858. [in, string ] LPWSTR JoinerNodeName,
  859. [in ] DWORD JoinerHighestVersion,
  860. [in ] DWORD JoinerLowestVersion,
  861. [in ] DWORD JoinerMajorVersion,
  862. [in ] DWORD JoinerMinorVersion,
  863. [in, string ] LPWSTR JoinerCsdVersion,
  864. [in ] DWORD JoinerProductSuite,
  865. [ out ] LPDWORD SponsorNodeId,
  866. [ out ] LPDWORD JoinSequenceNumber,
  867. [ out, string ] LPWSTR * ClusnetEndpoint
  868. );
  869. } // ExtroCluster interface
  870. ////////////////////////////////////////////////////////////////////////////
  871. //
  872. // Join Version RPC Interface Definition
  873. //
  874. // Don't ever change this interface unless you really, really,
  875. // really know what you're doing.
  876. //
  877. ////////////////////////////////////////////////////////////////////////////
  878. [
  879. uuid(6e17aaa0-1a47-11d1-98bd-0000f875292e),
  880. version(2.0)
  881. ]
  882. interface JoinVersion
  883. {
  884. import "wtypes.idl";
  885. error_status_t
  886. CsRpcGetJoinVersionData(
  887. [ in ] DWORD JoiningNodeId,
  888. [ in ] DWORD JoinerHighestVersion,
  889. [ in ] DWORD JoinerLowestVersion,
  890. [ out ] LPDWORD SponsorNodeId,
  891. [ out ] LPDWORD ClusterHighestVersion,
  892. [ out ] LPDWORD ClusterLowestVersion,
  893. [ out ] LPDWORD JoinStatus
  894. );
  895. } // JoinVersion interface
  896. cpp_quote("#endif //_CLUSRPC_INCLUDED_")