1import "winreg.idl", "misc.idl";
2
3#include "idl_types.h"
4
5[
6	uuid("b97db8b2-4c63-11cf-bff6-08002be23f2f"),
7	version(3.0),
8	pointer_default(unique),
9	endpoint("ncacn_ip_tcp:"),
10	authservice("MSServerClusterMgmtAPI"),
11	helpstring("Failover Cluster Management API (clusapi)")
12]
13#define MAX_CLUSTER_CONTROL_CODE_BUFFER_SIZE 0x7FFFFFFF
14	interface clusapi
15{
16#if 0
17	/*
18	 * pidl does not yet have a real [context_handle] implementation, so we
19	 * just use some defines here.
20	 */
21
22	typedef [context_handle] void *HCLUSTER_RPC;
23	typedef [context_handle] void *HNODE_RPC;
24	typedef [context_handle] void *HGROUP_RPC;
25	typedef [context_handle] void *HRES_RPC;
26	typedef [context_handle] void *HKEY_RPC;
27	typedef [context_handle] void *HNOTIFY_RPC;
28	typedef [context_handle] void *HNETWORK_RPC;
29	typedef [context_handle] void *HNETINTERFACE_RPC;
30	typedef [context_handle] void *HBATCH_PORT_RPC;
31#else
32#define HCLUSTER_RPC policy_handle
33#define HNODE_RPC policy_handle
34#define HGROUP_RPC policy_handle
35#define HRES_RPC policy_handle
36#define HKEY_RPC policy_handle
37#define HNOTIFY_RPC policy_handle
38#define HNETWORK_RPC policy_handle
39#define HNETINTERFACE_RPC policy_handle
40#define HBATCH_PORT_RPC policy_handle
41#endif
42
43	typedef struct {
44		[ size_is( cbInSecurityDescriptor ), length_is( cbOutSecurityDescriptor ) ] uint8 *lpSecurityDescriptor;
45		uint32 cbInSecurityDescriptor;
46		uint32 cbOutSecurityDescriptor;
47	} RPC_SECURITY_DESCRIPTOR;
48
49	typedef struct {
50		uint32 nLength;
51		RPC_SECURITY_DESCRIPTOR RpcSecurityDescriptor;
52		long bInheritHandle;
53	} RPC_SECURITY_ATTRIBUTES;
54
55	typedef struct {
56		[value(20)] uint32 dwSize;
57		uint32 dwClusterHighestVersion;
58		uint32 dwClusterLowestVersion;
59		uint32 dwFlags;
60		uint32 dwReserved;
61	} CLUSTER_OPERATIONAL_VERSION_INFO;
62
63	typedef struct {
64		uint32	 NodeId;
65		boolean8  SetAttempted;
66		uint32	 ReturnStatus;
67	} IDL_CLUSTER_SET_PASSWORD_STATUS;
68
69	typedef enum {
70		IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1
71	} IDL_CLUSTER_SET_PASSWORD_FLAGS;
72
73	typedef struct {
74		uint32	dwVersion;
75		uint32	dwGroupType;
76	} CLUSTER_CREATE_GROUP_INFO_RPC;
77
78	/*****************/
79	/* Function 0x00 */
80
81#if 0
82	/*
83	 * pidl cannot generate code for functions that return structures in
84	 * IDL, therefore pretend the function is void and add the returned
85	 * structure as an out parameter. This is what we do with pretty much
86	 * all the Open calls right now in this interface - gd
87	 */
88
89	HCLUSTER_RPC
90	clusapi_OpenCluster(
91		[ out ] WERROR *Status
92	);
93#else
94	void
95	clusapi_OpenCluster(
96		[ out ] WERROR *Status,
97		[ out ] HCLUSTER_RPC *Cluster
98	);
99#endif
100
101	/*****************/
102	/* Function 0x01 */
103
104	WERROR
105	clusapi_CloseCluster(
106		[ in, out ] HCLUSTER_RPC *Cluster
107	);
108
109	/*****************/
110	/* Function 0x02 */
111
112	WERROR
113	clusapi_SetClusterName(
114		[ in, string ] [charset(UTF16)] uint16 *NewClusterName,
115		[ out ] WERROR *rpc_status
116	);
117
118	/*****************/
119	/* Function 0x03 */
120
121	WERROR
122	clusapi_GetClusterName(
123		[ out, string ] [charset(UTF16)] uint16 **ClusterName,
124		[ out, string ] [charset(UTF16)] uint16 **NodeName
125	);
126
127	/*****************/
128	/* Function 0x04 */
129
130	WERROR
131	clusapi_GetClusterVersion(
132		[ out ] uint16 *lpwMajorVersion,
133		[ out ] uint16 *lpwMinorVersion,
134		[ out ] uint16 *lpwBuildNumber,
135		[ out, string ] [charset(UTF16)] uint16 **lpszVendorId,
136		[ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion
137	);
138
139	/*****************/
140	/* Function 0x05 */
141
142	WERROR
143	clusapi_GetQuorumResource(
144		[ out, string ] [charset(UTF16)] uint16 **lpszResourceName,
145		[ out, string ] [charset(UTF16)] uint16 **lpszDeviceName,
146		[ out ] uint32 *pdwMaxQuorumLogSize,
147		[ out ] WERROR *rpc_status
148	);
149
150	/*****************/
151	/* Function 0x06 */
152
153	WERROR
154	clusapi_SetQuorumResource(
155		[ in ] HRES_RPC hResource,
156		[ in, string ] [charset(UTF16)] uint16 *lpszDeviceName,
157		[ in ] uint32	 dwMaxQuorumLogSize,
158		[ out ] WERROR *rpc_status
159	);
160
161	typedef [bitmap32bit] bitmap {
162		CLUSTER_ENUM_NODE			= 0x00000001,
163		CLUSTER_ENUM_RESTYPE			= 0x00000002,
164		CLUSTER_ENUM_RESOURCE			= 0x00000004,
165		CLUSTER_ENUM_GROUP			= 0x00000008,
166		CLUSTER_ENUM_NETWORK			= 0x00000010,
167		CLUSTER_ENUM_NETINTERFACE		= 0x00000020,
168		CLUSTER_ENUM_INTERNAL_NETWORK		= 0x80000000,
169		CLUSTER_ENUM_SHARED_VOLUME_RESOURCE	= 0x40000000
170	} ClusterEnumType;
171
172	typedef struct {
173		ClusterEnumType Type;
174		[string] [charset(UTF16)] uint16 *Name;
175	} ENUM_ENTRY;
176
177	typedef struct {
178		uint32 EntryCount;
179		[size_is(EntryCount)] ENUM_ENTRY Entry[*];
180	} ENUM_LIST;
181
182	typedef struct {
183		[string] [charset(UTF16)] uint16 *Name;
184		[string] [charset(UTF16)] uint16 *Id;
185		uint32 dwState;
186		[string] [charset(UTF16)] uint16 *Owner;
187		uint32 dwFlags;
188		uint32 cbProperties;
189		[size_is(cbProperties)] uint8* Properties;
190		uint32 cbRoProperties;
191		[size_is(cbRoProperties)] uint8* RoProperties;
192	} GROUP_ENUM_ENTRY;
193
194	typedef struct {
195		[string] [charset(UTF16)] uint16 *Name;
196		[string] [charset(UTF16)] uint16 *Id;
197		[string] [charset(UTF16)] uint16 *OwnerName;
198		[string] [charset(UTF16)] uint16 *OwnerId;
199		uint32 cbProperties;
200		[size_is(cbProperties)] uint8* Properties;
201		uint32 cbRoProperties;
202		[size_is(cbRoProperties)] uint8* RoProperties;
203	} RESOURCE_ENUM_ENTRY;
204
205	typedef struct {
206		uint32 EntryCount;
207		[size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*];
208	} GROUP_ENUM_LIST;
209
210	typedef struct {
211		uint32 EntryCount;
212		[size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*];
213	} RESOURCE_ENUM_LIST;
214
215	/*****************/
216	/* Function 0x07 */
217
218	WERROR
219	clusapi_CreateEnum(
220		[ in ] ClusterEnumType dwType,
221		[ out ] ENUM_LIST **ReturnEnum,
222		[ out ] WERROR *rpc_status
223	);
224
225	/*****************/
226	/* Function 0x08 */
227
228#if 0
229	HRES_RPC
230	clusapi_OpenResource(
231		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
232		[ out ] WERROR *Status,
233		[ out ] WERROR *rpc_status
234	);
235#else
236	void
237	clusapi_OpenResource(
238		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
239		[ out ] WERROR *Status,
240		[ out ] WERROR *rpc_status,
241		[ out ] HRES_RPC *hResource
242	);
243#endif
244	/*****************/
245	/* Function 0x09 */
246
247	typedef [v1_enum] enum {
248		CLUSTER_RESOURCE_DEFAULT_MONITOR	= 0x00000000,
249		CLUSTER_RESOURCE_SEPARATE_MONITOR	= 0x00000001
250	} clusapi_CreateResourceFlags;
251
252#if 0
253	HRES_RPC
254	clusapi_CreateResource(
255		[ in ] HGROUP_RPC hGroup,
256		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
257		[ in, string ] [charset(UTF16)] uint16 *lpszResourceType,
258		[ in ] clusapi_CreateResourceFlags dwFlags,
259		[ out ] WERROR *Status,
260		[ out ] WERROR *rpc_status
261	);
262#else
263	void
264	clusapi_CreateResource(
265		[ in ] HGROUP_RPC hGroup,
266		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
267		[ in, string ] [charset(UTF16)] uint16 *lpszResourceType,
268		[ in ] clusapi_CreateResourceFlags dwFlags,
269		[ out ] WERROR *Status,
270		[ out ] WERROR *rpc_status,
271		[ out ] HRES_RPC *hResource
272	);
273#endif
274	/*****************/
275	/* Function 0x0A */
276
277	WERROR
278	clusapi_DeleteResource(
279		[ in ] HRES_RPC hResource,
280		[ out ] WERROR *rpc_status
281	);
282
283	/*****************/
284	/* Function 0x0B */
285
286	WERROR
287	clusapi_CloseResource(
288		[ in, out ] HRES_RPC *Resource
289	);
290
291	/*****************/
292	/* Function 0x0C */
293
294	typedef [v1_enum] enum {
295		ClusterResourceInitializing	= 0x00000001,
296		ClusterResourceOnline		= 0x00000002,
297		ClusterResourceOffline		= 0x00000003,
298		ClusterResourceFailed		= 0x00000004,
299		ClusterResourceOnlinePending	= 0x00000081,
300		ClusterResourceOfflinePending	= 0x00000082,
301		ClusterResourceStateUnknown	= 0xFFFFFFFF
302	} clusapi_ClusterResourceState;
303
304	WERROR
305	clusapi_GetResourceState(
306		[ in ] HRES_RPC hResource,
307		[ out ] clusapi_ClusterResourceState *State,
308		[ out, string ] [charset(UTF16)] uint16 **NodeName,
309		[ out, string ] [charset(UTF16)] uint16 **GroupName,
310		[ out ] WERROR *rpc_status
311	);
312
313	/*****************/
314	/* Function 0x0D */
315
316	WERROR
317	clusapi_SetResourceName(
318		[ in ] HRES_RPC hResource,
319		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
320		[ out ] WERROR *rpc_status
321	);
322
323	/*****************/
324	/* Function 0x0E */
325
326	WERROR
327	clusapi_GetResourceId(
328		[ in ] HRES_RPC hResource,
329		[ out, string ] [charset(UTF16)] uint16 **pGuid,
330		[ out ] WERROR *rpc_status
331	);
332
333	/*****************/
334	/* Function 0x0F */
335
336	WERROR
337	clusapi_GetResourceType(
338		[ in ] HRES_RPC hResource,
339		[ out, string ] [charset(UTF16)] uint16 **lpszResourceType,
340		[ out ] WERROR *rpc_status
341	);
342
343	/*****************/
344	/* Function 0x10 */
345
346	WERROR
347	clusapi_FailResource(
348		[ in ] HRES_RPC hResource,
349		[ out ] WERROR *rpc_status
350	);
351
352	/*****************/
353	/* Function 0x11 */
354
355	WERROR
356	clusapi_OnlineResource(
357		[ in ] HRES_RPC hResource,
358		[ out ] WERROR *rpc_status
359	);
360
361	/*****************/
362	/* Function 0x12 */
363
364	WERROR
365	clusapi_OfflineResource(
366		[ in ] HRES_RPC hResource,
367		[ out ] WERROR *rpc_status
368	);
369
370	/*****************/
371	/* Function 0x13 */
372
373	WERROR
374	clusapi_AddResourceDependency(
375		[ in ] HRES_RPC hResource,
376		[ in ] HRES_RPC hDependsOn,
377		[ out ] WERROR *rpc_status
378	);
379
380	/*****************/
381	/* Function 0x14 */
382
383	WERROR
384	clusapi_RemoveResourceDependency(
385		[ in ] HRES_RPC hResource,
386		[ in ] HRES_RPC hDependsOn,
387		[ out ] WERROR *rpc_status
388	);
389
390	/*****************/
391	/* Function 0x15 */
392
393	WERROR
394	clusapi_CanResourceBeDependent(
395		[ in ] HRES_RPC hResource,
396		[ in ] HRES_RPC hResourceDependent,
397		[ out ] WERROR *rpc_status
398	);
399
400	/*****************/
401	/* Function 0x16 */
402
403	WERROR
404	clusapi_CreateResEnum(
405		[ in ] HRES_RPC hResource,
406		[ in ] uint32 dwType,
407		[ out ] ENUM_LIST **ReturnEnum,
408		[ out ] WERROR *rpc_status
409	);
410
411	/*****************/
412	/* Function 0x17 */
413
414	WERROR
415	clusapi_AddResourceNode(
416		[ in ] HRES_RPC hResource,
417		[ in ] HNODE_RPC hNode,
418		[ out ] WERROR *rpc_status
419	);
420
421	/*****************/
422	/* Function 0x18 */
423
424	WERROR
425	clusapi_RemoveResourceNode(
426		[ in ] HRES_RPC hResource,
427		[ in ] HNODE_RPC hNode,
428		[ out ] WERROR *rpc_status
429	);
430
431	/*****************/
432	/* Function 0x19 */
433
434	WERROR
435	clusapi_ChangeResourceGroup(
436		[ in ] HRES_RPC hResource,
437		[ in ] HGROUP_RPC hGroup,
438		[ out ] WERROR *rpc_status
439	);
440
441	/*****************/
442	/* Function 0x1A */
443
444	WERROR
445	clusapi_CreateResourceType(
446		[ in, string ] [charset(UTF16)] uint16 *lpszTypeName,
447		[ in, string ] [charset(UTF16)] uint16 *lpszDisplayName,
448		[ in, string ] [charset(UTF16)] uint16 *lpszDllName,
449		[ in ] uint32 dwLooksAlive,
450		[ in ] uint32 dwIsAlive,
451		[ out ] WERROR *rpc_status
452	);
453
454	/*****************/
455	/* Function 0x1B */
456
457	WERROR
458	clusapi_DeleteResourceType(
459		[ in, string ] [charset(UTF16)] uint16 *lpszTypeName,
460		[ out ] WERROR *rpc_status
461	);
462
463	/*****************/
464	/* Function 0x1C */
465#if 0
466	HKEY_RPC
467	clusapi_GetRootKey(
468		[ in ] winreg_AccessMask samDesired,
469		[ out ] WERROR *Status,
470		[ out ] WERROR *rpc_status
471	);
472#else
473	void
474	clusapi_GetRootKey(
475		[ in ] winreg_AccessMask samDesired,
476		[ out ] WERROR *Status,
477		[ out ] WERROR *rpc_status,
478		[ out ] HKEY_RPC *phKey
479	);
480#endif
481	/*****************/
482	/* Function 0x1D */
483#if 0
484	HKEY_RPC
485	clusapi_CreateKey(
486		[ in ] HKEY_RPC hKey,
487		[ in, string ] [charset(UTF16)] uint16 *lpSubKey,
488		[ in ] uint32 dwOptions,
489		[ in ] winreg_AccessMask samDesired,
490		[ in, unique ] RPC_SECURITY_ATTRIBUTES *lpSecurityAttributes,
491		[ out ] uint32 *lpdwDisposition,
492		[ out ] WERROR *Status,
493		[ out ] WERROR *rpc_status
494	);
495#else
496	void
497	clusapi_CreateKey(
498		[ in ] HKEY_RPC hKey,
499		[ in, string ] [charset(UTF16)] uint16 *lpSubKey,
500		[ in ] uint32 dwOptions,
501		[ in ] winreg_AccessMask samDesired,
502		[ in, unique ] RPC_SECURITY_ATTRIBUTES *lpSecurityAttributes,
503		[ out ] uint32 *lpdwDisposition,
504		[ out ] WERROR *Status,
505		[ out ] WERROR *rpc_status,
506		[ out ] HKEY_RPC *phKey
507	);
508#endif
509	/*****************/
510	/* Function 0x1E */
511#if 0
512	HKEY_RPC
513	clusapi_OpenKey(
514		[ in ] HKEY_RPC hKey,
515		[ in, string ] [charset(UTF16)] uint16 *lpSubKey,
516		[ in ] winreg_AccessMask samDesired,
517		[ out ] WERROR *Status,
518		[ out ] WERROR *rpc_status
519	);
520#else
521	void
522	clusapi_OpenKey(
523		[ in ] HKEY_RPC hKey,
524		[ in, string ] [charset(UTF16)] uint16 *lpSubKey,
525		[ in ] winreg_AccessMask samDesired,
526		[ out ] WERROR *Status,
527		[ out ] WERROR *rpc_status,
528		[ out ] HKEY_RPC *phKey
529	);
530#endif
531	/*****************/
532	/* Function 0x1F */
533
534	WERROR
535	clusapi_EnumKey(
536		[ in ] HKEY_RPC hKey,
537		[ in ] uint32 dwIndex,
538		[ out, string ] [charset(UTF16)] uint16 **KeyName,
539		[ out ] NTTIME *lpftLastWriteTime,
540		[ out ] WERROR *rpc_status
541	);
542
543	/*****************/
544	/* Function 0x20 */
545
546	WERROR
547	clusapi_SetValue(
548		[ in ] HKEY_RPC hKey,
549		[ in, string ] [charset(UTF16)] uint16 *lpValueName,
550		[ in ] winreg_Type dwType,
551		[ in, size_is(cbData) ] uint8 *lpData,
552		[ in ] uint32 cbData,
553		[ out ] WERROR *rpc_status
554	);
555
556	/*****************/
557	/* Function 0x21 */
558
559	WERROR
560	clusapi_DeleteValue(
561		[ in ] HKEY_RPC hKey,
562		[ in, string ] [charset(UTF16)] uint16 *lpValueName,
563		[ out ] WERROR *rpc_status
564	);
565
566	/*****************/
567	/* Function 0x22 */
568
569	WERROR
570	clusapi_QueryValue(
571		[ in ] HKEY_RPC hKey,
572		[ in, string ] [charset(UTF16)] uint16 *lpValueName,
573		[ out ] winreg_Type *lpValueType,
574		[ out, size_is(cbData) ] uint8 *lpData,
575		[ in ] uint32 cbData,
576		[ out ] uint32 *lpcbRequired,
577		[ out ] WERROR *rpc_status
578	);
579
580	/*****************/
581	/* Function 0x23 */
582
583	WERROR
584	clusapi_DeleteKey(
585		[ in ] HKEY_RPC hKey,
586		[ in, string ] [charset(UTF16)] uint16 *lpSubKey,
587		[ out ] WERROR *rpc_status
588	);
589
590	/*****************/
591	/* Function 0x24 */
592
593	WERROR
594	clusapi_EnumValue(
595		[ in ] HKEY_RPC hKey,
596		[ in ] uint32 dwIndex,
597		[ out, string ] [charset(UTF16)] uint16 **lpValueName,
598		[ out ] winreg_Type *lpType,
599		[ out, size_is(*lpcbData) ] uint8 *lpData,
600		[ in, out ] uint32 *lpcbData,
601		[ out ] uint32 *TotalSize,
602		[ out ] WERROR *rpc_status
603	);
604
605	/*****************/
606	/* Function 0x25 */
607
608	WERROR
609	clusapi_CloseKey(
610		[ in, out ] HKEY_RPC *pKey
611	);
612
613	/*****************/
614	/* Function 0x26 */
615
616	WERROR
617	clusapi_QueryInfoKey(
618		[ in ] HKEY_RPC hKey,
619		[ out ] uint32 *lpcSubKeys,
620		[ out ] uint32 *lpcbMaxSubKeyLen,
621		[ out ] uint32 *lpcValues,
622		[ out ] uint32 *lpcbMaxValueNameLen,
623		[ out ] uint32 *lpcbMaxValueLen,
624		[ out ] uint32 *lpcbSecurityDescriptor,
625		[ out ] NTTIME *lpftLastWriteTime,
626		[ out ] WERROR *rpc_status
627	);
628
629	/*****************/
630	/* Function 0x27 */
631
632	WERROR
633	clusapi_SetKeySecurity(
634		[ in ] HKEY_RPC hKey,
635		[ in ] uint32 SecurityInformation,
636		[ in ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor,
637		[ out ] WERROR *rpc_status
638	);
639
640	/*****************/
641	/* Function 0x28 */
642
643	WERROR
644	clusapi_GetKeySecurity(
645		[ in ] HKEY_RPC hKey,
646		[ in ] uint32 SecurityInformation,
647		[ in, out ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor,
648		[ out ] WERROR *rpc_status
649	);
650
651	/*****************/
652	/* Function 0x29 */
653#if 0
654	HGROUP_RPC
655	clusapi_OpenGroup(
656		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
657		[ out ] WERROR *Status,
658		[ out ] WERROR *rpc_status
659	);
660#else
661	void
662	clusapi_OpenGroup(
663		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
664		[ out ] WERROR *Status,
665		[ out ] WERROR *rpc_status,
666		[ out ] HGROUP_RPC *hGroup
667	);
668#endif
669	/*****************/
670	/* Function 0x2A */
671#if 0
672	HGROUP_RPC
673	clusapi_CreateGroup(
674		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
675		[ out ] WERROR *Status,
676		[ out ] WERROR *rpc_status
677	);
678#else
679	void
680	clusapi_CreateGroup(
681		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
682		[ out ] WERROR *Status,
683		[ out ] WERROR *rpc_status,
684		[ out ] HGROUP_RPC *hGroup
685	);
686#endif
687	/*****************/
688	/* Function 0x2B */
689
690	WERROR
691	clusapi_DeleteGroup(
692		[ in ] HGROUP_RPC Group,
693		[ in ] boolean8 force,
694		[ out ] WERROR *rpc_status
695	);
696
697	/*****************/
698	/* Function 0x2C */
699
700	WERROR
701	clusapi_CloseGroup(
702		[ in, out ] HGROUP_RPC *Group
703	);
704
705	/*****************/
706	/* Function 0x2D */
707
708	typedef [v1_enum] enum {
709		ClusterGroupOnline		= 0x00000000,
710		ClusterGroupOffline		= 0x00000001,
711		ClusterGroupFailed		= 0x00000002,
712		ClusterGroupPartialOnline	= 0x00000003,
713		ClusterGroupPending		= 0x00000004,
714		ClusterGroupStateUnknown	= 0xFFFFFFFF
715	} clusapi_ClusterGroupState;
716
717	WERROR
718	clusapi_GetGroupState(
719		[ in ] HGROUP_RPC hGroup,
720		[ out ] clusapi_ClusterGroupState *State,
721		[ out, string ] [charset(UTF16)] uint16 **NodeName,
722		[ out ] WERROR *rpc_status
723	);
724
725	/*****************/
726	/* Function 0x2E */
727
728	WERROR
729	clusapi_SetGroupName(
730		[ in ] HGROUP_RPC hGroup,
731		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
732		[ out ] WERROR *rpc_status
733	);
734
735	/*****************/
736	/* Function 0x2F */
737
738	WERROR
739	clusapi_GetGroupId(
740		[ in ] HGROUP_RPC hGroup,
741		[ out, string ] [charset(UTF16)] uint16 **pGuid,
742		[ out ] WERROR *rpc_status
743	);
744
745	/*****************/
746	/* Function 0x30 */
747
748	WERROR
749	clusapi_GetNodeId(
750		[ in ] HNODE_RPC hNode,
751		[ out, string ] [charset(UTF16)] uint16 **pGuid,
752		[ out ] WERROR *rpc_status
753	);
754
755	/*****************/
756	/* Function 0x31 */
757
758	WERROR
759	clusapi_OnlineGroup(
760		[ in ] HGROUP_RPC hGroup,
761		[ out ] WERROR *rpc_status
762	);
763
764	/*****************/
765	/* Function 0x32 */
766
767	WERROR
768	clusapi_OfflineGroup(
769		[ in ] HGROUP_RPC hGroup,
770		[ out ] WERROR *rpc_status
771	);
772
773	/*****************/
774	/* Function 0x33 */
775
776	WERROR
777	clusapi_MoveGroup(
778		[ in ] HGROUP_RPC hGroup,
779		[ out ] WERROR *rpc_status
780	);
781
782	/*****************/
783	/* Function 0x34 */
784
785	WERROR
786	clusapi_MoveGroupToNode(
787		[ in ] HGROUP_RPC hGroup,
788		[ in ] HNODE_RPC hNode,
789		[ out ] WERROR *rpc_status
790	);
791
792	/*****************/
793	/* Function 0x35 */
794
795	typedef [bitmap32bit] bitmap {
796		CLUSTER_GROUP_ENUM_CONTAINS		= 0x00000001,
797		CLUSTER_GROUP_ENUM_NODES		= 0x00000002
798	} ClusterGroupEnumType;
799
800	WERROR
801	clusapi_CreateGroupResourceEnum(
802		[ in ] HGROUP_RPC hGroup,
803		[ in ] ClusterGroupEnumType dwType,
804		[ out ] ENUM_LIST **ReturnEnum,
805		[ out ] WERROR *rpc_status
806	);
807
808	/*****************/
809	/* Function 0x36 */
810
811	WERROR
812	clusapi_SetGroupNodeList(
813		[ in ] HGROUP_RPC hGroup,
814		[ in, unique, size_is(cchListSize) ] uint16 *multiSzNodeList,
815		[ in ] uint32 cchListSize,
816		[ out ] WERROR *rpc_status
817	);
818
819	/*****************/
820	/* Function 0x37 */
821#if 0
822	HNOTIFY_RPC
823	clusapi_CreateNotify(
824		[ out ] WERROR *Status,
825		[ out ] WERROR *rpc_status
826	);
827#else
828	void
829	clusapi_CreateNotify(
830		[ out ] WERROR *Status,
831		[ out ] WERROR *rpc_status,
832		[ out ] HNOTIFY_RPC *hNotify
833	);
834#endif
835	/*****************/
836	/* Function 0x38 */
837
838	WERROR
839	clusapi_CloseNotify(
840		[ in, out ] HNOTIFY_RPC *Notify
841	);
842
843	/*****************/
844	/* Function 0x39 */
845
846	WERROR
847	clusapi_AddNotifyCluster(
848		[ in ] HNOTIFY_RPC hNotify,
849		[ in ] HCLUSTER_RPC hCluster,
850		[ in ] uint32 dwFilter,
851		[ in ] uint32 dwNotifyKey,
852		[ out ] WERROR *rpc_status
853	);
854
855	/*****************/
856	/* Function 0x3A */
857
858	WERROR
859	clusapi_AddNotifyNode(
860		[ in ] HNOTIFY_RPC hNotify,
861		[ in ] HNODE_RPC hNode,
862		[ in ] uint32 dwFilter,
863		[ in ] uint32 dwNotifyKey,
864		[ out ] uint32 *dwStateSequence,
865		[ out ] WERROR *rpc_status
866	);
867
868	/*****************/
869	/* Function 0x3B */
870
871	WERROR
872	clusapi_AddNotifyGroup(
873		[ in ] HNOTIFY_RPC hNotify,
874		[ in ] HGROUP_RPC hGroup,
875		[ in ] uint32 dwFilter,
876		[ in ] uint32 dwNotifyKey,
877		[ out ] uint32 *dwStateSequence,
878		[ out ] WERROR *rpc_status
879	);
880
881	/*****************/
882	/* Function 0x3C */
883
884	WERROR
885	clusapi_AddNotifyResource(
886		[ in ] HNOTIFY_RPC hNotify,
887		[ in ] HRES_RPC hResource,
888		[ in ] uint32 dwFilter,
889		[ in ] uint32 dwNotifyKey,
890		[ out ] uint32 *dwStateSequence,
891		[ out ] WERROR *rpc_status
892	);
893
894	/*****************/
895	/* Function 0x3D */
896
897	WERROR
898	clusapi_AddNotifyKey(
899		[ in ] HNOTIFY_RPC hNotify,
900		[ in ] HKEY_RPC hKey,
901		[ in ] uint32 dwNotifyKey,
902		[ in ] uint32 Filter,
903		[ in ] boolean8 WatchSubTree,
904		[ out ] WERROR *rpc_status
905	);
906
907	/*****************/
908	/* Function 0x3E */
909
910	WERROR
911	clusapi_ReAddNotifyNode(
912		[ in ] HNOTIFY_RPC hNotify,
913		[ in ] HNODE_RPC hNode,
914		[ in ] uint32 dwFilter,
915		[ in ] uint32 dwNotifyKey,
916		[ in ] uint32 StateSequence,
917		[ out ] WERROR *rpc_status
918	);
919
920	/*****************/
921	/* Function 0x3F */
922
923	WERROR
924	clusapi_ReAddNotifyGroup(
925		[ in ] HNOTIFY_RPC hNotify,
926		[ in ] HGROUP_RPC hGroup,
927		[ in ] uint32 dwFilter,
928		[ in ] uint32 dwNotifyKey,
929		[ in ] uint32 StateSequence,
930		[ out ] WERROR *rpc_status
931	);
932
933	/*****************/
934	/* Function 0x40 */
935
936	WERROR
937	clusapi_ReAddNotifyResource(
938		[ in ] HNOTIFY_RPC hNotify,
939		[ in ] HRES_RPC hResource,
940		[ in ] uint32 dwFilter,
941		[ in ] uint32 dwNotifyKey,
942		[ in ] uint32 StateSequence,
943		[ out ] WERROR *rpc_status
944	);
945
946	/*****************/
947	/* Function 0x41 */
948
949	WERROR
950	clusapi_GetNotify(
951		[ in ] HNOTIFY_RPC hNotify,
952		[ out ] uint32 *dwNotifyKey,
953		[ out ] uint32 *dwFilter,
954		[ out ] uint32 *dwStateSequence,
955		[ out, string ] [charset(UTF16)] uint16 **Name,
956		[ out ] WERROR *rpc_status
957	);
958
959	/*****************/
960	/* Function 0x42 */
961#if 0
962	HNODE_RPC
963	clusapi_OpenNode(
964		[ in, string ] [charset(UTF16)] uint16 *lpszNodeName,
965		[ out ] WERROR *Status,
966		[ out ] WERROR *rpc_status
967	);
968#else
969	void
970	clusapi_OpenNode(
971		[ in, string ] [charset(UTF16)] uint16 *lpszNodeName,
972		[ out ] WERROR *Status,
973		[ out ] WERROR *rpc_status,
974		[ out ] HNODE_RPC *hNode
975	);
976#endif
977	/*****************/
978	/* Function 0x43 */
979
980	WERROR
981	clusapi_CloseNode(
982		[ in, out ] HNODE_RPC *Node
983	);
984
985	/*****************/
986	/* Function 0x44 */
987
988	typedef [v1_enum] enum {
989		ClusterNodeUp		= 0x00000000,
990		ClusterNodeDown		= 0x00000001,
991		ClusterNodePaused	= 0x00000002,
992		ClusterNodeJoining	= 0x00000003,
993		ClusterNodeStateUnknown	= 0xFFFFFFFF
994	} clusapi_ClusterNodeState;
995
996	WERROR
997	clusapi_GetNodeState(
998		[ in ] HNODE_RPC hNode,
999		[ out ] clusapi_ClusterNodeState *State,
1000		[ out ] WERROR *rpc_status
1001	);
1002
1003	/*****************/
1004	/* Function 0x45 */
1005
1006	WERROR
1007	clusapi_PauseNode(
1008		[ in ] HNODE_RPC hNode,
1009		[ out ] WERROR *rpc_status
1010	);
1011
1012	/*****************/
1013	/* Function 0x46 */
1014
1015	WERROR
1016	clusapi_ResumeNode(
1017		[ in ] HNODE_RPC hNode,
1018		[ out ] WERROR *rpc_status
1019	);
1020
1021	/*****************/
1022	/* Function 0x47 */
1023
1024	WERROR
1025	clusapi_EvictNode(
1026		[ in ] HNODE_RPC hNode,
1027		[ out ] WERROR *rpc_status
1028	);
1029
1030	/*****************/
1031	/* Function 0x48 */
1032
1033	WERROR
1034	clusapi_NodeResourceControl(
1035		[ in ] HRES_RPC hResource,
1036		[ in ] HNODE_RPC hNode,
1037		[ in ] uint32 dwControlCode,
1038		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1039		[ in ] uint32 nInBufferSize,
1040		[ out, size_is(nOutBufferSize),
1041			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1042		[ in ] uint32 nOutBufferSize,
1043		[ out ] uint32 *lpBytesReturned,
1044		[ out ] uint32 *lpcbRequired,
1045		[ out ] WERROR *rpc_status
1046	);
1047
1048	/*****************/
1049	/* Function 0x49 */
1050
1051	typedef [v1_enum] enum {
1052		CLUS_RESCLASS_UNKNOWN	= 0x00000000,
1053		CLUS_RESCLASS_STORAGE	= 0x00000001,
1054		CLUS_RESCLASS_NETWORK	= 0x00000002
1055	} clusapi_ResourceClass;
1056
1057	typedef [public] struct {
1058		clusapi_ResourceClass Class;
1059		uint32 SubClass;
1060	} CLUS_RESOURCE_CLASS_INFO;
1061
1062	typedef [v1_enum] enum {
1063		CLUSCTL_RESOURCE_UNKNOWN			= 0x01000000,
1064		CLUSCTL_RESOURCE_GET_CHARACTERISTICS		= 0x01000005,
1065		CLUSCTL_RESOURCE_GET_FLAGS			= 0x01000009,
1066		CLUSCTL_RESOURCE_GET_CLASS_INFO			= 0x0100000D,
1067		CLUSCTL_RESOURCE_GET_REQUIRED_DEPENDENCIES	= 0x01000011,
1068		CLUSCTL_RESOURCE_GET_NAME			= 0x01000029,
1069		CLUSCTL_RESOURCE_GET_RESOURCE_TYPE		= 0x0100002D,
1070		CLUSCTL_RESOURCE_GET_ID				= 0x01000039,
1071		CLUSCTL_RESOURCE_ENUM_COMMON_PROPERTIES		= 0x01000051,
1072		CLUSCTL_RESOURCE_GET_RO_COMMON_PROPERTIES	= 0x01000055,
1073		CLUSCTL_RESOURCE_GET_COMMON_PROPERTIES		= 0x01000059,
1074		CLUSCTL_RESOURCE_SET_COMMON_PROPERTIES		= 0x0140005E,
1075		CLUSCTL_RESOURCE_VALIDATE_COMMON_PROPERTIES	= 0x01000061,
1076		CLUSCTL_RESOURCE_GET_COMMON_PROPERTY_FMTS	= 0x01000065,
1077		CLUSCTL_RESOURCE_ENUM_PRIVATE_PROPERTIES	= 0x01000079,
1078		CLUSCTL_RESOURCE_GET_RO_PRIVATE_PROPERTIES	= 0x0100007D,
1079		CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTIES		= 0x01000081,
1080		CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES		= 0x01400086,
1081		CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES	= 0x01000089,
1082		CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTY_FMTS	= 0x0100008D,
1083		CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT	= 0x014000A2,
1084		CLUSCTL_RESOURCE_DELETE_REGISTRY_CHECKPOINT	= 0x014000A6,
1085		CLUSCTL_RESOURCE_GET_REGISTRY_CHECKPOINTS	= 0x010000A9,
1086		CLUSCTL_RESOURCE_ADD_CRYPTO_CHECKPOINT		= 0x014000AE,
1087		CLUSCTL_RESOURCE_DELETE_CRYPTO_CHECKPOINT	= 0x014000B2,
1088		CLUSCTL_RESOURCE_GET_CRYPTO_CHECKPOINTS		= 0x010000B5,
1089		CLUSCTL_RESOURCE_UPGRADE_DLL			= 0x014000BA,
1090		CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_64BIT	= 0x014000BE,
1091		CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_32BIT	= 0x014000C2,
1092		CLUSCTL_RESOURCE_GET_NETWORK_NAME		= 0x01000169,
1093		CLUSCTL_RESOURCE_NETNAME_REGISTER_DNS_RECORDS	= 0x01000172,
1094		CLUSCTL_RESOURCE_GET_DNS_NAME			= 0x01000175,
1095		CLUSCTL_RESOURCE_NETNAME_SET_PWD_INFO		= 0x0100017A,
1096		CLUSCTL_RESOURCE_NETNAME_DELETE_CO		= 0x0100017E,
1097		CLUSCTL_RESOURCE_NETNAME_VALIDATE_VCO		= 0x01000181,
1098		CLUSCTL_RESOURCE_NETNAME_RESET_VCO		= 0x01000185,
1099		CLUSCTL_RESOURCE_NETNAME_CREDS_UPDATED		= 0x01c0018a,
1100		CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO		= 0x01000191,
1101		CLUSCTL_RESOURCE_STORAGE_IS_PATH_VALID		= 0x01000199,
1102		CLUSCTL_RESOURCE_IPADDRESS_RENEW_LEASE		= 0x014001BE,
1103		CLUSCTL_RESOURCE_IPADDRESS_RELEASE_LEASE	= 0x014001C2,
1104		CLUSCTL_RESOURCE_QUERY_MAINTENANCE_MODE		= 0x010001E1,
1105		CLUSCTL_RESOURCE_SET_MAINTENANCE_MODE		= 0x014001E6,
1106		CLUSCTL_RESOURCE_STORAGE_SET_DRIVELETTER	= 0x014001EA,
1107		CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO_EX	= 0x010001F1,
1108		CLUSCTL_RESOURCE_STORAGE_GET_DIRTY		= 0x01000219,
1109		CLUSCTL_RESOURCE_STORAGE_GET_MOUNTPOINTS	= 0x01000211,
1110		CLUSCTL_RESOURCE_STORAGE_GET_SHARED_VOLUME_INFO = 0x01000225,
1111		CLUSCTL_RESOURCE_VM_START_MIGRATION		= 0x01600004,
1112		CLUSCTL_RESOURCE_VM_CANCEL_MIGRATION		= 0x01600008,
1113		CLUSCTL_RESOURCE_SET_CSV_MAINTENANCE_MODE	= 0x01400296,
1114		CLUSCTL_RESOURCE_ENABLE_SHARED_VOLUME_DIRECTIO	= 0x0140028a,
1115		CLUSCTL_RESOURCE_DISABLE_SHARED_VOLUME_DIRECTIO	= 0x0140028e,
1116		CLUSCTL_RESOURCE_SET_SHARED_VOLUME_BACKUP_MODE	= 0x0140029a,
1117		CLUSCTL_RESOURCE_GET_RELATED_RESOURCE_NAMES	= 0x01001fad,
1118		CLUSCTL_RESOURCE_POOL_GET_DRIVE_INFO		= 0x010002b5,
1119		CLUSCTL_RESOURCE_CLOUD_WITNESS_UPDATE_TOKEN	= 0x014020e6,
1120		CLUSCTL_RESOURCE_NETNAME_CHECK_OU_PERMISSIONS	= 0x07002121,
1121		CLUSCTL_RESOURCE_NETNAME_CHECK_AD_STATE		= 0x07002125
1122	} clusapi_ResourceControlCode;
1123
1124	WERROR
1125	clusapi_ResourceControl(
1126		[ in ] HRES_RPC hResource,
1127		[ in ] clusapi_ResourceControlCode dwControlCode,
1128		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1129		[ in ] uint32 nInBufferSize,
1130		[ out, size_is(nOutBufferSize),
1131			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1132		[ in ] uint32 nOutBufferSize,
1133		[ out ] uint32 *lpBytesReturned,
1134		[ out ] uint32 *lpcbRequired,
1135		[ out ] WERROR *rpc_status
1136	);
1137
1138	/*****************/
1139	/* Function 0x4A */
1140
1141	WERROR
1142	clusapi_NodeResourceTypeControl(
1143		[ in ] HCLUSTER_RPC hCluster,
1144		[ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName,
1145		[ in ] HNODE_RPC hNode,
1146		[ in ] uint32 dwControlCode,
1147		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1148		[ in ] uint32 nInBufferSize,
1149		[ out, size_is(nOutBufferSize),
1150			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1151		[ in ] uint32 nOutBufferSize,
1152		[ out ] uint32 *lpBytesReturned,
1153		[ out ] uint32 *lpcbRequired,
1154		[ out ] WERROR *rpc_status
1155	);
1156
1157	/*****************/
1158	/* Function 0x4B */
1159
1160	typedef [v1_enum] enum {
1161		CLUSCTL_RESOURCE_TYPE_UNKNOWN				= 0x02000000,
1162		CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS		= 0x02000005,
1163		CLUSCTL_RESOURCE_TYPE_GET_FLAGS				= 0x02000009,
1164		CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO			= 0x0200000D,
1165		CLUSCTL_RESOURCE_TYPE_GET_REQUIRED_DEPENDENCIES		= 0x02000011,
1166		CLUSCTL_RESOURCE_TYPE_GET_ARB_TIMEOUT			= 0x02000015,
1167		CLUSCTL_RESOURCE_TYPE_ENUM_COMMON_PROPERTIES		= 0x02000051,
1168		CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES		= 0x02000055,
1169		CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES		= 0x02000059,
1170		CLUSCTL_RESOURCE_TYPE_SET_COMMON_PROPERTIES		= 0x0240005E,
1171		CLUSCTL_RESOURCE_TYPE_VALIDATE_COMMON_PROPERTIES	= 0x02000061,
1172		CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTY_FMTS		= 0x02000065,
1173		CLUSCTL_RESOURCE_TYPE_GET_COMMON_RESOURCE_PROPERTY_FMTS = 0x02000069,
1174		CLUSCTL_RESOURCE_TYPE_ENUM_PRIVATE_PROPERTIES		= 0x02000079,
1175		CLUSCTL_RESOURCE_TYPE_GET_RO_PRIVATE_PROPERTIES		= 0x0200007D,
1176		CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES		= 0x02000081,
1177		CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES		= 0x02400086,
1178		CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES	= 0x02000089,
1179		CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTY_FMTS		= 0x0200008D,
1180		CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_RESOURCE_PROPERTY_FMTS= 0x02000091,
1181		CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS	= 0x02000195,
1182		CLUSCTL_RESOURCE_TYPE_NETNAME_VALIDATE_NETNAME		= 0x02000235,
1183		CLUSCTL_RESOURCE_TYPE_VALIDATE_PATH			= 0x02000231,
1184		CLUSCTL_RESOURCE_TYPE_GEN_APP_VALIDATE_DIRECTORY	= 0x02000239,
1185		CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DRIVELETTERS		= 0x020001ED,
1186		CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS_EX	= 0x020001F5,
1187		CLUSCTL_RESOURCE_TYPE_STORAGE_REMAP_DRIVELETTER		= 0x02000201,
1188		CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DISKID		= 0x02000205,
1189		CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CLUSTERABLE		= 0x02000209,
1190		CLUSCTL_RESOURCE_TYPE_STORAGE_RELEASE_OWNERSHIP		= 0x0240020E,
1191		CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CSV_FILE		= 0x1000229,
1192		CLUSCTL_RESOURCE_TYPE_CLOUD_WITNESS_VALIDATE_CREDENTIALS= 0x020020e1,
1193		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_LOGDISKS = 0x02002149,
1194		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_TARGET_DATADISKS = 0x0200214D,
1195		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_SOURCE_DATADISKS = 0x02002151,
1196		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICA_VOLUMES	= 0x02002159,
1197		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_LOG_VOLUME	= 0x0200215D,
1198		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICATED_DISKS	= 0x02002155,
1199		CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_RESOURCE_GROUP	= 0x02002161
1200	} clusapi_ResourceTypeControlCode;
1201
1202	WERROR
1203	clusapi_ResourceTypeControl(
1204		[ in ] HCLUSTER_RPC hCluster,
1205		[ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName,
1206		[ in ] clusapi_ResourceTypeControlCode dwControlCode,
1207		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1208		[ in ] uint32 nInBufferSize,
1209		[ out, size_is(nOutBufferSize),
1210			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1211		[ in ] uint32 nOutBufferSize,
1212		[ out ] uint32 *lpBytesReturned,
1213		[ out ] uint32 *lpcbRequired,
1214		[ out ] WERROR *rpc_status
1215	);
1216
1217	/*****************/
1218	/* Function 0x4C */
1219
1220	WERROR
1221	clusapi_NodeGroupControl(
1222		[ in ] HGROUP_RPC hGroup,
1223		[ in ] HNODE_RPC hNode,
1224		[ in ] uint32 dwControlCode,
1225		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1226		[ in ] uint32 nInBufferSize,
1227		[ out, size_is(nOutBufferSize),
1228			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1229		[ in ] uint32 nOutBufferSize,
1230		[ out ] uint32 *lpBytesReturned,
1231		[ out ] uint32 *lpcbRequired,
1232		[ out ] WERROR *rpc_status
1233	);
1234
1235	/*****************/
1236	/* Function 0x4D */
1237
1238	typedef [v1_enum] enum {
1239		CLUSCTL_GROUP_UNKNOWN				= 0x03000000,
1240		CLUSCTL_GROUP_GET_CHARACTERISTICS		= 0x03000005,
1241		CLUSCTL_GROUP_GET_FLAGS				= 0x03000009,
1242		CLUSCTL_GROUP_GET_NAME				= 0x03000029,
1243		CLUSCTL_GROUP_GET_ID				= 0x03000039,
1244		CLUSCTL_GROUP_ENUM_COMMON_PROPERTIES		= 0x03000051,
1245		CLUSCTL_GROUP_GET_RO_COMMON_PROPERTIES		= 0x03000055,
1246		CLUSCTL_GROUP_GET_COMMON_PROPERTIES		= 0x03000059,
1247		CLUSCTL_GROUP_SET_COMMON_PROPERTIES		= 0x0340005E,
1248		CLUSCTL_GROUP_VALIDATE_COMMON_PROPERTIES	= 0x03000061,
1249		CLUSCTL_GROUP_GET_COMMON_PROPERTY_FMTS		= 0x03000065,
1250		CLUSCTL_GROUP_ENUM_PRIVATE_PROPERTIES		= 0x03000079,
1251		CLUSCTL_GROUP_GET_RO_PRIVATE_PROPERTIES		= 0x0300007D,
1252		CLUSCTL_GROUP_GET_PRIVATE_PROPERTIES		= 0x03000081,
1253		CLUSCTL_GROUP_SET_PRIVATE_PROPERTIES		= 0x03400086,
1254		CLUSCTL_GROUP_VALIDATE_PRIVATE_PROPERTIES	= 0x03000089
1255	} clusapi_GroupControlCode;
1256
1257	WERROR
1258	clusapi_GroupControl(
1259		[ in ] HGROUP_RPC hGroup,
1260		[ in ] clusapi_GroupControlCode dwControlCode,
1261		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1262		[ in ] uint32 nInBufferSize,
1263		[ out, size_is(nOutBufferSize),
1264			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1265		[ in ] uint32 nOutBufferSize,
1266		[ out ] uint32 *lpBytesReturned,
1267		[ out ] uint32 *lpcbRequired,
1268		[ out ] WERROR *rpc_status
1269	);
1270
1271	/*****************/
1272	/* Function 0x4E */
1273
1274	WERROR
1275	clusapi_NodeNodeControl(
1276		[ in ] HNODE_RPC hNode,
1277		[ in ] HNODE_RPC hHostNode,
1278		[ in ] uint32 dwControlCode,
1279		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1280		[ in ] uint32 nInBufferSize,
1281		[ out, size_is(nOutBufferSize),
1282			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1283		[ in ] uint32 nOutBufferSize,
1284		[ out ] uint32 *lpBytesReturned,
1285		[ out ] uint32 *lpcbRequired,
1286		[ out ] WERROR *rpc_status
1287	);
1288
1289	/*****************/
1290	/* Function 0x4F */
1291
1292	typedef [v1_enum] enum {
1293		CLUSCTL_NODE_UNKNOWN				= 0x04000000,
1294		CLUSCTL_NODE_GET_CHARACTERISTICS		= 0x04000005,
1295		CLUSCTL_NODE_GET_FLAGS				= 0x04000009,
1296		CLUSCTL_NODE_GET_NAME				= 0x04000029,
1297		CLUSCTL_NODE_GET_ID				= 0x04000039,
1298		CLUSCTL_NODE_GET_CLUSTER_SERVICE_ACCOUNT_NAME	= 0x04000041,
1299		CLUSCTL_NODE_ENUM_COMMON_PROPERTIES		= 0x04000051,
1300		CLUSCTL_NODE_GET_RO_COMMON_PROPERTIES		= 0x04000055,
1301		CLUSCTL_NODE_GET_COMMON_PROPERTIES		= 0x04000059,
1302		CLUSCTL_NODE_SET_COMMON_PROPERTIES		= 0x0440005E,
1303		CLUSCTL_NODE_VALIDATE_COMMON_PROPERTIES		= 0x04000061,
1304		CLUSCTL_NODE_ENUM_PRIVATE_PROPERTIES		= 0x04000079,
1305		CLUSCTL_NODE_GET_RO_PRIVATE_PROPERTIES		= 0x0400007D,
1306		CLUSCTL_NODE_GET_PRIVATE_PROPERTIES		= 0x04000081,
1307		CLUSCTL_NODE_SET_PRIVATE_PROPERTIES		= 0x04400086,
1308		CLUSCTL_NODE_VALIDATE_PRIVATE_PROPERTIES	= 0x04000089
1309	} clusapi_NodeControlCode;
1310
1311	WERROR
1312	clusapi_NodeControl(
1313		[ in ] HNODE_RPC hNode,
1314		[ in ] clusapi_NodeControlCode dwControlCode,
1315		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1316		[ in ] uint32 nInBufferSize,
1317		[ out, size_is(nOutBufferSize),
1318			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1319		[ in ] uint32 nOutBufferSize,
1320		[ out ] uint32 *lpBytesReturned,
1321		[ out ] uint32 *lpcbRequired,
1322		[ out ] WERROR *rpc_status
1323	);
1324
1325	/*****************/
1326	/* Function 0x50 */
1327
1328	WERROR
1329	Opnum80NotUsedOnWire(void);
1330
1331	/*****************/
1332	/* Function 0x51 */
1333#if 0
1334	HNETWORK_RPC
1335	clusapi_OpenNetwork(
1336		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1337		[ out ] WERROR *Status,
1338		[ out ] WERROR *rpc_status
1339	);
1340#else
1341	void
1342	clusapi_OpenNetwork(
1343		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1344		[ out ] WERROR *Status,
1345		[ out ] WERROR *rpc_status,
1346		[ out ] HNETWORK_RPC *hNetwork
1347	);
1348#endif
1349	/*****************/
1350	/* Function 0x52 */
1351
1352	WERROR
1353	clusapi_CloseNetwork(
1354		[ in, out ] HNETWORK_RPC *Network
1355	);
1356
1357	/*****************/
1358	/* Function 0x53 */
1359
1360	typedef [v1_enum] enum {
1361		ClusterNetworkUnavailable	= 0x00000000,
1362		ClusterNetworkDown		= 0x00000001,
1363		ClusterNetworkPartitioned	= 0x00000002,
1364		ClusterNetworkUp		= 0x00000003,
1365		ClusterNetworkStateUnknown	= 0xFFFFFFFF
1366	} clusapi_ClusterNetworkState;
1367
1368	WERROR
1369	clusapi_GetNetworkState(
1370		[ in ] HNETWORK_RPC hNetwork,
1371		[ out ] clusapi_ClusterNetworkState *State,
1372		[ out ] WERROR *rpc_status
1373	);
1374
1375	/*****************/
1376	/* Function 0x54 */
1377
1378	WERROR
1379	clusapi_SetNetworkName(
1380		[ in ] HNETWORK_RPC hNetwork,
1381		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1382		[ out ] WERROR *rpc_status
1383	);
1384
1385	/*****************/
1386	/* Function 0x55 */
1387
1388	WERROR
1389	clusapi_CreateNetworkEnum(
1390		[ in ] HNETWORK_RPC hNetwork,
1391		[ in ] uint32 dwType,
1392		[ out ] ENUM_LIST **ReturnEnum,
1393		[ out ] WERROR *rpc_status
1394	);
1395
1396	/*****************/
1397	/* Function 0x56 */
1398
1399	WERROR
1400	clusapi_GetNetworkId(
1401		[ in ] HNETWORK_RPC hNetwork,
1402		[ out, string ] [charset(UTF16)] uint16 **pGuid,
1403		[ out ] WERROR *rpc_status
1404	);
1405
1406	/*****************/
1407	/* Function 0x57 */
1408
1409	WERROR
1410	clusapi_SetNetworkPriorityOrder(
1411		[ in, range(0, 1000)] uint32 NetworkCount,
1412		[ in, string, size_is(NetworkCount) ] [charset(UTF16)] uint16 NetworkIdList[*],
1413		[ out ] WERROR *rpc_status
1414	);
1415
1416	/*****************/
1417	/* Function 0x58 */
1418
1419	WERROR
1420	clusapi_NodeNetworkControl(
1421		[ in ] HNETWORK_RPC hNetwork,
1422		[ in ] HNODE_RPC hNode,
1423		[ in ] uint32 dwControlCode,
1424		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1425		[ in ] uint32 nInBufferSize,
1426		[ out, size_is(nOutBufferSize),
1427			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1428		[ in ] uint32 nOutBufferSize,
1429		[ out ] uint32 *lpBytesReturned,
1430		[ out ] uint32 *lpcbRequired,
1431		[ out ] WERROR *rpc_status
1432	);
1433
1434	/*****************/
1435	/* Function 0x59 */
1436
1437	WERROR
1438	clusapi_NetworkControl(
1439		[ in ] HNETWORK_RPC hNetwork,
1440		[ in ] uint32 dwControlCode,
1441		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1442		[ in ] uint32 nInBufferSize,
1443		[ out, size_is(nOutBufferSize),
1444			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1445		[ in ] uint32 nOutBufferSize,
1446		[ out ] uint32 *lpBytesReturned,
1447		[ out ] uint32 *lpcbRequired,
1448		[ out ] WERROR *rpc_status
1449	);
1450
1451	/*****************/
1452	/* Function 0x5A */
1453
1454	WERROR
1455	clusapi_AddNotifyNetwork(
1456		[ in ] HNOTIFY_RPC hNotify,
1457		[ in ] HNETWORK_RPC hNetwork,
1458		[ in ] uint32 dwFilter,
1459		[ in ] uint32 dwNotifyKey,
1460		[ out ] uint32 *dwStateSequence,
1461		[ out ] WERROR *rpc_status
1462	);
1463
1464	/*****************/
1465	/* Function 0x5B */
1466
1467	WERROR
1468	clusapi_ReAddNotifyNetwork(
1469		[ in ] HNOTIFY_RPC hNotify,
1470		[ in ] HNETWORK_RPC hNetwork,
1471		[ in ] uint32 dwFilter,
1472		[ in ] uint32 dwNotifyKey,
1473		[ in ] uint32 StateSequence,
1474		[ out ] WERROR *rpc_status
1475	);
1476
1477	/*****************/
1478	/* Function 0x5C */
1479#if 0
1480	HNETINTERFACE_RPC
1481	clusapi_OpenNetInterface(
1482		[ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName,
1483		[ out ] WERROR *Status,
1484		[ out ] WERROR *rpc_status
1485	);
1486#else
1487	void
1488	clusapi_OpenNetInterface(
1489		[ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName,
1490		[ out ] WERROR *Status,
1491		[ out ] WERROR *rpc_status,
1492		[ out ] HNETINTERFACE_RPC *hNetInterface
1493	);
1494#endif
1495	/*****************/
1496	/* Function 0x5D */
1497
1498	WERROR
1499	clusapi_CloseNetInterface(
1500		[ in, out ] HNETINTERFACE_RPC *NetInterface
1501	);
1502
1503	/*****************/
1504	/* Function 0x5E */
1505
1506	typedef [v1_enum] enum {
1507		ClusterNetInterfaceFailed	= 0x00000000,
1508		ClusterNetInterfaceUnreachable	= 0x00000001,
1509		ClusterNetInterfaceUnavailable	= 0x00000002,
1510		ClusterNetInterfaceUp		= 0x00000003,
1511		ClusterNetInterfaceStateUnknown	= 0xFFFFFFFF
1512	} clusapi_ClusterNetInterfaceState;
1513
1514	WERROR
1515	clusapi_GetNetInterfaceState(
1516		[ in ] HNETINTERFACE_RPC hNetInterface,
1517		[ out ] clusapi_ClusterNetInterfaceState *State,
1518		[ out ] WERROR *rpc_status
1519	);
1520
1521	/*****************/
1522	/* Function 0x5F */
1523
1524	WERROR
1525	clusapi_GetNetInterface(
1526		[ in, string ] [charset(UTF16)] uint16 *lpszNodeName,
1527		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1528		[ out, string ] [charset(UTF16)] uint16 **lppszInterfaceName,
1529		[ out ] WERROR *rpc_status
1530	);
1531
1532	/*****************/
1533	/* Function 0x60 */
1534
1535	WERROR
1536	clusapi_GetNetInterfaceId(
1537		[ in ] HNETINTERFACE_RPC hNetInterface,
1538		[ out, string ] [charset(UTF16)] uint16 **pGuid,
1539		[ out ] WERROR *rpc_status
1540	);
1541
1542	/*****************/
1543	/* Function 0x61 */
1544
1545	WERROR
1546	clusapi_NodeNetInterfaceControl(
1547		[ in ] HNETINTERFACE_RPC hNetInterface,
1548		[ in ] HNODE_RPC hNode,
1549		[ in ] uint32 dwControlCode,
1550		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1551		[ in ] uint32 nInBufferSize,
1552		[ out, size_is(nOutBufferSize),
1553			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1554		[ in ] uint32 nOutBufferSize,
1555		[ out ] uint32 *lpBytesReturned,
1556		[ out ] uint32 *lpcbRequired,
1557		[ out ] WERROR *rpc_status
1558	);
1559
1560	/*****************/
1561	/* Function 0x62 */
1562
1563	WERROR
1564	clusapi_NetInterfaceControl(
1565		[ in ] HNETINTERFACE_RPC hNetInterface,
1566		[ in ] uint32 dwControlCode,
1567		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1568		[ in ] uint32 nInBufferSize,
1569		[ out, size_is(nOutBufferSize),
1570			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1571		[ in ] uint32 nOutBufferSize,
1572		[ out ] uint32 *lpBytesReturned,
1573		[ out ] uint32 *lpcbRequired,
1574		[ out ] WERROR *rpc_status
1575	);
1576
1577	/*****************/
1578	/* Function 0x63 */
1579
1580	WERROR
1581	clusapi_AddNotifyNetInterface(
1582		[ in ] HNOTIFY_RPC hNotify,
1583		[ in ] HNETINTERFACE_RPC hNetInterface,
1584		[ in ] uint32 dwFilter,
1585		[ in ] uint32 dwNotifyKey,
1586		[ out ] uint32 *dwStateSequence,
1587		[ out ] WERROR *rpc_status
1588	);
1589
1590	/*****************/
1591	/* Function 0x64 */
1592
1593	WERROR
1594	clusapi_ReAddNotifyNetInterface(
1595		[ in ] HNOTIFY_RPC hNotify,
1596		[ in ] HNETINTERFACE_RPC hNetInterface,
1597		[ in ] uint32 dwFilter,
1598		[ in ] uint32 dwNotifyKey,
1599		[ in ] uint32 StateSequence,
1600		[ out ] WERROR *rpc_status
1601	);
1602
1603	/*****************/
1604	/* Function 0x65 */
1605
1606	WERROR
1607	clusapi_CreateNodeEnum(
1608		[ in ] HNODE_RPC hNode,
1609		[ in ] uint32 dwType,
1610		[ out ] ENUM_LIST **ReturnEnum,
1611		[ out ] WERROR *rpc_status
1612	);
1613
1614	/*****************/
1615	/* Function 0x66 */
1616
1617	WERROR
1618	clusapi_GetClusterVersion2(
1619		[ out ] uint16 *lpwMajorVersion,
1620		[ out ] uint16 *lpwMinorVersion,
1621		[ out ] uint16 *lpwBuildNumber,
1622		[ out, string ] [charset(UTF16)] uint16 **lpszVendorId,
1623		[ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion,
1624		[ out ] CLUSTER_OPERATIONAL_VERSION_INFO **ppClusterOpVerInfo,
1625		[ out ] WERROR *rpc_status
1626	);
1627
1628	/*****************/
1629	/* Function 0x67 */
1630
1631	typedef [bitmap32bit] bitmap {
1632		CLUSTER_RESOURCE_TYPE_ENUM_NODES	= 0x00000001,
1633		CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES	= 0x00000002
1634	} ClusterResTypeEnumType;
1635
1636	WERROR
1637	clusapi_CreateResTypeEnum(
1638		[ in, string ] [charset(UTF16)] uint16 *lpszTypeName,
1639		[ in ] ClusterResTypeEnumType dwType,
1640		[ out ] ENUM_LIST **ReturnEnum,
1641		[ out ] WERROR *rpc_status
1642	);
1643
1644	/*****************/
1645	/* Function 0x68 */
1646
1647	WERROR
1648	clusapi_BackupClusterDatabase(
1649		[ in, string ] [charset(UTF16)] uint16 *lpszPathName,
1650		[ out ] WERROR *rpc_status
1651	);
1652
1653	/*****************/
1654	/* Function 0x69 */
1655
1656	WERROR
1657	clusapi_NodeClusterControl(
1658		[ in ] HCLUSTER_RPC hCluster,
1659		[ in ] HNODE_RPC hHostNode,
1660		[ in ] uint32 dwControlCode,
1661		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1662		[ in ] uint32 nInBufferSize,
1663		[ out, size_is(nOutBufferSize),
1664			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1665		[ in ] uint32 nOutBufferSize,
1666		[ out ] uint32 *lpBytesReturned,
1667		[ out ] uint32 *lpcbRequired,
1668		[ out ] WERROR *rpc_status
1669	);
1670
1671	/*****************/
1672	/* Function 0x6A */
1673
1674	typedef [v1_enum] enum {
1675		CLUSCTL_CLUSTER_UNKNOWN				= 0x07000000,
1676		CLUSCTL_CLUSTER_GET_FQDN			= 0x0700003D,
1677		CLUSCTL_CLUSTER_CHECK_VOTER_EVICT		= 0x07000045,
1678		CLUSCTL_CLUSTER_CHECK_VOTER_DOWN		= 0x07000049,
1679		CLUSCTL_CLUSTER_SHUTDOWN			= 0x0700004D,
1680		CLUSCTL_CLUSTER_ENUM_COMMON_PROPERTIES		= 0x07000051,
1681		CLUSCTL_CLUSTER_GET_RO_COMMON_PROPERTIES	= 0x07000055,
1682		CLUSCTL_CLUSTER_GET_COMMON_PROPERTIES		= 0x07000059,
1683		CLUSCTL_CLUSTER_SET_COMMON_PROPERTIES		= 0x0740005E,
1684		CLUSCTL_CLUSTER_VALIDATE_COMMON_PROPERTIES	= 0x07000061,
1685		CLUSCTL_CLUSTER_GET_COMMON_PROPERTY_FMTS	= 0x07000065,
1686		CLUSCTL_CLUSTER_ENUM_PRIVATE_PROPERTIES		= 0x07000079,
1687		CLUSCTL_CLUSTER_GET_RO_PRIVATE_PROPERTIES	= 0x0700007D,
1688		CLUSCTL_CLUSTER_GET_PRIVATE_PROPERTIES		= 0x07000081,
1689		CLUSCTL_CLUSTER_SET_PRIVATE_PROPERTIES		= 0x07400086,
1690		CLUSCTL_CLUSTER_VALIDATE_PRIVATE_PROPERTIES	= 0x07000089,
1691		CLUSCTL_CLUSTER_GET_SHARED_VOLUME_ID		= 0x07000291,
1692		CLUSCTL_CLUSTER_UPGRADE_CLUSTER_VERSION		= 0x074000ce,
1693		CLUSCTL_CLUSTER_CLEAR_UPGRADE_IN_PROGRESS	= 0x074000d2,
1694		CLUSCTL_CLUSTER_IS_READY_FOR_UPGRADE		= 0x070000d5
1695	} clusapi_ClusterControlCode;
1696
1697	typedef [v1_enum] enum {
1698		CLUSPROP_SYNTAX_ENDMARK = 0x00000000,
1699		CLUSPROP_SYNTAX_NAME = 0x00040003,
1700		CLUSPROP_SYNTAX_RESCLASS = 0x00020002,
1701		CLUSPROP_SYNTAX_LIST_VALUE_SZ = 0x00010003,
1702		CLUSPROP_SYNTAX_LIST_VALUE_EXPAND_SZ = 0x00010004,
1703		CLUSPROP_SYNTAX_LIST_VALUE_DWORD = 0x00010002,
1704		CLUSPROP_SYNTAX_LIST_VALUE_BINARY = 0x00010001,
1705		CLUSPROP_SYNTAX_LIST_VALUE_MULTI_SZ = 0x00010005,
1706		CLUSPROP_SYNTAX_LIST_VALUE_LONG = 0x00010007,
1707		CLUSPROP_SYNTAX_LIST_VALUE_EXPANDED_SZ = 0x00010008,
1708		CLUSPROP_SYNTAX_LIST_VALUE_SECURITY_DESCRIPTOR = 0x00010009,
1709		CLUSPROP_SYNTAX_LIST_VALUE_LARGE_INTEGER = 0x0001000a,
1710		CLUSPROP_SYNTAX_LIST_VALUE_ULARGE_INTEGER = 0x00010006,
1711		CLUSPROP_SYNTAX_LIST_VALUE_WORD = 0x0001000b,
1712		CLUSPROP_SYNTAX_LIST_VALUE_FILETIME = 0x0001000c,
1713		CLUSPROP_SYNTAX_DISK_SIGNATURE = 0x00050002,
1714		CLUSPROP_SYNTAX_SCSI_ADDRESS = 0x00060002,
1715		CLUSPROP_SYNTAX_DISK_NUMBER = 0x00070002,
1716		CLUSPROP_SYNTAX_PARTITION_INFO = 0x00080001,
1717		CLUSPROP_SYNTAX_DISK_SERIALNUMBER = 0x000a0003,
1718		CLUSPROP_SYNTAX_DISK_GUID = 0x000b0003,
1719		CLUSPROP_SYNTAX_DISK_SIZE = 0x000c0006,
1720		CLUSPROP_SYNTAX_PARTITION_INFO_EX = 0x000d0001
1721	} CLUSTER_PROPERTY_SYNTAX;
1722
1723	typedef struct {
1724		CLUSTER_PROPERTY_SYNTAX Syntax;
1725		uint32 Size;
1726		[subcontext(0),subcontext_size(Size)] [flag(NDR_REMAINING)] DATA_BLOB Buffer;
1727		[flag(NDR_ALIGN4)] DATA_BLOB Padding;
1728	} clusapi_propertyValues;
1729
1730	typedef struct {
1731		[value(CLUSPROP_SYNTAX_NAME)] CLUSTER_PROPERTY_SYNTAX syntax_name;
1732		[value(strlen_m_term(buffer)*2)] uint32 size;
1733		nstring buffer;
1734		[flag(NDR_ALIGN2)] DATA_BLOB padding;
1735		clusapi_propertyValues PropertyValues;
1736		[value(CLUSPROP_SYNTAX_ENDMARK)] CLUSTER_PROPERTY_SYNTAX end_mark;
1737	} clusapi_propertyValue;
1738
1739	typedef [public] struct {
1740		uint32 propertyCount;
1741		clusapi_propertyValue propertyValues[propertyCount];
1742		[value(CLUSPROP_SYNTAX_ENDMARK)] CLUSTER_PROPERTY_SYNTAX end_mark;
1743	} clusapi_PROPERTY_LIST;
1744
1745	WERROR
1746	clusapi_ClusterControl(
1747		[ in ] HCLUSTER_RPC hCluster,
1748		[ in ] clusapi_ClusterControlCode dwControlCode,
1749		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
1750		[ in ] uint32 nInBufferSize,
1751		[ out, size_is(nOutBufferSize),
1752			 length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
1753		[ in ] uint32 nOutBufferSize,
1754		[ out ] uint32 *lpBytesReturned,
1755		[ out ] uint32 *lpcbRequired,
1756		[ out ] WERROR *rpc_status
1757	);
1758
1759	/*****************/
1760	/* Function 0x6B */
1761
1762	WERROR
1763	clusapi_UnblockGetNotifyCall(
1764		[ in ] HNOTIFY_RPC hNotify
1765	);
1766
1767	/*****************/
1768	/* Function 0x6C */
1769
1770	WERROR
1771	clusapi_SetServiceAccountPassword(
1772		[ in, string ] [charset(UTF16)] uint16 *lpszNewPassword,
1773		[ in ]  IDL_CLUSTER_SET_PASSWORD_FLAGS dwFlags,
1774		[ out, size_is(ReturnStatusBufferSize), length_is(*SizeReturned) ]
1775			 IDL_CLUSTER_SET_PASSWORD_STATUS ReturnStatusBufferPtr[*],
1776		[ in, range(0, (64 * 1024)) ] uint32 ReturnStatusBufferSize,
1777		[ out ] uint32 *SizeReturned,
1778		[ out ] uint32 *ExpectedBufferSize
1779	);
1780
1781	/*****************/
1782	/* Function 0x6D */
1783
1784	WERROR
1785	clusapi_SetResourceDependencyExpression(
1786		[ in ] HRES_RPC hResource,
1787		[ in, string, unique ] [charset(UTF16)] uint16 *lpszDependencyExpression,
1788		[ out ] WERROR *rpc_status
1789	);
1790
1791	/*****************/
1792	/* Function 0x6E */
1793
1794	WERROR
1795	clusapi_GetResourceDependencyExpression(
1796		[ in ] HRES_RPC hResource,
1797		[ out, string ] [charset(UTF16)] uint16 **lpszDependencyExpression,
1798		[ out ] WERROR *rpc_status
1799	);
1800
1801	/*****************/
1802	/* Function 0x6F */
1803
1804	WERROR
1805	Opnum111NotUsedOnWire(void);
1806
1807	/*****************/
1808	/* Function 0x70 */
1809
1810	WERROR
1811	clusapi_GetResourceNetworkName(
1812		[ in ] HRES_RPC hResource,
1813		[ out, string ] [charset(UTF16)] uint16 **lpszName,
1814		[ out ] WERROR *rpc_status
1815	);
1816
1817	/*****************/
1818	/* Function 0x71 */
1819
1820	WERROR
1821	clusapi_ExecuteBatch(
1822		[ in ] HKEY_RPC hKey,
1823		[ in ] uint32 cbData,
1824		[ in, size_is(cbData)] uint8 *lpData,
1825		[ out ] int *pdwFailedCommand,
1826		[ out ] WERROR *rpc_status
1827	);
1828
1829	/*****************/
1830	/* Function 0x72 */
1831
1832	WERROR
1833	clusapi_CreateBatchPort(
1834		[ in ] HKEY_RPC hKey,
1835		[ out ] HBATCH_PORT_RPC *phBatchPort,
1836		[ out ] WERROR *rpc_status
1837	);
1838
1839	/*****************/
1840	/* Function 0x73 */
1841
1842	WERROR
1843	clusapi_GetBatchNotification(
1844		 [ in ] HBATCH_PORT_RPC hBatchNotify,
1845		 [ out ] uint32 *cbData,
1846		 [ out, size_is(,*cbData) ] uint8 ** lpData
1847	);
1848
1849	/*****************/
1850	/* Function 0x74 */
1851
1852	WERROR
1853	clusapi_CloseBatchPort(
1854		 [ in, out ] HBATCH_PORT_RPC *phBatchPort
1855	);
1856
1857	/*****************/
1858	/* Function 0x75 */
1859
1860	typedef [bitmap32bit] bitmap {
1861		CLUSAPI_READ_ACCESS		= 0x00000001,
1862		CLUSAPI_CHANGE_ACCESS		= 0x00000002,
1863		CLUSAPI_GENERIC_READ		= 0x80000000,
1864		CLUSAPI_GENERIC_WRITE		= 0x40000000,
1865		CLUSAPI_GENERIC_EXECUTE		= 0x20000000,
1866		CLUSAPI_GENERIC_ALL		= 0x10000000,
1867		CLUSAPI_MAXIMUM_ALLOWED		= 0x02000000
1868	} clusapi_DesiredAccessMask;
1869
1870#if 0
1871	HCLUSTER_RPC
1872	clusapi_OpenClusterEx(
1873		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1874		[ out ] uint32 *lpdwGrantedAccess,
1875		[ out ] WERROR *Status
1876	);
1877#else
1878	void
1879	clusapi_OpenClusterEx(
1880		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1881		[ out ] uint32 *lpdwGrantedAccess,
1882		[ out ] WERROR *Status,
1883		[ out ] HCLUSTER_RPC *hCluster
1884	);
1885#endif
1886
1887	/*****************/
1888	/* Function 0x76 */
1889#if 0
1890	HNODE_RPC
1891	clusapi_OpenNodeEx(
1892		[ in, string ] [charset(UTF16)] uint16 *lpszNodeName,
1893		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1894		[ out ] uint32 *lpdwGrantedAccess,
1895		[ out ] WERROR *Status,
1896		[ out ] WERROR *rpc_status
1897	);
1898#else
1899	void
1900	clusapi_OpenNodeEx(
1901		[ in, string ] [charset(UTF16)] uint16 *lpszNodeName,
1902		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1903		[ out ] uint32 *lpdwGrantedAccess,
1904		[ out ] WERROR *Status,
1905		[ out ] WERROR *rpc_status,
1906		[ out ] HNODE_RPC *hNode
1907	);
1908#endif
1909	/*****************/
1910	/* Function 0x77 */
1911#if 0
1912	HGROUP_RPC
1913	clusapi_OpenGroupEx(
1914		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
1915		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1916		[ out ] uint32 *lpdwGrantedAccess,
1917		[ out ] WERROR *Status,
1918		[ out ] WERROR *rpc_status
1919	);
1920#else
1921	void
1922	clusapi_OpenGroupEx(
1923		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
1924		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1925		[ out ] uint32 *lpdwGrantedAccess,
1926		[ out ] WERROR *Status,
1927		[ out ] WERROR *rpc_status,
1928		[ out ] HGROUP_RPC *hGroup
1929	);
1930#endif
1931	/*****************/
1932	/* Function 0x78 */
1933#if 0
1934	HRES_RPC
1935	clusapi_OpenResourceEx(
1936		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
1937		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1938		[ out ] uint32 *lpdwGrantedAccess,
1939		[ out ] WERROR *Status,
1940		[ out ] WERROR *rpc_status
1941	);
1942#else
1943	void
1944	clusapi_OpenResourceEx(
1945		[ in, string ] [charset(UTF16)] uint16 *lpszResourceName,
1946		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1947		[ out ] uint32 *lpdwGrantedAccess,
1948		[ out ] WERROR *Status,
1949		[ out ] WERROR *rpc_status,
1950		[ out ] HRES_RPC *hResource
1951	);
1952#endif
1953	/*****************/
1954	/* Function 0x79 */
1955#if 0
1956	HNETWORK_RPC
1957	clusapi_OpenNetworkEx(
1958		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1959		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1960		[ out ] uint32 *lpdwGrantedAccess,
1961		[ out ] WERROR *Status,
1962		[ out ] WERROR *rpc_status
1963	);
1964#else
1965	void
1966	clusapi_OpenNetworkEx(
1967		[ in, string ] [charset(UTF16)] uint16 *lpszNetworkName,
1968		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1969		[ out ] uint32 *lpdwGrantedAccess,
1970		[ out ] WERROR *Status,
1971		[ out ] WERROR *rpc_status,
1972		[ out ] HNETWORK_RPC *hNetwork
1973	);
1974#endif
1975	/*****************/
1976	/* Function 0x7A */
1977#if 0
1978	HNETINTERFACE_RPC
1979	clusapi_OpenNetInterfaceEx(
1980		[ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName,
1981		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1982		[ out ] uint32 *lpdwGrantedAccess,
1983		[ out ] WERROR *Status,
1984		[ out ] WERROR *rpc_status
1985	);
1986#else
1987	void
1988	clusapi_OpenNetInterfaceEx(
1989		[ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName,
1990		[ in ] clusapi_DesiredAccessMask dwDesiredAccess,
1991		[ out ] uint32 *lpdwGrantedAccess,
1992		[ out ] WERROR *Status,
1993		[ out ] WERROR *rpc_status,
1994		[ out ] HNETINTERFACE_RPC *hNetInterface
1995	);
1996#endif
1997	/*****************/
1998	/* Function 0x7B */
1999
2000	WERROR
2001	clusapi_ChangeCsvState(
2002		[ in ] HRES_RPC hResource,
2003		[ in ] uint32 dwState,
2004		[ out ] WERROR *rpc_status
2005	);
2006
2007	/*****************/
2008	/* Function 0x7C */
2009
2010	WERROR
2011	clusapi_CreateNodeEnumEx(
2012		[in] HNODE_RPC hNode,
2013		[in] uint32 dwType,
2014		[in] uint32 dwOptions,
2015		[out] ENUM_LIST **ReturnIdEnum,
2016		[out] ENUM_LIST **ReturnNameEnum,
2017		[out] WERROR* rpc_status
2018	);
2019
2020	/*****************/
2021	/* Function 0x7D */
2022
2023	WERROR
2024	clusapi_CreateEnumEx(
2025		[in] HCLUSTER_RPC hCluster,
2026		[in] ClusterEnumType dwType,
2027		[in] uint32 dwOptions,
2028		[out] ENUM_LIST **ReturnIdEnum,
2029		[out] ENUM_LIST **ReturnNameEnum,
2030		[out] WERROR* rpc_status
2031	);
2032
2033	/*****************/
2034	/* Function 0x7E */
2035
2036	WERROR
2037	clusapi_PauseNodeEx(
2038		[ in ] HNODE_RPC hNode,
2039		[ in ] boolean8 bDrainNode,
2040		[ in ] uint32 dwPauseFlags,
2041		[ out ] WERROR *rpc_status
2042	);
2043
2044	/*****************/
2045	/* Function 0x7F */
2046
2047	WERROR
2048	clusapi_PauseNodeWithDrainTarget(
2049		[ in ] HNODE_RPC hNode,
2050		[ in ] uint32 dwPauseFlags,
2051		[ in ] HNODE_RPC hNodeDrainTarget,
2052		[ out ] WERROR *rpc_status
2053	);
2054
2055	/*****************/
2056	/* Function 0x80 */
2057
2058	WERROR
2059	clusapi_ResumeNodeEx(
2060		[ in ] HNODE_RPC hNode,
2061		[ in ] uint32 dwResumeFailbackType,
2062		[ in ] uint32 dwResumeFlagsReserved,
2063		[ out ] WERROR *rpc_status
2064	);
2065
2066	/*****************/
2067	/* Function 0x81 */
2068#if 0
2069	HGROUP_RPC
2070	clusapi_CreateGroupEx(
2071		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
2072		[ in, unique ] CLUSTER_CREATE_GROUP_INFO_RPC *pGroupInfo,
2073		[ out ] WERROR *Status,
2074		[ out ] WERROR *rpc_status
2075	);
2076#else
2077	void
2078	clusapi_CreateGroupEx(
2079		[ in, string ] [charset(UTF16)] uint16 *lpszGroupName,
2080		[ in, unique ] CLUSTER_CREATE_GROUP_INFO_RPC *pGroupInfo,
2081		[ out ] WERROR *Status,
2082		[ out ] WERROR *rpc_status,
2083		[ out ] HGROUP_RPC *hGroup
2084	);
2085#endif
2086	/*****************/
2087	/* Function 0x82 */
2088
2089	WERROR
2090	clusapi_OnlineGroupEx(
2091		[ in ] HGROUP_RPC hGroup,
2092		[ in ] uint32	  dwOnlineFlags,
2093		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2094		[ in ] uint32	  cbInBufferSize,
2095		[ out ] WERROR *rpc_status
2096	);
2097
2098	/*****************/
2099	/* Function 0x83 */
2100
2101	WERROR
2102	clusapi_OfflineGroupEx(
2103		[ in ] HGROUP_RPC hGroup,
2104		[ in ] uint32	  dwOfflineFlags,
2105		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2106		[ in ] uint32	  cbInBufferSize,
2107		[ out ] WERROR *rpc_status
2108	);
2109
2110	/*****************/
2111	/* Function 0x84 */
2112
2113	WERROR
2114	clusapi_MoveGroupEx(
2115		[ in ] HGROUP_RPC hGroup,
2116		[ in ] uint32		dwMoveFlags,
2117		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2118		[ in ] uint32		cbInBufferSize,
2119		[ out ] WERROR *rpc_status
2120	);
2121
2122	/*****************/
2123	/* Function 0x85 */
2124
2125	WERROR
2126	clusapi_MoveGroupToNodeEx(
2127		[ in ] HGROUP_RPC hGroup,
2128		[ in ] HNODE_RPC  hNode,
2129		[ in ] uint32		dwMoveFlags,
2130		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2131		[ in ] uint32		cbInBufferSize,
2132		[ out ] WERROR *rpc_status
2133	);
2134
2135	/*****************/
2136	/* Function 0x86 */
2137
2138	WERROR
2139	clusapi_CancelClusterGroupOperation(
2140		[ in ] HGROUP_RPC	hGroup,
2141		[ in ] uint32		 dwCancelFlags,
2142		[ out ] WERROR *rpc_status
2143	);
2144
2145	/*****************/
2146	/* Function 0x87 */
2147
2148	WERROR
2149	clusapi_OnlineResourceEx(
2150		[ in ] HRES_RPC hResource,
2151		[ in ] uint32	  dwOnlineFlags,
2152		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2153		[ in ] uint32	  cbInBufferSize,
2154		[ out ] WERROR *rpc_status
2155	);
2156
2157	/*****************/
2158	/* Function 0x88 */
2159
2160	WERROR
2161	clusapi_OfflineResourceEx(
2162		[ in ] HRES_RPC hResource,
2163		[ in ] uint32	  dwOfflineFlags,
2164		[ in, size_is(cbInBufferSize) ] uint8* lpInBuffer,
2165		[ in ] uint32	  cbInBufferSize,
2166		[ out ] WERROR *rpc_status
2167	);
2168
2169#define HGENERIC_RPC policy_handle
2170#if 0
2171	typedef [context_handle] void *HGENERIC_RPC;
2172#endif
2173
2174	typedef struct {
2175		uint32 dwObjectType;	  /* really of type CLUSTER_OBJECT_TYPE_RPC */
2176		hyper FilterFlags;
2177	} NOTIFY_FILTER_AND_TYPE_RPC;
2178
2179	typedef struct {
2180		NOTIFY_FILTER_AND_TYPE_RPC FilterAndType;
2181		[ size_is(dwBufferSize ) ] uint8* buffer;
2182		uint32 dwBufferSize;
2183		[string] [charset(UTF16)] uint16 *ObjectId;
2184		[string] [charset(UTF16)] uint16 *ParentId;
2185		[string] [charset(UTF16)] uint16 *Name;
2186		[string] [charset(UTF16)] uint16 *Type;
2187	} NOTIFICATION_DATA_RPC;
2188
2189	typedef struct {
2190		uint32 *dwNotifyKey;
2191		NOTIFICATION_DATA_RPC NotificationData;
2192	} NOTIFICATION_RPC;
2193
2194	/*****************/
2195	/* Function 0x89 */
2196
2197	/*
2198	 * Notify interface V2 functions
2199	 */
2200#if 0
2201	HNOTIFY_RPC
2202	clusapi_CreateNotifyV2(
2203		[ out ] WERROR *rpc_error,
2204		[ out ] WERROR *rpc_status
2205	);
2206#else
2207	void
2208	clusapi_CreateNotifyV2(
2209		[ out ] WERROR *rpc_error,
2210		[ out ] WERROR *rpc_status,
2211		[ out ] HNOTIFY_RPC *hNotify
2212	);
2213
2214#endif
2215	/*****************/
2216	/* Function 0x8A */
2217
2218	WERROR
2219	clusapi_AddNotifyV2(
2220		[ in ] HNOTIFY_RPC hNotify,
2221		[ in ] HGENERIC_RPC hObject,
2222		[ in ] NOTIFY_FILTER_AND_TYPE_RPC filter,
2223		[ in ] uint32 dwNotifyKey,
2224		[ in ] uint32 dwVersion,
2225		[ in ] boolean8 isTargetedAtObject,
2226		[ out ] WERROR *rpc_status
2227	);
2228
2229	/*****************/
2230	/* Function 0x8B */
2231
2232	WERROR
2233	clusapi_GetNotifyV2(
2234		[ in ] HNOTIFY_RPC hNotify,
2235		[ out, size_is(,*dwNumNotifications) ] NOTIFICATION_RPC **Notifications,
2236		[ out ] uint32 *dwNumNotifications
2237	);
2238
2239	/*****************/
2240	/* Function 0x8C */
2241
2242	WERROR
2243	clusapi_QueryAllValues(
2244		[ in ] HKEY_RPC hKey,
2245		[ out ] uint32 *pcbData,
2246		[ out, size_is(1, *pcbData) ] uint8 ** ppData,
2247		[ out ] WERROR *rpc_status
2248	);
2249
2250	typedef struct {
2251		uint32 DiskIdType;
2252		uint8  DiskIdBlob[16];
2253	} CLUSTER_DISKID;
2254
2255	/*****************/
2256	/* Function 0x8D */
2257
2258	WERROR
2259	clusapi_StmFindDisk(
2260		[ in ] HCLUSTER_RPC hCluster,
2261		[ in ] uint32 dwFlags,
2262		[ in, out, unique ] CLUSTER_DISKID *pDiskId,
2263		[ in, size_is(uniqueIdSize), unique ] uint8 *pUniqueId,
2264		[ in ] uint32 uniqueIdSize,
2265		[ out, ref, string ] [charset(UTF16)] uint16 **ppszDeviceName,
2266		[ out ] WERROR *rpc_status
2267	);
2268
2269	typedef struct{
2270		[string] [charset(UTF16)] uint16 *pszNodeName;
2271		HRESULT ResultCode;
2272		uint32	ResultSize;
2273		[unique, size_is(ResultSize)]	uint8	 *pResultData;
2274	} CLUSTER_MRR_NODE_RESPONSE;
2275
2276	typedef struct {
2277		uint32 NodeCount;
2278		[size_is(NodeCount)] CLUSTER_MRR_NODE_RESPONSE *pNodes;
2279	} CLUSTER_MRR_RESPONSE;
2280
2281	/*****************/
2282	/* Function 0x8E */
2283
2284	WERROR
2285	clusapi_ClusterMrr(
2286		[ in ] HCLUSTER_RPC hCluster,
2287		[ in ] boolean8 fExcludeSelf,
2288		[ in ] hyper nodeSet,
2289		[ in ] uint32 dwTimeout,
2290		[ in ] uint32 dwComponent,
2291		[ in ] uint32 dwControlCode,
2292		[ in ] uint32 inSize,
2293		[ in, unique, size_is(inSize) ] uint8 *pInData,
2294		[ out, ref, size_is(1, 1) ] CLUSTER_MRR_RESPONSE **ppInfo,
2295		[ out ] WERROR *rpc_status
2296	);
2297
2298	/*****************/
2299	/* Function 0x8F */
2300
2301	WERROR
2302	clusapi_CreateGroupEnum(
2303		[ in ] HCLUSTER_RPC hCluster,
2304		[ in, unique, size_is(cbProperties)] uint8* pProperties,
2305		[ in ] uint32 cbProperties,
2306		[ in, unique, size_is(cbRoProperties)] uint8* pRoProperties,
2307		[ in ] uint32 cbRoProperties,
2308		[ out ] GROUP_ENUM_LIST **ppResultList,
2309		[ out ] WERROR *rpc_status
2310	);
2311
2312	/*****************/
2313	/* Function 0x90 */
2314
2315	WERROR
2316	clusapi_CreateResourceEnum(
2317		[ in ] HCLUSTER_RPC hCluster,
2318		[ in, unique, size_is(cbProperties)] uint8* pProperties,
2319		[ in ] uint32 cbProperties,
2320		[ in, unique, size_is(cbRoProperties)] uint8* pRoProperties,
2321		[ in ] uint32 cbRoProperties,
2322		[ out ] RESOURCE_ENUM_LIST **ppResultList,
2323		[ out ] WERROR *rpc_status
2324	);
2325
2326	/*****************/
2327	/* Function 0x91 */
2328
2329	WERROR
2330	clusapi_ExecuteReadBatch(
2331		[ in ] HKEY_RPC hKey,
2332		[ in ] uint32 cbInData,
2333		[ in, size_is(cbInData)] uint8 *lpInData,
2334		[ out ] uint32 *cbOutData,
2335		[ out, size_is(,*cbOutData) ] uint8 ** lpOutData,
2336		[ out ] WERROR *rpc_status
2337	);
2338
2339	/*****************/
2340	/* Function 0x92 */
2341
2342	WERROR
2343	clusapi_RestartResource(
2344		[ in ] HRES_RPC hResource,
2345		[ in ] uint32 dwFlags,
2346		[ out ] WERROR *rpc_status
2347	);
2348
2349	typedef struct {
2350		uint32 dwNotifyKey;
2351		uint32 dwFilter;
2352		[string] [charset(UTF16)] uint16 *Name;
2353	} NOTIFICATION_DATA_ASYNC_RPC;
2354
2355	/*****************/
2356	/* Function 0x93 */
2357
2358	WERROR
2359	clusapi_GetNotifyAsync(
2360		[ in ] HNOTIFY_RPC hNotify,
2361		[ out, size_is(,*dwNumNotifications) ] NOTIFICATION_DATA_ASYNC_RPC **Notifications,
2362		[ out ] uint32 *dwNumNotifications
2363	);
2364
2365	typedef enum {
2366		DiskIdSignature = 0x00000001,
2367		DiskIdGuid = 0x00000002,
2368		DiskIdUnKnown = 0x00001388
2369	} CLUSDSK_DISKID_ENUM;
2370
2371#if 0
2372	typedef struct {
2373		CLUSDSK_DISKID_ENUM DiskIdType;
2374		[switch_is(DiskIdType)] union {
2375			[case(DiskIdSignature)] uint32 DiskSignature;
2376			[case(DiskIdGuid)] GUID DiskGuid;
2377		};
2378	} CLUSDSK_DISKID;
2379#endif
2380	typedef enum {
2381		CLUSPROP_TYPE_ENDMARK = 0x0000,
2382		CLUSPROP_TYPE_LIST_VALUE = 0x0001,
2383		CLUSPROP_TYPE_RESCLASS = 0x0002,
2384		CLUSPROP_TYPE_NAME = 0x0004,
2385		CLUSPROP_TYPE_SIGNATURE = 0x0005,
2386		CLUSPROP_TYPE_SCSIADDRESS = 0x0006,
2387		CLUSPROP_TYPE_DISK_NUMBER = 0x0007,
2388		CLUSPROP_TYPE_PARTITION_INFO = 0x0008,
2389		CLUSPROP_TYPE_DISK_SERIALNUMBER = 0x000a,
2390		CLUSPROP_TYPE_DISK_GUID = 0x000b,
2391		CLUSPROP_TYPE_DISK_SIZE = 0x000c,
2392		CLUSPROP_TYPE_PARTITION_INFO_EX = 0x000d
2393	} CLUSTER_PROPERTY_TYPE;
2394
2395	typedef enum {
2396		CLUSPROP_FORMAT_UNKNOWN = 0x0000,
2397		CLUSPROP_FORMAT_BINARY = 0x0001,
2398		CLUSPROP_FORMAT_DWORD = 0x0002,
2399		CLUSPROP_FORMAT_SZ = 0x0003,
2400		CLUSPROP_FORMAT_EXPAND_SZ = 0x0004,
2401		CLUSPROP_FORMAT_MULTI_SZ = 0x0005,
2402		CLUSPROP_FORMAT_ULARGE_INTEGER = 0x0006,
2403		CLUSPROP_FORMAT_LONG = 0x0007,
2404		CLUSPROP_FORMAT_EXPANDED_SZ = 0x0008,
2405		CLUSPROP_FORMAT_SECURITY_DESCRIPTOR = 0x0009,
2406		CLUSPROP_FORMAT_LARGE_INTEGER = 0x000a,
2407		CLUSPROP_FORMAT_WORD = 0x000b,
2408		CLUSPROP_FORMAT_FILETIME = 0x000c
2409	} CLUSTER_PROPERTY_FORMAT;
2410
2411	typedef enum {
2412		CLUS_CHAR_UNKNOWN = 0x00000000,
2413		CLUS_CHAR_QUORUM = 0x00000001,
2414		CLUS_CHAR_DELETE_REQUIRES_ALL_NODES = 0x00000002,
2415		CLUS_CHAR_LOCAL_QUORUM = 0x00000004,
2416		CLUS_CHAR_BROADCAST_DELETE = 0x00000020,
2417		CLUS_CHAR_SINGLE_CLUSTER_INSTANCE = 0x00000040,
2418		CLUS_CHAR_SINGLE_GROUP_INSTANCE = 0x00000080,
2419		CLUS_CHAR_COEXIST_IN_SHARED_VOLUME_GROUP = 0x00000100,
2420		CLUS_CHAR_RESERVED1 = 0x00000200,
2421		CLUS_CHAR_MONITOR_DETACH = 0x00000400,
2422		CLUS_CHAR_RESERVED2 = 0x00000800,
2423		CLUS_CHAR_RESERVED3 = 0x00001000,
2424		CLUS_CHAR_RESERVED4 = 0x00002000
2425	} CLUS_CHARACTERISTICS;
2426
2427	typedef enum {
2428		CLUS_FLAG_CORE = 0x00000001
2429	} CLUS_FLAGS;
2430
2431	typedef enum {
2432		MaintenanceModeTypeDisableIsAliveCheck = 1,
2433		MaintenanceModeTypeOfflineResource = 2,
2434		MaintenanceModeTypeUnclusterResource = 3
2435	} MAINTENANCE_MODE_TYPE;
2436
2437	typedef enum {
2438		CLUSTER_CHANGE_NODE_STATE = 0x00000001,
2439		CLUSTER_CHANGE_NODE_DELETED = 0x00000002,
2440		CLUSTER_CHANGE_NODE_ADDED = 0x00000004,
2441		CLUSTER_CHANGE_NODE_PROPERTY = 0x00000008,
2442		CLUSTER_CHANGE_REGISTRY_NAME = 0x00000010,
2443		CLUSTER_CHANGE_REGISTRY_ATTRIBUTES = 0x00000020,
2444		CLUSTER_CHANGE_REGISTRY_VALUE = 0x00000040,
2445		CLUSTER_CHANGE_REGISTRY_SUBTREE = 0x00000080,
2446		CLUSTER_CHANGE_RESOURCE_STATE = 0x00000100,
2447		CLUSTER_CHANGE_RESOURCE_DELETED = 0x00000200,
2448		CLUSTER_CHANGE_RESOURCE_ADDED = 0x00000400,
2449		CLUSTER_CHANGE_RESOURCE_PROPERTY = 0x00000800,
2450		CLUSTER_CHANGE_GROUP_STATE = 0x00001000,
2451		CLUSTER_CHANGE_GROUP_DELETED = 0x00002000,
2452		CLUSTER_CHANGE_GROUP_ADDED = 0x00004000,
2453		CLUSTER_CHANGE_GROUP_PROPERTY = 0x00008000,
2454		CLUSTER_CHANGE_RESOURCE_TYPE_DELETED = 0x00010000,
2455		CLUSTER_CHANGE_RESOURCE_TYPE_ADDED = 0x00020000,
2456		CLUSTER_CHANGE_RESOURCE_TYPE_PROPERTY = 0x00040000,
2457		CLUSTER_CHANGE_CLUSTER_RECONNECT = 0x00080000,
2458		CLUSTER_CHANGE_NETWORK_STATE = 0x00100000,
2459		CLUSTER_CHANGE_NETWORK_DELETED = 0x00200000,
2460		CLUSTER_CHANGE_NETWORK_ADDED = 0x00400000,
2461		CLUSTER_CHANGE_NETWORK_PROPERTY = 0x00800000,
2462		CLUSTER_CHANGE_NETINTERFACE_STATE = 0x01000000,
2463		CLUSTER_CHANGE_NETINTERFACE_DELETED = 0x02000000,
2464		CLUSTER_CHANGE_NETINTERFACE_ADDED = 0x04000000,
2465		CLUSTER_CHANGE_NETINTERFACE_PROPERTY = 0x08000000,
2466		CLUSTER_CHANGE_QUORUM_STATE = 0x10000000,
2467		CLUSTER_CHANGE_CLUSTER_STATE = 0x20000000,
2468		CLUSTER_CHANGE_CLUSTER_PROPERTY = 0x40000000,
2469		CLUSTER_CHANGE_HANDLE_CLOSE = 0x80000000
2470	} CLUSTER_CHANGE;
2471
2472	typedef enum {
2473		CLUSREG_SET_VALUE = 1,
2474		CLUSREG_CREATE_KEY = 2,
2475		CLUSREG_DELETE_KEY = 3,
2476		CLUSREG_DELETE_VALUE = 4,
2477		CLUSREG_VALUE_DELETED = 6,
2478		CLUSREG_READ_KEY = 7,
2479		CLUSREG_READ_VALUE = 8,
2480		CLUSREG_READ_ERROR = 9
2481	} CLUSTER_REG_BATCH_COMMAND;
2482#if 0
2483	typedef enum {
2484		IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1
2485	} IDL_CLUSTER_SET_PASSWORD_FLAGS;
2486#endif
2487	typedef enum {
2488		CLUSTER_QUORUM_MAINTAINED = 0,
2489		CLUSTER_QUORUM_LOST = 1
2490	} CLUSTER_QUORUM_VALUE;
2491
2492	typedef enum {
2493		CLUSTER_OBJECT_TYPE_CLUSTER = 0x00000001,
2494		CLUSTER_OBJECT_TYPE_GROUP = 0x00000002,
2495		CLUSTER_OBJECT_TYPE_RESOURCE = 0x00000003,
2496		CLUSTER_OBJECT_TYPE_RESOURCE_TYPE = 0x00000004,
2497		CLUSTER_OBJECT_TYPE_NETWORK_INTERFACE = 0x00000005,
2498		CLUSTER_OBJECT_TYPE_NETWORK = 0x00000006,
2499		CLUSTER_OBJECT_TYPE_NODE = 0x00000007,
2500		CLUSTER_OBJECT_TYPE_REGISTRY = 0x00000008,
2501		CLUSTER_OBJECT_TYPE_QUORUM = 0x00000009,
2502		CLUSTER_OBJECT_TYPE_SHARED_VOLUME = 0x0000000a
2503	} CLUSTER_OBJECT_TYPE;
2504
2505	typedef enum {
2506		CLUSTER_CHANGE_CLUSTER_RECONNECT_V2 = 0x00000001,
2507		CLUSTER_CHANGE_CLUSTER_STATE_V2 = 0x00000002,
2508		CLUSTER_CHANGE_CLUSTER_GROUP_ADDED_V2 = 0x00000004,
2509		CLUSTER_CHANGE_CLUSTER_HANDLE_CLOSE_V2 = 0x00000008,
2510		CLUSTER_CHANGE_CLUSTER_NETWORK_ADDED_V2 = 0x00000010,
2511		CLUSTER_CHANGE_CLUSTER_NODE_ADDED_V2 = 0x00000020,
2512		CLUSTER_CHANGE_CLUSTER_RESOURCE_TYPE_ADDED_V2 = 0x00000040,
2513		CLUSTER_CHANGE_CLUSTER_COMMON_PROPERTY_V2 = 0x00000080,
2514		CLUSTER_CHANGE_CLUSTER_PRIVATE_PROPERTY_V2 = 0x00000100,
2515		CLUSTER_CHANGE_CLUSTER_LOST_NOTIFICATIONS_V2 = 0x00000200,
2516		CLUSTER_CHANGE_CLUSTER_RENAME_V2 = 0x00000400
2517	} CLUSTER_CHANGE_CLUSTER_V2;
2518
2519	typedef enum {
2520		CLUSTER_CHANGE_GROUP_DELETED_V2 = 0x00000001,
2521		CLUSTER_CHANGE_GROUP_COMMON_PROPERTY_V2 = 0x00000002,
2522		CLUSTER_CHANGE_GROUP_PRIVATE_PROPERTY_V2 = 0x00000004,
2523		CLUSTER_CHANGE_GROUP_STATE_V2 = 0x00000008,
2524		CLUSTER_CHANGE_GROUP_OWNER_NODE_V2 = 0x00000010,
2525		CLUSTER_CHANGE_GROUP_PREFERRED_OWNERS_V2 = 0x00000020,
2526		CLUSTER_CHANGE_GROUP_RESOURCE_ADDED_V2 = 0x00000040,
2527		CLUSTER_CHANGE_GROUP_RESOURCE_GAINED_V2 = 0x00000080,
2528		CLUSTER_CHANGE_GROUP_RESOURCE_LOST_V2 = 0x00000100,
2529		CLUSTER_CHANGE_GROUP_HANDLE_CLOSE_V2 = 0x00000200
2530	} CLUSTER_CHANGE_GROUP_V2;
2531
2532	typedef enum {
2533		CLUSTER_CHANGE_RESOURCE_COMMON_PROPERTY_V2 = 0x00000001,
2534		CLUSTER_CHANGE_RESOURCE_PRIVATE_PROPERTY_V2 = 0x00000002,
2535		CLUSTER_CHANGE_RESOURCE_STATE_V2 = 0x00000004,
2536		CLUSTER_CHANGE_RESOURCE_OWNER_GROUP_V2 = 0x00000008,
2537		CLUSTER_CHANGE_RESOURCE_DEPENDENCIES_V2 = 0x00000010,
2538		CLUSTER_CHANGE_RESOURCE_DEPENDENTS_V2 = 0x00000020,
2539		CLUSTER_CHANGE_RESOURCE_POSSIBLE_OWNERS_V2 = 0x00000040,
2540		CLUSTER_CHANGE_RESOURCE_DELETED_V2 = 0x00000080,
2541		CLUSTER_CHANGE_RESOURCE_DLL_UPGRADED_V2 = 0x00000100,
2542		CLUSTER_CHANGE_RESOURCE_HANDLE_CLOSE_V2 = 0x00000200
2543	} CLUSTER_CHANGE_RESOURCE_V2;
2544
2545	typedef enum {
2546		CLUSTER_CHANGE_RESOURCE_TYPE_DELETED_V2 = 0x00000001,
2547		CLUSTER_CHANGE_RESOURCE_TYPE_COMMON_PROPERTY_V2 = 0x00000002,
2548		CLUSTER_CHANGE_RESOURCE_TYPE_PRIVATE_PROPERTY_V2 = 0x00000004,
2549		CLUSTER_CHANGE_RESOURCE_TYPE_POSSIBLE_OWNERS_V2 = 0x00000008,
2550		CLUSTER_CHANGE_RESOURCE_TYPE_DLL_UPGRADED_V2 = 0x00000010
2551	} CHANGE_RESOURCE_TYPE_V2;
2552
2553	typedef enum {
2554		CLUSTER_CHANGE_NETINTERFACE_DELETED_V2 = 0x00000001,
2555		CLUSTER_CHANGE_NETINTERFACE_COMMON_PROPERTY_V2 = 0x00000002,
2556		CLUSTER_CHANGE_NETINTERFACE_PRIVATE_PROPERTY_V2 = 0x00000004,
2557		CLUSTER_CHANGE_NETINTERFACE_STATE_V2 = 0x00000008,
2558		CLUSTER_CHANGE_NETINTERFACE_HANDLE_CLOSE_V2 = 0x00000010
2559	} CLUSTER_CHANGE_NETINTERFACE_V2;
2560
2561	typedef enum {
2562		CLUSTER_CHANGE_NETWORK_DELETED_V2 = 0x00000001,
2563		CLUSTER_CHANGE_NETWORK_COMMON_PROPERTY_V2 = 0x00000002,
2564		CLUSTER_CHANGE_NETWORK_PRIVATE_PROPERTY_V2 = 0x00000004,
2565		CLUSTER_CHANGE_NETWORK_STATE_V2 = 0x00000008,
2566		CLUSTER_CHANGE_NETWORK_HANDLE_CLOSE_V2 = 0x00000010
2567	} CLUSTER_CHANGE_NETWORK_V2;
2568
2569	typedef enum {
2570		CLUSTER_CHANGE_NODE_NETINTERFACE_ADDED_V2 = 0x00000001,
2571		CLUSTER_CHANGE_NODE_DELETED_V2 = 0x00000002,
2572		CLUSTER_CHANGE_NODE_COMMON_PROPERTY_V2 = 0x00000004,
2573		CLUSTER_CHANGE_NODE_PRIVATE_PROPERTY_V2 = 0x00000008,
2574		CLUSTER_CHANGE_NODE_STATE_V2 = 0x00000010,
2575		CLUSTER_CHANGE_NODE_GROUP_GAINED_V2 = 0x00000020,
2576		CLUSTER_CHANGE_NODE_GROUP_LOST_V2 = 0x00000040,
2577		CLUSTER_CHANGE_NODE_HANDLE_CLOSE_V2 = 0x00000080
2578	} CLUSTER_CHANGE_NODE_V2;
2579
2580	typedef enum {
2581		CLUSTER_CHANGE_REGISTRY_ATTRIBUTES_V2 = 0x00000001,
2582		CLUSTER_CHANGE_REGISTRY_NAME_V2 = 0x00000002,
2583		CLUSTER_CHANGE_REGISTRY_SUBTREE_V2 = 0x00000004,
2584		CLUSTER_CHANGE_REGISTRY_VALUE_V2 = 0x00000008,
2585		CLUSTER_CHANGE_REGISTRY_HANDLE_CLOSE_V2 = 0x00000010
2586	} CLUSTER_CHANGE_REGISTRY_V2;
2587
2588	typedef enum {
2589		CLUSTER_CHANGE_QUORUM_STATE_V2 = 0x00000001
2590	} CLUSTER_CHANGE_QUORUM_V2;
2591
2592	typedef enum {
2593		CLUSTER_CHANGE_SHARED_VOLUME_STATE_V2 = 0x00000001
2594	} CLUSTER_CHANGE_SHARED_VOLUME_V2;
2595#if 0
2596	typedef enum {
2597		DiskIdSignature = 0x00000001,
2598		DiskIdGuid = 0x00000002,
2599		DiskIdUnKnown = 0x00001388
2600	} CLUSDSK_DISKID_ENUM;
2601#endif
2602
2603	/*****************/
2604	/* Function 0x94 */
2605
2606	WERROR
2607	Opnum148NotUsedOnWire(void);
2608
2609	/*****************/
2610	/* Function 0x95 */
2611
2612	WERROR
2613	Opnum149otUsedOnWire(void);
2614
2615	/*****************/
2616	/* Function 0x96 */
2617
2618	WERROR
2619	Opnum150NotUsedOnWire(void);
2620
2621	/*****************/
2622	/* Function 0x97 */
2623
2624	WERROR
2625	Opnum151NotUsedOnWire(void);
2626
2627	/*****************/
2628	/* Function 0x98 */
2629
2630	WERROR
2631	Opnum152NotUsedOnWire(void);
2632
2633	/*****************/
2634	/* Function 0x99 */
2635
2636	WERROR
2637	Opnum153NotUsedOnWire(void);
2638
2639	/*****************/
2640	/* Function 0x9A */
2641
2642	WERROR
2643	Opnum154NotUsedOnWire(void);
2644
2645	/*****************/
2646	/* Function 0x9B */
2647
2648	WERROR
2649	clusapi_AddNotifyResourceTypeV2(
2650		[ in ] HNOTIFY_RPC hNotify,
2651		[ in ] hyper filter,
2652		[ in ] uint32 dwNotifyKey,
2653		[ in, string ] [charset(UTF16)] uint16 *resTypeName,
2654		[ in ] uint32 dwVersion,
2655		[ out ] WERROR *rpc_status
2656	);
2657
2658	/*****************/
2659	/* Function 0x9C */
2660
2661	WERROR
2662	Opnum156NotUsedOnWire(void);
2663
2664	/*****************/
2665	/* Function 0x9D */
2666
2667	WERROR
2668	clusapi_ExecuteReadBatchEx(
2669		[in] HKEY_RPC hKey,
2670		[in] uint32 cbInData,
2671		[in, size_is(cbInData)] uint8* lpInData,
2672		[in] uint32 flags,
2673		[out] uint32* cbOutData,
2674		[out, size_is(,*cbOutData)] uint8** lpOutData,
2675		[out] WERROR *rpc_status
2676	);
2677
2678	/*****************/
2679	/* Function 0x9E */
2680
2681	WERROR
2682	Opnum158NotUsedOnWire(void);
2683
2684	/*****************/
2685	/* Function 0x9F */
2686
2687	WERROR
2688	Opnum159NotUsedOnWire(void);
2689
2690	/*****************/
2691	/* Function 0xA0 */
2692
2693	WERROR
2694	Opnum160NotUsedOnWire(void);
2695
2696	/*****************/
2697	/* Function 0xA1 */
2698
2699	WERROR
2700	Opnum161NotUsedOnWire(void);
2701
2702	/*****************/
2703	/* Function 0xA2 */
2704
2705	WERROR
2706	Opnum162NotUsedOnWire(void);
2707
2708	/*****************/
2709	/* Function 0xA3 */
2710
2711#define HGROUPSET_RPC policy_handle
2712#if 0
2713	typedef [context_handle] void *HGROUPSET_RPC;
2714#endif
2715#if 0
2716	HGROUPSET_RPC
2717	clusapi_CreateGroupSet (
2718		[ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName,
2719		[ out ] WERROR *Status,
2720		[ out ] WERROR *rpc_status
2721	);
2722#else
2723	void
2724	clusapi_CreateGroupSet (
2725		[ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName,
2726		[ out ] WERROR *Status,
2727		[ out ] WERROR *rpc_status,
2728		[ out ] HGROUPSET_RPC *hGroupSet
2729	);
2730#endif
2731
2732	/*****************/
2733	/* Function 0xA4 */
2734#if 0
2735	HGROUPSET_RPC
2736	clusapi_OpenGroupSet(
2737		[ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName,
2738		[ out ] WERROR *Status,
2739		[ out ] WERROR *rpc_status
2740	);
2741#else
2742	void
2743	clusapi_OpenGroupSet(
2744		[ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName,
2745		[ out ] WERROR *Status,
2746		[ out ] WERROR *rpc_status,
2747		[ out ] HGROUPSET_RPC *hGroupSet
2748	);
2749#endif
2750
2751	/*****************/
2752	/* Function 0xA5 */
2753
2754	WERROR
2755	clusapi_CloseGroupSet(
2756		[ in, out ] HGROUPSET_RPC *GroupSet
2757	);
2758
2759	/*****************/
2760	/* Function 0xA6 */
2761
2762	WERROR
2763	clusapi_DeleteGroupSet(
2764		[ in ] HGROUPSET_RPC GroupSet,
2765		[ out ] WERROR *rpc_status
2766	);
2767
2768	/*****************/
2769	/* Function 0xA7 */
2770
2771	WERROR
2772	clusapi_AddGroupToGroupSet(
2773		[ in ] HGROUPSET_RPC GroupSet,
2774		[ in ] HGROUP_RPC Group,
2775		[ out ] WERROR *rpc_status
2776	);
2777
2778	/*****************/
2779	/* Function 0xA8 */
2780
2781	WERROR
2782	clusapi_RemoveGroupFromGroupSet(
2783		[ in ] HGROUP_RPC Group,
2784		[ out ] WERROR *rpc_status
2785	);
2786
2787	/*****************/
2788	/* Function 0xA9 */
2789
2790	WERROR
2791	clusapi_MoveGroupToGroupSet(
2792		[ in ] HGROUPSET_RPC GroupSet,
2793		[ in ] HGROUP_RPC Group,
2794		[ out ] WERROR *rpc_status
2795	);
2796
2797	/*****************/
2798	/* Function 0xAA */
2799
2800	WERROR
2801	Opnum170NotUsedOnWire(void);
2802
2803	/*****************/
2804	/* Function 0xAB */
2805
2806	WERROR
2807	clusapi_AddGroupSetDependency(
2808		[ in ] HGROUPSET_RPC DependentGroupSet,
2809		[ in ] HGROUPSET_RPC ProviderGroupSet,
2810		[ out ] WERROR *rpc_status
2811	);
2812
2813	/*****************/
2814	/* Function 0xAC */
2815
2816	WERROR
2817	clusapi_AddGroupToGroupSetDependency(
2818		[ in ] HGROUP_RPC DependentGroup,
2819		[ in ] HGROUPSET_RPC ProviderGroupSet,
2820		[ out ] WERROR *rpc_status
2821	);
2822
2823	/*****************/
2824	/* Function 0xAD */
2825
2826	typedef [v1_enum] enum {
2827		CLUSCTL_GROUPSET_GET_ID				= 0x08000039,
2828		CLUSCTL_GROUPSET_GET_RO_COMMON_PROPERTIES	= 0x08000055,
2829		CLUSCTL_GROUPSET_GET_COMMON_PROPERTIES		= 0x08000059,
2830		CLUSCTL_GROUPSET_GET_GROUPS			= 0x08002D71,
2831		CLUSCTL_GROUPSET_GET_PROVIDER_GROUPS		= 0x08002D75,
2832		CLUSCTL_GROUPSET_GET_PROVIDER_GROUPSETS		= 0x08002D79,
2833		CLUSCTL_GROUPSET_SET_COMMON_PROPERTIES		= 0x0840005E
2834	} clusapi_GroupSetControlCode;
2835
2836	WERROR
2837	clusapi_NodeGroupSetControl(
2838		[ in ] HGROUPSET_RPC hGroupSet,
2839		[ in ] HNODE_RPC hNode,
2840		[ in ] clusapi_GroupSetControlCode dwControlCode,
2841		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
2842		[ in ] uint32 nInBufferSize,
2843		[ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
2844		[ in, range(0, MAX_CLUSTER_CONTROL_CODE_BUFFER_SIZE)] uint32 nOutBufferSize,
2845		[ out ] uint32 *lpBytesReturned,
2846		[ out ] uint32 *lpcbRequired,
2847		[ out ] WERROR *rpc_status
2848	);
2849
2850	/*****************/
2851	/* Function 0xAE */
2852
2853	WERROR
2854	clusapi_GroupSetControl(
2855		[ in ] HGROUPSET_RPC hGroupSet,
2856		[ in ] clusapi_GroupSetControlCode dwControlCode,
2857		[ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
2858		[ in ] uint32 nInBufferSize,
2859		[ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] uint8 *lpOutBuffer,
2860		[ in, range(0, 0x7FFFFFFF)] uint32 nOutBufferSize,
2861		[ out ] uint32 *lpBytesReturned,
2862		[ out ] uint32 *lpcbRequired,
2863		[ out ] WERROR *rpc_status
2864	);
2865
2866	/*****************/
2867	/* Function 0xAF */
2868
2869	WERROR
2870	clusapi_SetGroupDependencyExpression(
2871		[ in ] HGROUP_RPC hGroup,
2872		[ in, string ] [charset(UTF16)] uint16 *lpszDependencyExpression,
2873		[ out ] WERROR *rpc_status
2874	);
2875
2876	/*****************/
2877	/* Function 0xB0 */
2878
2879	WERROR
2880	clusapi_RemoveClusterGroupDependency(
2881		[ in ] HGROUP_RPC hGroup,
2882		[ in ] HGROUP_RPC hDependsOn,
2883		[ out ] WERROR *rpc_status
2884	);
2885
2886	/*****************/
2887	/* Function 0xB1 */
2888
2889	WERROR
2890	clusapi_SetGroupSetDependencyExpression(
2891		[ in ] HGROUPSET_RPC hGroupSet,
2892		[ in, string ] [charset(UTF16)] uint16 *lpszDependencyExpression,
2893		[ out ] WERROR *rpc_status
2894	);
2895
2896	/*****************/
2897	/* Function 0xB2 */
2898
2899	WERROR
2900	clusapi_RemoveGroupSetDependency(
2901		[ in ] HGROUPSET_RPC hGroupSet,
2902		[ in ] HGROUPSET_RPC hDependsOn,
2903		[ out ] WERROR *rpc_status
2904	);
2905
2906	/*****************/
2907	/* Function 0xB3 */
2908
2909	WERROR
2910	clusapi_RemoveClusterGroupToGroupSetDependency(
2911		[ in ] HGROUP_RPC hGroup,
2912		[ in ] HGROUPSET_RPC hDependsOn,
2913		[ out ] WERROR *rpc_status
2914	);
2915
2916	/*****************/
2917	/* Function 0xB4 */
2918
2919	WERROR
2920	clusapi_CreateGroupSetEnum(
2921		[ in ] HCLUSTER_RPC hCluster,
2922		[ out ] ENUM_LIST **ReturnEnum,
2923		[ out ] WERROR * rpc_status
2924	);
2925
2926	/*****************/
2927	/* Function 0xB5 */
2928
2929	WERROR
2930	clusapi_CreateNetInterfaceEnum(
2931		[in] HCLUSTER_RPC hCluster,
2932		[in, string] [charset(UTF16)] uint16 *lpszNodeName,
2933		[in, string] [charset(UTF16)] uint16 *lpszNetworkName,
2934		[out] ENUM_LIST **ReturnEnum,
2935		[out] WERROR * rpc_status
2936	);
2937
2938	/*****************/
2939	/* Function 0xB6 */
2940
2941	WERROR
2942	clusapi_ChangeCsvStateEx(
2943		[ in ] HRES_RPC hResource,
2944		[ in ] uint32 dwState,
2945		[ in, string ] [charset(UTF16)] uint16 *lpszVolumeName,
2946		[ out ] WERROR *rpc_status
2947	);
2948
2949	/*****************/
2950	/* Function 0xB7 */
2951
2952	WERROR
2953	clusapi_AddGroupToGroupSetEx(
2954		[ in ] HGROUPSET_RPC GroupSet,
2955		[ in ] HGROUP_RPC Group,
2956		[ in ] uint32 FaultDomain,
2957		[ in ] uint32 UpdateDomain,
2958		[ in ] boolean8 UseDomains,
2959		[ in ] uint32 *Reserved,
2960		[ out ] WERROR *rpc_status
2961	);
2962}
2963