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

1162 lines
29 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. const short CLUSTER_ID_SIZE = 37;
  29. typedef WCHAR CLUSTER_ID[CLUSTER_ID_SIZE]; // unicode representation of a GUID
  30. //
  31. // Interface descriptions for the FM component.
  32. //
  33. //
  34. // Types
  35. //
  36. typedef [context_handle] void *HGROUP_ENUM_RPC;
  37. //
  38. // Routines and structures for dealing with Groups
  39. //
  40. //
  41. // Cluster Group State
  42. //
  43. typedef enum _GROUP_STATE {
  44. GroupOnline,
  45. GroupOffline,
  46. GroupFailed,
  47. GroupPartialOnline
  48. } GROUP_STATE;
  49. //
  50. // Group and Resource enumeration interface
  51. //
  52. typedef struct _GROUP_ENUM_ENTRY {
  53. [string] LPWSTR Id;
  54. DWORD State;
  55. DWORD StateSequence;
  56. } GROUP_ENUM_ENTRY, *PGROUP_ENUM_ENTRY;
  57. typedef struct _GROUP_ENUM {
  58. DWORD EntryCount;
  59. [size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*];
  60. } GROUP_ENUM, *PGROUP_ENUM;
  61. typedef struct _RESOURCE_ENUM_ENTRY {
  62. [string] LPWSTR Id;
  63. DWORD State;
  64. DWORD StateSequence;
  65. } RESOURCE_ENUM_ENTRY, *PRESOURCE_ENUM_ENTRY;
  66. typedef struct _RESOURCE_ENUM {
  67. DWORD EntryCount;
  68. int ContainsQuorum;
  69. [size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*];
  70. } RESOURCE_ENUM, *PRESOURCE_ENUM;
  71. //
  72. // Remotely arbitrate a group.
  73. //
  74. error_status_t
  75. FmsQueryOwnedGroups(
  76. [ out ] PGROUP_ENUM *OwnedGroups,
  77. [ out ] PRESOURCE_ENUM *OwnedResources
  78. );
  79. //
  80. // Remotely bring a group online.
  81. //
  82. error_status_t
  83. FmsOnlineGroupRequest(
  84. [ in ] LPCWSTR GroupId
  85. );
  86. //
  87. // Remotely take a group offline.
  88. //
  89. error_status_t
  90. FmsOfflineGroupRequest(
  91. [ in ] LPCWSTR GroupId
  92. );
  93. //
  94. // Remotely move a group.
  95. //
  96. error_status_t
  97. FmsMoveGroupRequest(
  98. [ in ] LPCWSTR GroupId,
  99. [ in, unique ] LPCWSTR DestinationNode
  100. );
  101. //
  102. // Remotely take a group.
  103. //
  104. error_status_t
  105. FmsTakeGroupRequest(
  106. [ in ] LPCWSTR GroupId,
  107. [ in ] PRESOURCE_ENUM ResourceList
  108. );
  109. //
  110. // Remotely bring a resource online.
  111. //
  112. error_status_t
  113. FmsOnlineResourceRequest(
  114. [ in ] LPCWSTR ResourceId
  115. );
  116. //
  117. // Remotely take a resource offline.
  118. //
  119. error_status_t
  120. FmsOfflineResourceRequest(
  121. [ in ] LPCWSTR ResourceId
  122. );
  123. //
  124. // Remotely change node list for a resource.
  125. //
  126. error_status_t
  127. FmsChangeResourceNode(
  128. [ in ] LPCWSTR ResourceId,
  129. [ in ] LPCWSTR NodeId,
  130. [ in ] BOOL Add
  131. );
  132. //
  133. // Remotely arbitrate a resource.
  134. //
  135. error_status_t
  136. FmsArbitrateResource(
  137. [ in ] LPCWSTR ResourceId
  138. );
  139. //
  140. // Remotely fail a resource.
  141. //
  142. error_status_t
  143. FmsFailResource(
  144. [ in ] LPCWSTR ResourceId
  145. );
  146. //
  147. // Remotely create a resource.
  148. //
  149. error_status_t
  150. FmsCreateResource(
  151. [ in ] LPCWSTR GroupId,
  152. [ in ] LPWSTR ResourceId,
  153. [ in ] LPCWSTR ResourceName
  154. );
  155. //
  156. // Remotely delete a resource.
  157. //
  158. error_status_t
  159. FmsDeleteResource(
  160. [ in ] LPCWSTR ResourceId
  161. );
  162. //
  163. // Remotely synchronize the online/offline of a resource.
  164. //
  165. error_status_t
  166. FmsQuoNodeOnlineResource(
  167. [ in ] LPCWSTR ResourceId,
  168. [ in ] LPCWSTR NodeId,
  169. [ out ] LPDWORD State
  170. );
  171. error_status_t
  172. FmsQuoNodeOfflineResource(
  173. [ in ] LPCWSTR ResourceId,
  174. [ in ] LPCWSTR NodeId,
  175. [ out ] LPDWORD State
  176. );
  177. error_status_t
  178. FmsRmOnlineResource(
  179. [ in ] LPCWSTR ResourceId,
  180. [ out ] LPDWORD State
  181. );
  182. error_status_t
  183. FmsRmOfflineResource(
  184. [ in ] LPCWSTR ResourceId,
  185. [ out ] LPDWORD State
  186. );
  187. //
  188. // Remotely control a resource.
  189. //
  190. error_status_t
  191. FmsResourceControl(
  192. [ in ] LPCWSTR ResourceId,
  193. [ in ] DWORD ControlCode,
  194. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  195. [ in ] DWORD InBufferSize,
  196. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  197. [ in ] DWORD OutBufferSize,
  198. [ out ] LPDWORD BytesReturned,
  199. [ out ] LPDWORD Required
  200. );
  201. //
  202. // Remotely control a resource type.
  203. //
  204. error_status_t
  205. FmsResourceTypeControl(
  206. [ in ] LPCWSTR ResourceTypeName,
  207. [ in ] DWORD ControlCode,
  208. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  209. [ in ] DWORD InBufferSize,
  210. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  211. [ in ] DWORD OutBufferSize,
  212. [ out ] LPDWORD BytesReturned,
  213. [ out ] LPDWORD Required
  214. );
  215. //
  216. // Remotely control a group.
  217. //
  218. error_status_t
  219. FmsGroupControl(
  220. [ in ] LPCWSTR GroupId,
  221. [ in ] DWORD ControlCode,
  222. [ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
  223. [ in ] DWORD InBufferSize,
  224. [ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
  225. [ in ] DWORD OutBufferSize,
  226. [ out ] LPDWORD BytesReturned,
  227. [ out ] LPDWORD Required
  228. );
  229. //
  230. //Remotely prepare a resource to become the quorum resource(create quorum log file/take checkpoint)
  231. //
  232. error_status_t
  233. FmsPrepareQuorumResChange(
  234. [ in ] LPCWSTR ResourceId,
  235. [ in ] LPCWSTR lpszQuoLogPath,
  236. [ in ] DWORD dwMaxQuoLogSize
  237. );
  238. //
  239. //Remotely ask the resource to relinquish being a quorum resource or prepare a tombstone in the previous
  240. // location of quorum log files.
  241. //
  242. error_status_t
  243. FmsCompleteQuorumResChange(
  244. [ in ] LPCWSTR lpszResourceId,
  245. [ in ] LPCWSTR lpszQuoLogPath
  246. );
  247. //
  248. // Interface descriptions for the GUM component.
  249. //
  250. typedef UCHAR *PGUM_DATA;
  251. error_status_t
  252. GumQueueLockingUpdate(
  253. [ in ] DWORD NodeId,
  254. [ in ] DWORD Type,
  255. [ in ] DWORD Context,
  256. [ out ] LPDWORD Sequence,
  257. [ in ] DWORD BufferLength,
  258. [ in,size_is(BufferLength) ] PGUM_DATA Buffer
  259. );
  260. #ifdef GUM_POST_SUPPORT
  261. error_status_t
  262. GumQueueLockingPost(
  263. [ in ] DWORD NodeId,
  264. [ in ] DWORD Type,
  265. [ in ] DWORD Context,
  266. [ out ] LPDWORD Sequence,
  267. [ in ] DWORD BufferLength,
  268. [ in,size_is(BufferLength) ] PGUM_DATA Buffer,
  269. [ in ] DWORD ActualBuffer
  270. );
  271. error_status_t
  272. GumDeliverPostCallback(
  273. [ in ] DWORD FirstNode,
  274. [ in ] DWORD Type,
  275. [ in ] DWORD Context,
  276. [ in ] DWORD Sequence,
  277. [ in ] DWORD BufferLength,
  278. [ in ] DWORD Buffer
  279. );
  280. #endif
  281. error_status_t
  282. GumAttemptJoinUpdate(
  283. [ in ] DWORD JoiningId,
  284. [ in ] DWORD Type,
  285. [ in ] DWORD Context,
  286. [ in ] DWORD Sequence,
  287. [ in ] DWORD BufferLength,
  288. [ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
  289. );
  290. error_status_t
  291. GumUnlockUpdate(
  292. [ in ] DWORD Type,
  293. [ in ] DWORD Sequence
  294. );
  295. error_status_t
  296. GumUpdateNode(
  297. [ in ] DWORD Type,
  298. [ in ] DWORD Context,
  299. [ in ] DWORD Sequence,
  300. [ in ] DWORD BufferLength,
  301. [ in,size_is(BufferLength) ] PGUM_DATA Buffer
  302. );
  303. error_status_t
  304. GumJoinUpdateNode(
  305. [ in ] DWORD JoiningId,
  306. [ in ] DWORD Type,
  307. [ in ] DWORD Context,
  308. [ in ] DWORD Sequence,
  309. [ in ] DWORD BufferLength,
  310. [ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
  311. );
  312. typedef struct _GUM_NODE_LIST {
  313. DWORD NodeCount;
  314. [size_is(NodeCount)] DWORD NodeId[*];
  315. } GUM_NODE_LIST, *PGUM_NODE_LIST;
  316. error_status_t
  317. GumGetNodeSequence(
  318. [ in ] DWORD Type,
  319. [ out ] LPDWORD Sequence,
  320. [ out ] LPDWORD LockerNodeId,
  321. [ out ] PGUM_NODE_LIST *NodeList
  322. );
  323. //
  324. // Interface descriptions for the MM component.
  325. //
  326. error_status_t
  327. MmRpcMsgSend(
  328. [ in, size_is(length) ] const UCHAR *buffer,
  329. [ in ] DWORD length
  330. );
  331. //
  332. // we can't import sspi.h but SECURITY_STATUS is an HRESULT
  333. //
  334. typedef enum _SECURITY_ROLE {
  335. SecurityRoleJoiningMember = 1,
  336. SecurityRoleClusterMember
  337. } SECURITY_ROLE;
  338. error_status_t
  339. MmRpcEstablishSecurityContext(
  340. [ in ] DWORD NmJoinSequence,
  341. [ in ] DWORD EstablishingNodeId,
  342. [ in ] BOOL FirstTime,
  343. [ in ] SECURITY_ROLE RoleOfClient,
  344. [ in, size_is(ServerContextLength) ] const UCHAR *ServerContext,
  345. [ in ] DWORD ServerContextLength,
  346. [ out, size_is(*ClientContextLength) ] UCHAR *ClientContext,
  347. [ in, out ] DWORD * ClientContextLength,
  348. [ out ] HRESULT * ServerStatus
  349. );
  350. error_status_t
  351. MmRpcDeleteSecurityContext(
  352. [ in ] DWORD NodeId
  353. );
  354. error_status_t
  355. MmRpcBanishNode(
  356. [ in ] DWORD NodeId
  357. );
  358. error_status_t
  359. NmRpcCreateJoinerBinding(
  360. [in] DWORD JoinSequence,
  361. [in, string] LPWSTR JoinerNodeId,
  362. [in, string] LPWSTR JoinerInterfaceId
  363. );
  364. error_status_t
  365. NmRpcDeliverJoinMessage(
  366. [ in, size_is(MessageLength) ] UCHAR *Message,
  367. [ in ] DWORD MessageLength
  368. );
  369. //
  370. // Interface descriptions for the Checkpoint Manager (CP)
  371. //
  372. typedef pipe byte BYTE_PIPE;
  373. error_status_t
  374. CpDepositCheckpoint(
  375. [ in ] const CLUSTER_ID ResourceId,
  376. [ in ] DWORD dwCheckpointId,
  377. [ in ] BYTE_PIPE CheckpointData
  378. );
  379. error_status_t
  380. CpRetrieveCheckpoint(
  381. [ in ] const CLUSTER_ID ResourceId,
  382. [ in ] DWORD dwCheckpointId,
  383. [ out ] BYTE_PIPE CheckpointData
  384. );
  385. //
  386. // Interface descriptions for the ClusterEventlog Manager (Evtlog)
  387. //
  388. error_status_t
  389. EvPropEvents(
  390. [ in ] DWORD dwEventInfoSize,
  391. [in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo
  392. );
  393. //
  394. // Interface description for the Checkpoint managaer
  395. //
  396. error_status_t
  397. CpDeleteCheckpoint(
  398. [in] const CLUSTER_ID ResourceId,
  399. [in] DWORD dwCheckpointId,
  400. [in, unique] LPCWSTR lpszQuorumPath
  401. );
  402. //
  403. // New structures and procedures added for version 2.0 (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 3.0 (Windows 2000)
  533. //
  534. error_status_t
  535. NmRpcAddNode(
  536. [ in ] LPCWSTR NewNodeName,
  537. [ in ] DWORD NewNodeHighestVersion,
  538. [ in ] DWORD NewNodeLowestVersion,
  539. [ in ] DWORD NewNodeProductSuite
  540. );
  541. //
  542. // New structures and procedures added for version 4.0 (Windows Server 2003)
  543. //
  544. error_status_t
  545. FmsCreateResource2(
  546. [ in ] LPCWSTR GroupId,
  547. [ in ] LPWSTR ResourceId,
  548. [ in ] LPCWSTR ResourceName,
  549. [ in ] LPCWSTR ResourceType,
  550. [ in ] DWORD dwFlags
  551. );
  552. //
  553. // Interface descriptions for the ClusterEventlog Manager (Evtlog)
  554. //
  555. error_status_t
  556. EvPropEvents2(
  557. [ in ] DWORD dwEventInfoSize,
  558. [in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo,
  559. [in] FILETIME TimeofSend,
  560. [in] DWORD dwSenderNodeId
  561. );
  562. //
  563. // Forward a node control request
  564. //
  565. error_status_t
  566. NmRpcNodeControl(
  567. [ in ] LPCWSTR lpNodeId,
  568. [ in ] DWORD dwControlCode,
  569. [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer,
  570. [ in ] DWORD nInBufferSize,
  571. [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer,
  572. [ in ] DWORD nOutBufferSize,
  573. [ out ] DWORD *lpBytesReturned,
  574. [ out ] DWORD *lpcbRequired
  575. );
  576. // New Gum interfaces defined so that the unlock includes the unlocker id and the generation at which the lock was acquired
  577. error_status_t
  578. GumQueueLockingUpdate2(
  579. [ in ] DWORD NodeId,
  580. [ in ] DWORD Type,
  581. [ in ] DWORD Context,
  582. [ out ] LPDWORD Sequence,
  583. [ in ] DWORD BufferLength,
  584. [ in,size_is(BufferLength) ] PGUM_DATA Buffer,
  585. [ out ] LPDWORD GenerationNum
  586. );
  587. error_status_t
  588. GumUnlockUpdate2(
  589. [ in ] DWORD Type,
  590. [ in ] DWORD Sequence,
  591. [ in] DWORD SourceId,
  592. [ in ] DWORD GenerationNum
  593. );
  594. error_status_t
  595. GumAttemptJoinUpdate2(
  596. [ in ] DWORD JoiningId,
  597. [ in ] DWORD Type,
  598. [ in ] DWORD Context,
  599. [ in ] DWORD Sequence,
  600. [ in ] DWORD BufferLength,
  601. [ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer,
  602. [ out ] LPDWORD GenerationNum
  603. );
  604. error_status_t
  605. GumAttemptLockingUpdate2(
  606. [ in ] DWORD NodeId,
  607. [ in ] DWORD Type,
  608. [ in ] DWORD Context,
  609. [ in ] DWORD Sequence,
  610. [ in ] DWORD BufferLength,
  611. [ in,size_is(BufferLength) ] PGUM_DATA Buffer,
  612. [ out ] LPDWORD GenerationNum
  613. );
  614. } // IntraCluster interface
  615. ////////////////////////////////////////////////////////////////////////////
  616. //
  617. // ExtroCluster (Join) RPC Interface Definition
  618. //
  619. ////////////////////////////////////////////////////////////////////////////
  620. [
  621. uuid(ffe561b8-bf15-11cf-8c5e-08002bb49649),
  622. version(2.0)
  623. ]
  624. interface ExtroCluster
  625. {
  626. import "wtypes.idl";
  627. //
  628. // Constants
  629. //
  630. const unsigned long CS_MAX_NODE_NAME_LENGTH = 15; // MAX_COMPUTERNAME_LENGTH
  631. const unsigned long CS_MAX_NODE_ID_LENGTH = 5; // enough for 99,999 nodes
  632. const unsigned long CS_NETWORK_ID_LENGTH = 36 ; // size of a GUID.
  633. const unsigned long CS_NETINTERFACE_ID_LENGTH = 36 ; // size of a GUID.
  634. //
  635. // Node Configuration Information
  636. //
  637. typedef struct _NM_NODE_INFO {
  638. [string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
  639. [string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
  640. DWORD State;
  641. } NM_NODE_INFO, *PNM_NODE_INFO;
  642. typedef struct _NM_NODE_ENUM {
  643. DWORD NodeCount;
  644. [ size_is(NodeCount) ] NM_NODE_INFO NodeList[*];
  645. } NM_NODE_ENUM, *PNM_NODE_ENUM;
  646. //
  647. // Network Configuration Information.
  648. //
  649. typedef struct _NM_INTERFACE_INFO {
  650. [string] LPWSTR Id;
  651. [string] LPWSTR Name;
  652. [string] LPWSTR Description;
  653. [string] LPWSTR NodeId;
  654. [string] LPWSTR NetworkId;
  655. [string] LPWSTR Adapter;
  656. [string] LPWSTR Address;
  657. [string] LPWSTR ClusnetEndpoint;
  658. DWORD State;
  659. BOOLEAN Ignore;
  660. } NM_INTERFACE_INFO, *PNM_INTERFACE_INFO;
  661. typedef struct _NM_INTERFACE_ENUM {
  662. DWORD InterfaceCount;
  663. [ size_is(InterfaceCount) ] NM_INTERFACE_INFO InterfaceList[*];
  664. } NM_INTERFACE_ENUM, *PNM_INTERFACE_ENUM;
  665. typedef struct _NM_NETWORK_INFO {
  666. [string] LPWSTR Id;
  667. [string] LPWSTR Name;
  668. [string] LPWSTR Description;
  669. DWORD Role;
  670. DWORD Priority;
  671. [string] LPWSTR Transport;
  672. [string] LPWSTR Address;
  673. [string] LPWSTR AddressMask;
  674. BOOLEAN Ignore;
  675. } NM_NETWORK_INFO, *PNM_NETWORK_INFO;
  676. typedef struct _NM_NETWORK_ENUM {
  677. DWORD NetworkCount;
  678. [ size_is(NetworkCount) ] NM_NETWORK_INFO NetworkList[*];
  679. } NM_NETWORK_ENUM, *PNM_NETWORK_ENUM;
  680. typedef struct _NM_NETWORK_MULTICASTKEY {
  681. DWORD MulticastKeyExpires;
  682. [ size_is(EncryptedMulticastKeyLength) ] UCHAR *EncryptedMulticastKey;
  683. DWORD EncryptedMulticastKeyLength;
  684. [ size_is(SaltLength) ] UCHAR *Salt;
  685. DWORD SaltLength;
  686. [ size_is(MACLength) ] UCHAR *MAC;
  687. DWORD MACLength;
  688. } NM_NETWORK_MULTICASTKEY, *PNM_NETWORK_MULTICASTKEY;
  689. //
  690. // Routines
  691. //
  692. error_status_t
  693. NmRpcEnumNodeDefinitions(
  694. [ in ] DWORD JoinSequence,
  695. [ in, string ] LPWSTR JoinerNodeId,
  696. [ out ] PNM_NODE_ENUM * NodeEnum
  697. );
  698. error_status_t
  699. NmRpcEnumNetworkDefinitions(
  700. [ in ] DWORD JoinSequence,
  701. [ in, string ] LPWSTR JoinerNodeId,
  702. [ out ] PNM_NETWORK_ENUM * NetworkEnum
  703. );
  704. error_status_t
  705. NmRpcEnumInterfaceDefinitions(
  706. [ in ] DWORD JoinSequence,
  707. [ in, string ] LPWSTR JoinerNodeId,
  708. [ out ] PNM_INTERFACE_ENUM * InterfaceEnum
  709. );
  710. error_status_t
  711. NmRpcCreateNetwork(
  712. [ in ] DWORD JoinSequence,
  713. [ in, string ] LPWSTR JoinerNodeId,
  714. [ in ] PNM_NETWORK_INFO NetworkInfo,
  715. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  716. );
  717. error_status_t
  718. NmRpcCreateInterface(
  719. [ in ] DWORD JoinSequence,
  720. [ in, string ] LPWSTR JoinerNodeId,
  721. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  722. );
  723. error_status_t
  724. NmRpcSetInterfaceInfo(
  725. [ in ] DWORD JoinSequence,
  726. [ in, string ] LPWSTR JoinerNodeId,
  727. [ in ] PNM_INTERFACE_INFO InterfaceInfo
  728. );
  729. error_status_t
  730. NmRpcDeleteInterface(
  731. [ in ] DWORD JoinSequence,
  732. [ in, string ] LPWSTR JoinerNodeId,
  733. [ in, string ] LPWSTR InterfaceId,
  734. [ out ] BOOLEAN * NetworkDeleted
  735. );
  736. error_status_t
  737. NmRpcJoinBegin(
  738. [in, string ] LPWSTR JoinerNodeId,
  739. [in, string ] LPWSTR JoinerNodeName,
  740. [ out ] LPDWORD SponsorNodeId,
  741. [ out ] LPDWORD JoinSequenceNumber,
  742. [ out, string ] LPWSTR * ClusnetEndpoint
  743. );
  744. error_status_t
  745. NmRpcCreateBinding(
  746. [ in ] DWORD JoinSequence,
  747. [ in, string ] LPWSTR JoinerNodeId,
  748. [ in, string ] LPWSTR JoinerInterfaceId,
  749. [ in, string ] LPWSTR MemberNodeId
  750. );
  751. error_status_t
  752. NmRpcPetitionForMembership(
  753. [ in ] DWORD JoinSequence,
  754. [ in, string ] LPCWSTR JoinerNodeId
  755. );
  756. error_status_t
  757. JoinAddNode(
  758. [ in, string ] LPCWSTR lpszNodeId
  759. );
  760. error_status_t
  761. DmSyncDatabase(
  762. [ out ] BYTE_PIPE reg_data
  763. );
  764. error_status_t
  765. TestRPCSecurity(
  766. );
  767. //
  768. // New structures added for version 2.0 (NT 5.0) that are understood
  769. // by NT4 SP4.
  770. //
  771. //
  772. // Node Configuration Information Structure
  773. //
  774. typedef struct _NM_NODE_INFO2{
  775. [string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
  776. [string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
  777. DWORD State;
  778. //
  779. // New fields in Version 2.0
  780. //
  781. DWORD NodeHighestVersion;
  782. DWORD NodeLowestVersion;
  783. } NM_NODE_INFO2, *PNM_NODE_INFO2;
  784. typedef struct _NM_NODE_ENUM2{
  785. DWORD NodeCount;
  786. [ size_is(NodeCount) ] NM_NODE_INFO2 NodeList[*];
  787. } NM_NODE_ENUM2, *PNM_NODE_ENUM2;
  788. //
  789. // Network Interface Configuration Information Structure
  790. //
  791. // Extension of NM_INTERFACE_INFO structure. Extended fields
  792. // are appended to the original structure.
  793. //
  794. typedef struct _NM_INTERFACE_INFO2 {
  795. [string] LPWSTR Id;
  796. [string] LPWSTR Name;
  797. [string] LPWSTR Description;
  798. [string] LPWSTR NodeId;
  799. [string] LPWSTR NetworkId;
  800. [string] LPWSTR AdapterName; // Field renamed, but location unchanged
  801. [string] LPWSTR Address;
  802. [string] LPWSTR ClusnetEndpoint;
  803. DWORD State;
  804. BOOLEAN Ignore;
  805. //
  806. // New fields in Version 2.0
  807. //
  808. [string] LPWSTR AdapterId;
  809. DWORD NetIndex;
  810. } NM_INTERFACE_INFO2, *PNM_INTERFACE_INFO2;
  811. typedef struct _NM_INTERFACE_ENUM2 {
  812. DWORD InterfaceCount;
  813. [ size_is(InterfaceCount) ] NM_INTERFACE_INFO2 InterfaceList[*];
  814. } NM_INTERFACE_ENUM2, *PNM_INTERFACE_ENUM2;
  815. cpp_quote("#define NmInvalidInterfaceNetIndex 0xFFFFFFFF")
  816. //
  817. // Network Interface State Information Structure
  818. //
  819. typedef struct _NM_INTERFACE_STATE_INFO {
  820. [string] LPWSTR Id;
  821. DWORD State;
  822. } NM_INTERFACE_STATE_INFO, *PNM_INTERFACE_STATE_INFO;
  823. typedef struct _NM_INTERFACE_STATE_ENUM {
  824. DWORD InterfaceCount;
  825. [ size_is(InterfaceCount) ] NM_INTERFACE_STATE_INFO InterfaceList[*];
  826. } NM_INTERFACE_STATE_ENUM, *PNM_INTERFACE_STATE_ENUM;
  827. typedef struct _NM_NETWORK_STATE_INFO {
  828. [string] LPWSTR Id;
  829. DWORD State;
  830. } NM_NETWORK_STATE_INFO, *PNM_NETWORK_STATE_INFO;
  831. typedef struct _NM_NETWORK_STATE_ENUM {
  832. DWORD NetworkCount;
  833. [ size_is(NetworkCount) ] NM_NETWORK_STATE_INFO NetworkList[*];
  834. } NM_NETWORK_STATE_ENUM, *PNM_NETWORK_STATE_ENUM;
  835. //
  836. // New routines added for version 2.0 (NT 5.0) that are understood
  837. // by NT4 SP4.
  838. //
  839. error_status_t
  840. NmRpcJoinBegin2(
  841. [in, string ] LPWSTR JoinerNodeId,
  842. [in, string ] LPWSTR JoinerNodeName,
  843. [in ] DWORD JoinerHighestVersion,
  844. [in ] DWORD JoinerLowestVersion,
  845. [ out ] LPDWORD SponsorNodeId,
  846. [ out ] LPDWORD JoinSequenceNumber,
  847. [ out, string ] LPWSTR * ClusnetEndpoint
  848. );
  849. error_status_t
  850. JoinAddNode2(
  851. [ in, string ] LPCWSTR lpszNodeId,
  852. [ in ] DWORD dwNodeHighestVersion,
  853. [ in ] DWORD dwNodeLowestVersion
  854. );
  855. error_status_t
  856. NmRpcEnumNodeDefinitions2(
  857. [ in ] DWORD JoinSequence,
  858. [ in, string ] LPWSTR JoinerNodeId,
  859. [ out ] PNM_NODE_ENUM2 * NodeEnum2
  860. );
  861. error_status_t
  862. NmRpcEnumInterfaceDefinitions2(
  863. [ in ] DWORD JoinSequence,
  864. [ in, string ] LPWSTR JoinerNodeId,
  865. [ out ] PNM_INTERFACE_ENUM2 * InterfaceEnum2
  866. );
  867. error_status_t
  868. NmRpcCreateNetwork2(
  869. [ in ] DWORD JoinSequence,
  870. [ in, string ] LPWSTR JoinerNodeId,
  871. [ in ] PNM_NETWORK_INFO NetworkInfo,
  872. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  873. );
  874. error_status_t
  875. NmRpcCreateInterface2(
  876. [ in ] DWORD JoinSequence,
  877. [ in, string ] LPWSTR JoinerNodeId,
  878. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  879. );
  880. error_status_t
  881. NmRpcSetInterfaceInfo2(
  882. [ in ] DWORD JoinSequence,
  883. [ in, string ] LPWSTR JoinerNodeId,
  884. [ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
  885. );
  886. error_status_t
  887. NmRpcSetNetworkName(
  888. [ in ] DWORD JoinSequence,
  889. [ in, string ] LPWSTR JoinerNodeId,
  890. [ in ] PNM_NETWORK_INFO NetworkInfo
  891. );
  892. error_status_t
  893. NmRpcReportJoinerInterfaceConnectivity(
  894. [ in ] DWORD JoinSequence,
  895. [ in, string ] LPWSTR JoinerNodeId,
  896. [ in, string ] LPWSTR ReportingInterfaceId,
  897. [ in ] PNM_CONNECTIVITY_VECTOR ConnectivityVector
  898. );
  899. error_status_t
  900. NmRpcEnumNetworkAndInterfaceStates(
  901. [ in ] DWORD JoinSequence,
  902. [ in, string ] LPWSTR JoinerNodeId,
  903. [ out ] PNM_NETWORK_STATE_ENUM * NetworkStateEnum,
  904. [ out ] PNM_INTERFACE_STATE_ENUM * InterfaceStateEnum
  905. );
  906. error_status_t
  907. NmRpcGetLeaderNodeId(
  908. [ in ] DWORD JoinSequence,
  909. [ in, string ] LPWSTR JoinerNodeId,
  910. [ out ] LPDWORD LeaderNodeId
  911. );
  912. //
  913. // New structures and procedures added for version 2.0 (NT 5.0)
  914. // that are not understood by NT4 SP4.
  915. //
  916. error_status_t
  917. JoinAddNode3(
  918. [ in, string ] LPCWSTR lpszNodeId,
  919. [ in ] DWORD dwNodeHighestVersion,
  920. [ in ] DWORD dwNodeLowestVersion,
  921. [ in ] DWORD dwNodeProductSuite
  922. );
  923. //
  924. // New structures and procedures added for version 2.1 (NT 5.1)
  925. // that are not understood by NT 5.0 or earlier
  926. //
  927. error_status_t
  928. NmRpcJoinBegin3(
  929. [in, string ] LPWSTR JoinerClusterInstanceId,
  930. [in, string ] LPWSTR JoinerNodeId,
  931. [in, string ] LPWSTR JoinerNodeName,
  932. [in ] DWORD JoinerHighestVersion,
  933. [in ] DWORD JoinerLowestVersion,
  934. [in ] DWORD JoinerMajorVersion,
  935. [in ] DWORD JoinerMinorVersion,
  936. [in, string ] LPWSTR JoinerCsdVersion,
  937. [in ] DWORD JoinerProductSuite,
  938. [ out ] LPDWORD SponsorNodeId,
  939. [ out ] LPDWORD JoinSequenceNumber,
  940. [ out, string ] LPWSTR * ClusnetEndpoint
  941. );
  942. error_status_t
  943. JoinAddNode4(
  944. [ in, string ] LPCWSTR lpszNodeId,
  945. [ in ] DWORD dwNodeHighestVersion,
  946. [ in ] DWORD dwNodeLowestVersion,
  947. [ in ] DWORD dwNodeProductSuite,
  948. [ in ] BOOL bIsNodeRunningWin64,
  949. [ in ] DWORD dwNodeProcessorArchitecture
  950. );
  951. error_status_t
  952. NmRpcGetNetworkMulticastKey(
  953. [ in, string ] LPWSTR JoinerNodeId,
  954. [ in, string ] LPWSTR NetworkId,
  955. [ out ] PNM_NETWORK_MULTICASTKEY * NetworkMutlicastKey
  956. );
  957. } // ExtroCluster interface
  958. ////////////////////////////////////////////////////////////////////////////
  959. //
  960. // Join Version RPC Interface Definition
  961. //
  962. // Don't ever change this interface unless you really, really,
  963. // really know what you're doing.
  964. //
  965. ////////////////////////////////////////////////////////////////////////////
  966. [
  967. uuid(6e17aaa0-1a47-11d1-98bd-0000f875292e),
  968. version(2.0)
  969. ]
  970. interface JoinVersion
  971. {
  972. import "wtypes.idl";
  973. error_status_t
  974. CsRpcGetJoinVersionData(
  975. [ in ] DWORD JoiningNodeId,
  976. [ in ] DWORD JoinerHighestVersion,
  977. [ in ] DWORD JoinerLowestVersion,
  978. [ out ] LPDWORD SponsorNodeId,
  979. [ out ] LPDWORD ClusterHighestVersion,
  980. [ out ] LPDWORD ClusterLowestVersion,
  981. [ out ] LPDWORD JoinStatus
  982. );
  983. } // JoinVersion interface
  984. cpp_quote("#endif //_CLUSRPC_INCLUDED_")