a85871e28e5efd0a5fbaf256facff176fb00b7b3
[samba.git] / source4 / librpc / idl / drsuapi.idl
1 #include "idl_types.h"
2
3
4   uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"),
5   version(4.0),
6   endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]","ncacn_ip_tcp:"),
7   helpstring("Active Directory Replication"),
8   pointer_default(unique)
9
10 interface drsuapi
11 {
12         /*****************/
13         /* Function 0x00 */
14
15         const uint32 DRSUAPI_SUPPORTED_EXTENSION_BASE                           = 0x00000001;
16         const uint32 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION              = 0x00000002;
17         const uint32 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI                      = 0x00000004;
18         const uint32 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2                     = 0x00000008;
19         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS                = 0x00000010;
20         const uint32 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1                      = 0x00000020;
21         const uint32 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION       = 0x00000040;
22         const uint32 DRSUAPI_SUPPORTED_EXTENSION_00000080                       = 0x00000080;
23         const uint32 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE                    = 0x00000100;
24         const uint32 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2                    = 0x00000200;
25         const uint32 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION       = 0x00000400;
26         const uint32 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2                      = 0x00000800;
27         const uint32 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD   = 0x00001000;
28         const uint32 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND                    = 0x00002000;
29         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO                  = 0x00004000;
30         const uint32 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION              = 0x00008000;
31         const uint32 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01                     = 0x00010000;
32         const uint32 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP          = 0x00020000;
33         const uint32 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY                = 0x00040000;
34         const uint32 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3                     = 0x00080000;
35         const uint32 DRSUAPI_SUPPORTED_EXTENSION_00100000                       = 0x00100000;
36         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2               = 0x00200000;
37         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6                   = 0x00400000;
38         const uint32 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS                  = 0x00800000;
39         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8                   = 0x01000000;
40         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5                 = 0x02000000;
41         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6                 = 0x04000000;
42         /* the following 3 are correctly be the same value */
43         const uint32 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3               = 0x08000000;
44         const uint32 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7                 = 0x08000000;
45         const uint32 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT                  = 0x08000000;
46         const uint32 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS                = 0x10000000;
47         const uint32 DRSUAPI_SUPPORTED_EXTENSION_20000000                       = 0x20000000;
48         const uint32 DRSUAPI_SUPPORTED_EXTENSION_40000000                       = 0x40000000;
49         const uint32 DRSUAPI_SUPPORTED_EXTENSION_80000000                       = 0x80000000;
50
51         /* this is used by w2k */
52         typedef struct {
53                 uint32 supported_extensions;
54                 GUID site_guid;
55                 uint32 u1;
56         } drsuapi_DsBindInfo24;
57
58         /* this is used by w2k3 */
59         typedef struct {
60                 uint32 supported_extensions;
61                 GUID site_guid;
62                 uint32 u1;
63                 uint32 repl_epoch;
64         } drsuapi_DsBindInfo28;
65
66         typedef struct {
67                 [flag(NDR_REMAINING)] DATA_BLOB info;
68         } drsuapi_DsBindInfoFallBack;
69
70         typedef [nodiscriminant] union {
71                 [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24;
72                 [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28;
73                 [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;
74         } drsuapi_DsBindInfo;
75
76         /* the drsuapi_DsBindInfoCtr was this before
77          * typedef [flag(NDR_PAHEX)] struct {
78          *      [range(1,10000)] uint32 length;
79          *      [size_is(length)] uint8 data[];
80          * } drsuapi_DsBindInfo;
81          *
82          * but we don't want the caller to manually decode this blob,
83          * so we're doing it here
84          */
85
86         typedef struct {
87                 [range(1,10000)] uint32 length;
88                 [switch_is(length)] drsuapi_DsBindInfo info;
89         } drsuapi_DsBindInfoCtr;
90
91         /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
92          * 
93          * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
94          */
95         const string DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
96
97         WERROR drsuapi_DsBind(
98                 [in]        GUID *bind_guid,
99                 [in,out]    drsuapi_DsBindInfoCtr *bind_info,
100                 [out,ref]   policy_handle *bind_handle
101                 );
102
103         /*****************/
104         /* Function 0x01 */
105         WERROR drsuapi_DsUnbind(
106                 [in,out,ref] policy_handle *bind_handle
107                 );
108
109         /*****************/
110         /* Function 0x02 */
111         typedef [flag(NDR_PAHEX)] struct {
112                 uint32 unknown1;
113                 uint32 unknown2;
114                 GUID guid1;
115                 uint8 unknown3[28];
116                 [flag(STR_SIZE4|STR_CHARLEN|STR_CONFORMANT)] string nc_dn;
117         } drsuapi_DsReplicaSyncRequest1Info;
118
119         typedef struct {
120                 drsuapi_DsReplicaSyncRequest1Info *info;
121                 GUID guid1;
122                 astring *string1;
123                 uint32 unknown1;
124         } drsuapi_DsReplicaSyncRequest1;
125
126         typedef union {
127                 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
128         } drsuapi_DsReplicaSyncRequest;
129
130         WERROR drsuapi_DsReplicaSync(
131                 [in,ref] policy_handle *bind_handle,
132                 [in] int32 level,
133                 [in,switch_is(level)] drsuapi_DsReplicaSyncRequest req
134                 );
135
136         /*****************/
137         /* Function 0x03 */
138         WERROR DRSUAPI_GET_NC_CHANGES();
139
140         /*****************/
141         /* Function 0x04 */
142         WERROR DRSUAPI_UPDATE_REFS();
143
144         /*****************/
145         /* Function 0x05 */
146         WERROR DRSUAPI_REPLICA_ADD();
147
148         /*****************/
149         /* Function 0x06 */
150         WERROR DRSUAPI_REPLICA_DEL();
151
152         /*****************/
153         /* Function 0x07 */
154         WERROR DRSUAPI_REPLICA_MODIFY();
155
156         /*****************/
157         /* Function 0x08 */
158         WERROR DRSUAPI_VERIFY_NAMES();
159
160         /*****************/
161         /* Function 0x09 */
162         WERROR DRSUAPI_GET_MEMBERSHIPS();
163
164         /*****************/
165         /* Function 0x0a */
166         WERROR DRSUAPI_INTER_DOMAIN_MOVE();
167
168         /*****************/
169         /* Function 0x0b */
170         WERROR DRSUAPI_GET_NT4_CHANGELOG();
171
172         /*****************/
173         /* Function 0x0c */
174         typedef enum {
175                 DRSUAPI_DS_NAME_STATUS_OK                       = 0,
176                 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR            = 1,
177                 DRSUAPI_DS_NAME_STATUS_NOT_FOUND                = 2,
178                 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE               = 3,
179                 DRSUAPI_DS_NAME_STATUS_NO_MAPPING               = 4,
180                 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY              = 5,
181                 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING   = 6,
182                 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL           = 7
183         } drsuapi_DsNameStatus;
184
185         typedef enum {
186                 DRSUAPI_DS_NAME_FLAG_NO_FLAGS                   = 0x0,
187                 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY           = 0x1,
188                 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC                 = 0x2,
189                 DRSUAPI_DS_NAME_FLAG_GCVERIFY                   = 0x4,
190                 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL             = 0x8
191         } drsuapi_DsNameFlags;
192
193         typedef enum {
194                 DRSUAPI_DS_NAME_FORMAT_UKNOWN                   = 0,
195                 DRSUAPI_DS_NAME_FORMAT_FQDN_1779                = 1,
196                 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT              = 2,
197                 DRSUAPI_DS_NAME_FORMAT_DISPLAY                  = 3,
198                 DRSUAPI_DS_NAME_FORMAT_GUID                     = 6,
199                 DRSUAPI_DS_NAME_FORMAT_CANONICAL                = 7,
200                 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL           = 8,
201                 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX             = 9,
202                 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL        = 10,
203                 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY       = 11,
204                 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN               = 12
205         } drsuapi_DsNameFormat;
206
207         typedef struct {
208                 unistr *str;
209         } drsuapi_DsNameString;
210
211         typedef struct {
212                 uint32 unknown1; /* 0x000004e4 */
213                 uint32 unknown2; /* 0x00000407 */
214                 uint32 format_flags;
215                 uint32 format_offered;
216                 uint32 format_desired;
217                 [range(1,10000)] uint32 count;
218                 [size_is(count)] drsuapi_DsNameString *names;
219         } drsuapi_DsNameRequest1;
220
221         typedef union {
222                 [case(1)] drsuapi_DsNameRequest1 req1;
223         } drsuapi_DsNameRequest;
224
225         typedef struct {
226                 uint32 status;
227                 unistr *dns_domain_name;
228                 unistr *result_name;
229         } drsuapi_DsNameInfo1;
230
231         typedef struct {
232                 uint32 count;
233                 [size_is(count)] drsuapi_DsNameInfo1 *array;
234         } drsuapi_DsNameCtr1;
235
236         typedef union {
237                 [case(1)] drsuapi_DsNameCtr1 *ctr1;
238         } drsuapi_DsNameCtr;
239
240         WERROR drsuapi_DsCrackNames(
241                 [in,ref] policy_handle *bind_handle,
242                 [in, out] int32 level,
243                 [in,switch_is(level)] drsuapi_DsNameRequest req,
244                 [out,switch_is(level)] drsuapi_DsNameCtr ctr
245                 );
246
247         /*****************/
248         /* Function 0x0d */
249         typedef enum {
250                 DRSUAPI_DS_SPN_OPERATION_ADD    = 0,
251                 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
252                 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
253         } drsuapi_DsSpnOperation;
254
255         typedef struct {
256                 int32 operation;
257                 int32 unknown1;
258                 unistr *object_dn;
259                 [range(0,10000)] uint32 count;
260                 [size_is(count)] drsuapi_DsNameString *spn_names;
261         } drsuapi_DsWriteAccountSpnRequest1;
262
263         typedef union {
264                 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
265         } drsuapi_DsWriteAccountSpnRequest;
266
267         typedef struct {
268                 WERROR status;
269         } drsuapi_DsWriteAccountSpnResult1;
270
271         typedef union {
272                 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
273         } drsuapi_DsWriteAccountSpnResult;
274
275         WERROR drsuapi_DsWriteAccountSpn(
276                 [in,ref] policy_handle *bind_handle,
277                 [in, out] int32 level,
278                 [in,switch_is(level)] drsuapi_DsWriteAccountSpnRequest req,
279                 [out,switch_is(level)] drsuapi_DsWriteAccountSpnResult res
280                 );
281
282         /*****************/
283         /* Function 0x0e */
284         WERROR DRSUAPI_REMOVE_DS_SERVER();
285
286         /*****************/
287         /* Function 0x0f */
288         WERROR DRSUAPI_REMOVE_DS_DOMAIN();
289
290         /*****************/
291         /* Function 0x10 */
292         typedef struct {
293                 unistr *domain_name; /* netbios or dns */
294                 int32 level; /* specifies the switch level for the request */
295         } drsuapi_DsGetDCInfoRequest1;
296
297         typedef union {
298                 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
299         } drsuapi_DsGetDCInfoRequest;
300
301         typedef struct {
302                 unistr *netbios_name;
303                 unistr *dns_name;
304                 unistr *site_name;
305                 unistr *computer_dn;
306                 unistr *server_dn;
307                 uint32 is_pdc;
308                 uint32 is_enabled;
309         } drsuapi_DsGetDCInfo1;
310
311         typedef struct {
312                 [range(0,10000)] uint32 count;
313                 [size_is(count)] drsuapi_DsGetDCInfo1 *array;
314         } drsuapi_DsGetDCInfoCtr1;
315
316         typedef struct {
317                 unistr *netbios_name;
318                 unistr *dns_name;
319                 unistr *site_name;
320                 unistr *site_dn;
321                 unistr *computer_dn;
322                 unistr *server_dn;
323                 unistr *ntds_dn;
324                 uint32 is_pdc;
325                 uint32 is_enabled;
326                 uint32 is_gc;
327                 GUID site_guid;
328                 GUID computer_guid;
329                 GUID server_guid;
330                 GUID ntds_guid;
331         } drsuapi_DsGetDCInfo2;
332
333         typedef struct {
334                 [range(0,10000)] uint32 count;
335                 [size_is(count)] drsuapi_DsGetDCInfo2 *array;
336         } drsuapi_DsGetDCInfoCtr2;
337
338         typedef struct {
339                 uint32 unknown1;
340                 uint32 unknown2;
341                 uint32 unknown3;
342                 uint32 unknown4;
343                 uint32 unknown5;
344                 uint32 unknown6;
345                 unistr *server_nt4_account;
346         } drsuapi_DsGetDCInfo01;
347
348         typedef struct {
349                 [range(0,10000)] uint32 count;
350                 [size_is(count)] drsuapi_DsGetDCInfo01 *array;
351         } drsuapi_DsGetDCInfoCtr01;
352
353         typedef union {
354                 [case(1)] drsuapi_DsGetDCInfoCtr1 ctr1;
355                 [case(2)] drsuapi_DsGetDCInfoCtr2 ctr2;
356                 [case(-1)] drsuapi_DsGetDCInfoCtr01 ctr01;
357         } drsuapi_DsGetDCInfoCtr;
358
359         WERROR drsuapi_DsGetDomainControllerInfo(
360                 [in,ref] policy_handle *bind_handle,
361                 [in, out] int32 level,
362                 [in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
363                 [out,switch_is(level)] drsuapi_DsGetDCInfoCtr ctr
364                 );
365
366         /*****************/
367         /* Function 0x11 */
368         WERROR DRSUAPI_ADD_ENTRY();
369
370         /*****************/
371         /* Function 0x12 */
372         WERROR DRSUAPI_EXECUTE_KCC();
373
374         /*****************/
375         /* Function 0x13 */
376         typedef enum {
377                 DRSUAPI_DS_REPLICA_GET_INFO                             = 1,
378                 DRSUAPI_DS_REPLICA_GET_INFO2                            = 2
379         } drsuapi_DsReplicaGetInfoLevel;
380
381         typedef enum {
382                 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS                       = 0,
383                 DRSUAPI_DS_REPLICA_INFO_CURSORS                         = 1,
384                 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA                    = 2,
385                 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES        = 3,
386                 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES           = 4,
387                 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS                     = 5,
388                 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA        = 6,
389                 DRSUAPI_DS_REPLICA_INFO_CURSORS2                        = 7,
390                 DRSUAPI_DS_REPLICA_INFO_CURSORS3                        = 8,
391                 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2                   = 9,
392                 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2       = 10,
393                 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02                     = -2,
394                 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04                   = -4,
395                 DRSUAPI_DS_REPLICA_INFO_CURSURS05                       = -5,
396                 DRSUAPI_DS_REPLICA_INFO_06                              = -6
397         } drsuapi_DsReplicaInfoType;
398
399         typedef struct {
400                 int32 info_type;
401                 unistr *object_dn;
402                 GUID guid1;
403         } drsuapi_DsReplicaGetInfoRequest1;
404
405         typedef struct {
406                 int32 info_type;
407                 unistr *object_dn;
408                 GUID guid1;
409                 uint32 unknown1;
410                 unistr *string1;
411                 unistr *string2;
412                 uint32 unknown2;
413         } drsuapi_DsReplicaGetInfoRequest2;
414
415         typedef union {
416                 [case(1)] drsuapi_DsReplicaGetInfoRequest1 req1;
417                 [case(2)] drsuapi_DsReplicaGetInfoRequest2 req2;
418         } drsuapi_DsReplicaGetInfoRequest;
419
420         typedef struct {
421                 unistr *naming_context_dn;
422                 unistr *source_dsa_obj_dn;
423                 unistr *source_dsa_address;
424                 unistr *transport_obj_dn;
425                 uint32 replica_flags;
426                 uint32 reserved;
427                 GUID naming_context_obj_guid;
428                 GUID source_dsa_obj_guid;
429                 GUID source_dsa_invocation_id;
430                 GUID transport_obj_guid;
431                 HYPER_T tmp_highest_usn;
432                 HYPER_T highest_usn;
433                 NTTIME last_success;
434                 NTTIME last_attempt;
435                 WERROR result_last_attempt;
436                 uint32 consecutive_sync_failures;
437         } drsuapi_DsReplicaNeighbour;
438
439         typedef struct {
440                 uint32 count;
441                 uint32 reserved;
442                 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
443         } drsuapi_DsReplicaNeighbourCtr;
444
445         typedef struct {
446                 GUID source_dsa_invocation_id;
447                 HYPER_T highest_usn;
448         } drsuapi_DsReplicaCoursor;
449
450         typedef struct {
451                 uint32 count;
452                 uint32 reserved;
453                 [size_is(count)] drsuapi_DsReplicaCoursor array[];
454         } drsuapi_DsReplicaCoursorCtr;
455
456         typedef struct {
457                 unistr *attribute_name;
458                 uint32 version;
459                 NTTIME originating_last_changed;
460                 GUID originating_dsa_invocation_id;
461                 HYPER_T originating_usn;
462                 HYPER_T local_usn;
463         } drsuapi_DsReplicaObjMetaData;
464
465         typedef struct {
466                 uint32 count;
467                 uint32 reserved;
468                 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
469         } drsuapi_DsReplicaObjMetaDataCtr;
470
471         typedef struct {
472                 unistr *dsa_obj_dn;
473                 GUID dsa_obj_guid;
474                 NTTIME first_failure;
475                 uint32 num_failures;
476                 WERROR last_result;
477         } drsuapi_DsReplicaKccDsaFailure;
478
479         typedef struct {
480                 uint32 count;
481                 uint32 reserved;
482                 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
483         } drsuapi_DsReplicaKccDsaFailuresCtr;
484
485         typedef struct {
486                 NTTIME operation_start;
487                 uint32 serial_num; /* unique till reboot */
488                 uint32 priority;
489                 uint16 operation_type;
490                 uint32 options_flags;
491                 unistr *nc_dn;
492                 unistr *remote_dsa_obj_dn;
493                 unistr *remote_dsa_address;
494                 GUID nc_obj_guid;
495                 GUID remote_dsa_obj_guid;
496         } drsuapi_DsReplicaOp;
497
498         typedef struct {
499                 NTTIME time;
500                 uint32 count;
501                 [size_is(count)] drsuapi_DsReplicaOp array[];
502         } drsuapi_DsReplicaOpCtr;
503
504         typedef struct {
505                 unistr *attribute_name;
506                 unistr *object_dn;
507                 uint32 value_length;
508                 [size_is(value_length)] uint8 *value;
509                 NTTIME deleted;
510                 NTTIME created;
511                 uint32 version;
512                 NTTIME originating_last_changed;
513                 GUID originating_dsa_invocation_id;
514                 HYPER_T originating_usn;
515                 HYPER_T local_usn;
516         } drsuapi_DsReplicaAttrValMetaData;
517
518         typedef struct {
519                 uint32 count;
520                 int32 enumeration_context;
521                 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
522         } drsuapi_DsReplicaAttrValMetaDataCtr;
523
524         typedef struct {
525                 GUID source_dsa_invocation_id;
526                 HYPER_T highest_usn;
527                 NTTIME last_sync_success;
528         } drsuapi_DsReplicaCoursor2;
529
530         typedef struct {
531                 uint32 count;
532                 int32 enumeration_context;
533                 [size_is(count)] drsuapi_DsReplicaCoursor2 array[];
534         } drsuapi_DsReplicaCoursor2Ctr;
535
536         typedef struct {
537                 GUID source_dsa_invocation_id;
538                 HYPER_T highest_usn;
539                 NTTIME last_sync_success;
540                 unistr *source_dsa_obj_dn;
541         } drsuapi_DsReplicaCoursor3;
542
543         typedef struct {
544                 uint32 count;
545                 int32 enumeration_context;
546                 [size_is(count)] drsuapi_DsReplicaCoursor3 array[];
547         } drsuapi_DsReplicaCoursor3Ctr;
548
549         typedef struct {
550                 unistr *attribute_name;
551                 uint32 version;
552                 NTTIME originating_last_changed;
553                 GUID originating_dsa_invocation_id;
554                 HYPER_T originating_usn;
555                 HYPER_T local_usn;
556                 unistr *originating_dsa_obj_dn;
557         } drsuapi_DsReplicaObjMetaData2;
558
559         typedef struct {
560                 uint32 count;
561                 int32 enumeration_context;
562                 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
563         } drsuapi_DsReplicaObjMetaData2Ctr;
564
565         typedef struct {
566                 unistr *attribute_name;
567                 unistr *object_dn;
568                 uint32 value_length;
569                 [size_is(value_length)] uint8 *value;
570                 NTTIME deleted;
571                 NTTIME created;
572                 uint32 version;
573                 NTTIME originating_last_changed;
574                 GUID originating_dsa_invocation_id;
575                 HYPER_T originating_usn;
576                 HYPER_T local_usn;
577                 unistr *originating_dsa_obj_dn;
578         } drsuapi_DsReplicaAttrValMetaData2;
579
580         typedef struct {
581                 uint32 count;
582                 int32 enumeration_context;
583                 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
584         } drsuapi_DsReplicaAttrValMetaData2Ctr;
585
586         typedef struct {
587                 HYPER_T u1; /* session number? */
588                 uint32 u2;
589                 uint32 u3;
590                 GUID bind_guid;
591                 NTTIME_1sec bind_time;
592                 uint32 u4; /* flags? */
593                 uint32 u5;
594         } drsuapi_DsReplicaConnection04;
595
596         typedef struct {
597                 [range(0,10000)] uint32 count;
598                 uint32 reserved;
599                 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
600         } drsuapi_DsReplicaConnection04Ctr;
601
602         typedef struct {
603                 uint32 u1;
604                 uint32 u2;
605                 [range(0,0x100000)] uint32 count;
606                 uint32 u3;
607                 [size_is(count)] drsuapi_DsReplicaCoursor array[];
608         } drsuapi_DsReplicaCoursor05Ctr;
609
610         typedef struct {
611                 unistr *str1;
612                 uint32 u1;
613                 uint32 u2;
614                 uint32 u3;
615                 uint32 u4;
616                 uint32 u5;
617                 HYPER_T u6;
618                 uint32 u7;
619         } drsuapi_DsReplica06;
620
621         typedef struct {
622                 [range(0,256)] uint32 count;
623                 uint32 reserved;
624                 [size_is(count)] drsuapi_DsReplica06 array[];
625         } drsuapi_DsReplica06Ctr;
626
627         typedef union {
628                 [case(0)] drsuapi_DsReplicaNeighbourCtr *neighbours;
629                 [case(1)] drsuapi_DsReplicaCoursorCtr *coursors;
630                 [case(2)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
631                 [case(3)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
632                 [case(4)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
633                 [case(5)] drsuapi_DsReplicaOpCtr *pendingops;
634                 [case(6)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
635                 [case(7)] drsuapi_DsReplicaCoursor2Ctr *coursors2;
636                 [case(8)] drsuapi_DsReplicaCoursor3Ctr *coursors3;
637                 [case(9)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
638                 [case(10)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
639                 [case(-2)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
640                 [case(-4)] drsuapi_DsReplicaConnection04Ctr *connections04;
641                 [case(-5)] drsuapi_DsReplicaCoursor05Ctr *coursors05;
642                 [case(-6)] drsuapi_DsReplica06Ctr *i06;
643         } drsuapi_DsReplicaInfo;
644
645         WERROR drsuapi_DsReplicaGetInfo(
646                 [in,ref] policy_handle *bind_handle,
647                 [in] int32 level,
648                 [in,switch_is(level)] drsuapi_DsReplicaGetInfoRequest req,
649                 [out] int32 info_type,
650                 [out,switch_is(info_type)] drsuapi_DsReplicaInfo info
651                 );
652
653         /*****************/
654         /* Function 0x14 */
655         WERROR DRSUAPI_ADD_SID_HISTORY();
656
657         /*****************/
658         /* Function 0x15 */
659         WERROR DRSUAPI_GET_MEMBERSHIPS2();
660
661         /*****************/
662         /* Function 0x16 */
663         WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
664
665         /*****************/
666         /* Function 0x17 */
667         WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
668
669         /*****************/
670         /* Function 0x18 */
671         WERROR DRSUAPI_QUERY_SITES_BY_COST();
672 }