r5799: more DsGetNCChanges updates, I'm starting to understand it...
[Samba/gebeck_regimport.git] / source4 / librpc / idl / drsuapi.idl
blobc4b94ba850bf049983b4e8001ba31f02272491c9
1 #include "idl_types.h"
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:", "ncalrpc:"),
7 authservice("ldap"),
8 helpstring("Active Directory Replication"),
9 pointer_default(unique),
10 depends(security)
12 interface drsuapi
14 /*****************/
15 /* Function 0x00 */
16 typedef [bitmap32bit] bitmap {
17 DRSUAPI_SUPPORTED_EXTENSION_BASE = 0x00000001,
18 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION = 0x00000002,
19 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI = 0x00000004,
20 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2 = 0x00000008,
21 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS = 0x00000010,
22 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1 = 0x00000020,
23 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION = 0x00000040,
24 DRSUAPI_SUPPORTED_EXTENSION_00000080 = 0x00000080,
25 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE = 0x00000100,
26 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2 = 0x00000200,
27 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION = 0x00000400,
28 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2 = 0x00000800,
29 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000,
30 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND = 0x00002000,
31 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO = 0x00004000,
32 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION = 0x00008000,
33 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01 = 0x00010000,
34 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP = 0x00020000,
35 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY = 0x00040000,
36 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3 = 0x00080000,
37 DRSUAPI_SUPPORTED_EXTENSION_00100000 = 0x00100000,
38 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2 = 0x00200000,
39 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6 = 0x00400000,
40 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS = 0x00800000,
41 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8 = 0x01000000,
42 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5 = 0x02000000,
43 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6 = 0x04000000,
45 * the following 3 have the same value
46 * repadmin.exe /bind says that
48 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3 = 0x08000000,
49 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7 = 0x08000000,
50 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT = 0x08000000,
51 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS = 0x10000000,
52 DRSUAPI_SUPPORTED_EXTENSION_20000000 = 0x20000000,
53 DRSUAPI_SUPPORTED_EXTENSION_40000000 = 0x40000000,
54 DRSUAPI_SUPPORTED_EXTENSION_80000000 = 0x80000000
55 } drsuapi_SupportedExtensions;
57 /* this is used by w2k */
58 typedef struct {
59 drsuapi_SupportedExtensions supported_extensions;
60 GUID site_guid;
61 uint32 u1;
62 } drsuapi_DsBindInfo24;
64 /* this is used by w2k3 */
65 typedef struct {
66 drsuapi_SupportedExtensions supported_extensions;
67 GUID site_guid;
68 uint32 u1;
69 uint32 repl_epoch;
70 } drsuapi_DsBindInfo28;
72 typedef struct {
73 [flag(NDR_REMAINING)] DATA_BLOB info;
74 } drsuapi_DsBindInfoFallBack;
76 typedef [nodiscriminant] union {
77 [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24;
78 [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28;
79 [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;
80 } drsuapi_DsBindInfo;
82 /* the drsuapi_DsBindInfoCtr was this before
83 * typedef [flag(NDR_PAHEX)] struct {
84 * [range(1,10000)] uint32 length;
85 * [size_is(length)] uint8 data[];
86 * } drsuapi_DsBindInfo;
88 * but we don't want the caller to manually decode this blob,
89 * so we're doing it here
92 typedef struct {
93 [range(1,10000)] uint32 length;
94 [switch_is(length)] drsuapi_DsBindInfo info;
95 } drsuapi_DsBindInfoCtr;
97 /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
99 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
101 const string DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
103 WERROR drsuapi_DsBind(
104 [in] GUID *bind_guid,
105 [in,out] drsuapi_DsBindInfoCtr *bind_info,
106 [out,ref] policy_handle *bind_handle
109 /*****************/
110 /* Function 0x01 */
111 WERROR drsuapi_DsUnbind(
112 [in,out,ref] policy_handle *bind_handle
115 /*****************/
116 /* Function 0x02 */
117 typedef [gensize,flag(NDR_PAHEX)] struct {
118 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size;
119 [value(ndr_length_dom_sid(&r->sid))] uint32 __ndr_size_sid;
120 GUID guid;
121 [subcontext_size(28),subcontext(0)] dom_sid sid;
122 [flag(STR_SIZE4|STR_CHARLEN|STR_CONFORMANT)] string dn;
123 } drsuapi_DsReplicaObjectIdentifier;
125 typedef bitmap {
126 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION = 0x00000001,
127 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE = 0x00000002,
128 DRSUAPI_DS_REPLICA_SYNC_PERIODIC = 0x00000004,
129 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING = 0x00000008,
130 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES = 0x00000010,
131 DRSUAPI_DS_REPLICA_SYNC_FULL = 0x00000020,
132 DRSUAPI_DS_REPLICA_SYNC_URGENT = 0x00000040,
133 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD = 0x00000080,
134 DRSUAPI_DS_REPLICA_SYNC_FORCE = 0x00000100,
135 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE = 0x00000200,
136 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED = 0x00000400,
137 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY = 0x00000800,
138 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY = 0x00001000,
139 DRSUAPI_DS_REPLICA_SYNC_INITIAL = 0x00002000,
140 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION = 0x00004000,
141 DRSUAPI_DS_REPLICA_SYNC_ABANDONED = 0x00008000,
142 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS = 0x00010000,
143 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000,
144 DRSUAPI_DS_REPLICA_SYNC_REQUEUE = 0x00040000,
145 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION = 0x00080000,
146 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA = 0x00100000,
147 DRSUAPI_DS_REPLICA_SYNC_CRITICAL = 0x00200000,
148 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS = 0x00400000,
149 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED = 0x00800000
150 } drsuapi_DsReplicaSyncOptions;
152 typedef struct {
153 drsuapi_DsReplicaObjectIdentifier *naming_context;
154 GUID guid1;
155 astring *string1;
156 drsuapi_DsReplicaSyncOptions options;
157 } drsuapi_DsReplicaSyncRequest1;
159 typedef [switch_type(int32)] union {
160 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
161 } drsuapi_DsReplicaSyncRequest;
163 WERROR drsuapi_DsReplicaSync(
164 [in,ref] policy_handle *bind_handle,
165 [in] int32 level,
166 [in,switch_is(level)] drsuapi_DsReplicaSyncRequest req
169 /*****************/
170 /* Function 0x03 */
171 typedef struct {
172 hyper usn1;
173 hyper usn2;
174 hyper usn3;
175 } drsuapi_DsGetNCChangesUsnTriple;
177 typedef struct {
178 GUID source_dsa_invocation_id;
179 hyper highest_usn;
180 } drsuapi_DsReplicaCoursor;
182 typedef struct {
183 uint32 u1;
184 uint32 u2;
185 [range(0,0x100000)] uint32 count;
186 uint32 u3;
187 [size_is(count)] drsuapi_DsReplicaCoursor array[];
188 } drsuapi_DsReplicaCoursor05Ctr;
190 typedef struct {
191 GUID guid1;
192 GUID guid2;
193 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
194 drsuapi_DsGetNCChangesUsnTriple usn1;
195 drsuapi_DsReplicaCoursor05Ctr *coursor;
196 uint32 unknown1;
197 uint32 unknown2;
198 uint32 unknown3;
199 uint32 unknown4;
200 hyper h1;
201 } drsuapi_DsGetNCChangesRequest5;
203 typedef [flag(NDR_PAHEX)] struct {
204 [range(0,10000)] uint32 length;
205 [size_is(length)] uint8 *byte_array[];
206 } drsuapi_DsGetNCChangesRequest_Ctr14;
208 typedef struct {
209 uint32 unknown1;
210 drsuapi_DsGetNCChangesRequest_Ctr14 data;
211 } drsuapi_DsGetNCChangesRequest_Ctr13;
213 typedef struct {
214 [range(0,0x100000)] uint32 count;
215 [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array[];
216 } drsuapi_DsGetNCChangesRequest_Ctr12;
218 typedef struct {
219 GUID guid1;
220 GUID guid2;
221 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
222 drsuapi_DsGetNCChangesUsnTriple usn1;
223 drsuapi_DsReplicaCoursor05Ctr *coursor;
224 uint32 unknown1;
225 uint32 unknown2;
226 uint32 unknown3;
227 uint32 unknown4;
228 hyper h1;
229 uint32 unique_ptr1;
230 uint32 unique_ptr2;
231 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
232 } drsuapi_DsGetNCChangesRequest8;
234 typedef [switch_type(int32)] union {
235 [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
236 [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
237 } drsuapi_DsGetNCChangesRequest;
239 typedef struct {
240 drsuapi_DsReplicaCoursor coursor;
241 NTTIME_1sec time1;
242 } drsuapi_DsReplicaCoursorEx;
244 typedef struct {
245 uint32 u1;
246 uint32 u2;
247 [range(0,0x100000)] uint32 count;
248 uint32 u3;
249 [size_is(count)] drsuapi_DsReplicaCoursorEx array[];
250 } drsuapi_DsReplicaCoursorEx05Ctr;
252 typedef struct {
253 uint32 version;
254 NTTIME_1sec time;
255 GUID guid;
256 hyper usn;
257 } drsuapi_DsReplicaMetaData;
259 typedef struct {
260 [range(0,1048576)] uint32 count;
261 [size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
262 } drsuapi_DsReplicaMetaDataCtr;
264 typedef [flag(NDR_PAHEX)] struct {
265 [range(0,10485760)] uint32 length;
266 DATA_BLOB *data;
267 } drsuapi_DsReplicaAttributeValue;
269 typedef struct {
270 [range(0,10485760)] uint32 num_values;
271 [size_is(num_values)] drsuapi_DsReplicaAttributeValue *values[];
272 } drsuapi_DsReplicaAttributeValueCtr;
274 typedef [v1_enum] enum {
275 DRSUAPI_ATTR_objectClass = 0x00000000,
276 DRSUAPI_ATTR_description = 0x0000000d,
277 DRSUAPI_ATTR_ntSecurityDescriptor = 0x00020119,
278 DRSUAPI_ATTR_objectSid = 0x00090092
279 } drsuapi_DsAttributeId;
281 typedef [flag(NDR_PAHEX)] struct {
282 drsuapi_DsAttributeId attid;
283 drsuapi_DsReplicaAttributeValueCtr value_ctr;
284 } drsuapi_DsReplicaAttribute;
286 typedef struct {
287 [range(0,1048576)] uint32 num_attributes;
288 [size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes[];
289 } drsuapi_DsReplicaAttributeCtr;
291 typedef struct {
292 drsuapi_DsReplicaObjectIdentifier *identifier;
293 uint32 unknown1;
294 drsuapi_DsReplicaAttributeCtr attribute_ctr;
295 } drsuapi_DsReplicaObject;
297 typedef struct {
298 /* TODO: fix ndr_print for next_info! */
299 [print_option(linked_list_next)] drsuapi_DsGetNCChangesInfo1 *next;
300 drsuapi_DsReplicaObject object;
301 uint32 unknown1;
302 GUID *guid;
303 drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
304 } drsuapi_DsGetNCChangesInfo1;
306 typedef struct {
307 GUID guid1;
308 GUID guid2;
309 drsuapi_DsReplicaObjectIdentifier *naming_context;
310 drsuapi_DsGetNCChangesUsnTriple usn1;
311 drsuapi_DsGetNCChangesUsnTriple usn2;
312 drsuapi_DsReplicaCoursorEx05Ctr *coursor_ex;
313 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
314 uint32 u1[3];
315 drsuapi_DsGetNCChangesInfo1 *info1;
316 uint32 u2;
317 } drsuapi_DsGetNCChangesCtr1;
319 typedef struct {
320 GUID guid1;
321 GUID guid2;
322 drsuapi_DsReplicaObjectIdentifier *naming_context;
323 drsuapi_DsGetNCChangesUsnTriple usn1;
324 drsuapi_DsGetNCChangesUsnTriple usn2;
325 drsuapi_DsReplicaCoursorEx05Ctr *coursor_ex;
326 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
327 uint32 u1[3];
328 uint32 ptr1;
329 uint32 u2[3];
330 uint32 len1;
331 uint32 array_ptr1;
332 uint32 u3;
333 } drsuapi_DsGetNCChangesCtr6;
335 typedef struct {
336 uint32 u1;/* decompressed_length ? */
337 uint32 compressed_length;
338 DATA_BLOB *compressed;
339 } drsuapi_DsGetNCChangesCtr7CompressedInfo;
341 typedef struct {
342 uint32 u1;
343 uint16 u2; /* enum */
344 drsuapi_DsGetNCChangesCtr7CompressedInfo info;
345 } drsuapi_DsGetNCChangesCtr7;
347 typedef [switch_type(int32)] union {
348 [case(1)] drsuapi_DsGetNCChangesCtr1 ctr1;
349 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6;
350 [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7;
351 } drsuapi_DsGetNCChangesCtr;
353 WERROR drsuapi_DsGetNCChanges(
354 [in,ref] policy_handle *bind_handle,
355 [in,out] int32 level,
356 [in,switch_is(level)] drsuapi_DsGetNCChangesRequest req,
357 [out,switch_is(level)] drsuapi_DsGetNCChangesCtr ctr
360 /*****************/
361 /* Function 0x04 */
362 typedef bitmap {
363 DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION = 0x00000001,
364 DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE = 0x00000002,
365 DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE = 0x00000004,
366 DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE = 0x00000008,
367 DRSUAPI_DS_REPLICA_UPDATE_0x00000010 = 0x00000010
368 } drsuapi_DsReplicaUpdateRefsOptions;
370 typedef struct {
371 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
372 [ref] ascstr *dest_dsa_dns_name;
373 GUID dest_dsa_guid;
374 drsuapi_DsReplicaUpdateRefsOptions options;
375 } drsuapi_DsReplicaUpdateRefsRequest1;
377 typedef [switch_type(int32)] union {
378 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1;
379 } drsuapi_DsReplicaUpdateRefsRequest;
381 WERROR drsuapi_DsReplicaUpdateRefs(
382 [in,ref] policy_handle *bind_handle,
383 [in] int32 level,
384 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req
387 /*****************/
388 /* Function 0x05 */
389 typedef bitmap {
390 DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION = 0x00000001,
391 DRSUAPI_DS_REPLICA_ADD_WRITEABLE = 0x00000002
392 /* TODO ... */
393 } drsuapi_DsReplicaAddOptions;
395 WERROR DRSUAPI_REPLICA_ADD();
397 /*****************/
398 /* Function 0x06 */
399 typedef bitmap {
400 DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = 0x00000001,
401 DRSUAPI_DS_REPLICA_DELETE_WRITEABLE = 0x00000002
402 /* TODO ... */
403 } drsuapi_DsReplicaDeleteOptions;
405 WERROR DRSUAPI_REPLICA_DEL();
407 /*****************/
408 /* Function 0x07 */
409 typedef bitmap {
410 DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION = 0x00000001,
411 DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE = 0x00000002
412 } drsuapi_DsReplicaModifyOptions;
414 WERROR DRSUAPI_REPLICA_MODIFY();
416 /*****************/
417 /* Function 0x08 */
418 WERROR DRSUAPI_VERIFY_NAMES();
420 /*****************/
421 /* Function 0x09 */
422 WERROR DRSUAPI_GET_MEMBERSHIPS();
424 /*****************/
425 /* Function 0x0a */
426 WERROR DRSUAPI_INTER_DOMAIN_MOVE();
428 /*****************/
429 /* Function 0x0b */
430 WERROR DRSUAPI_GET_NT4_CHANGELOG();
432 /*****************/
433 /* Function 0x0c */
434 typedef [v1_enum] enum {
435 DRSUAPI_DS_NAME_STATUS_OK = 0,
436 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1,
437 DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2,
438 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3,
439 DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4,
440 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5,
441 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6,
442 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7
443 } drsuapi_DsNameStatus;
445 typedef [v1_enum] enum {
446 DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0,
447 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,
448 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2,
449 DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4,
450 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8
451 } drsuapi_DsNameFlags;
453 typedef [v1_enum] enum {
454 DRSUAPI_DS_NAME_FORMAT_UKNOWN = 0,
455 DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 1,
456 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 2,
457 DRSUAPI_DS_NAME_FORMAT_DISPLAY = 3,
458 DRSUAPI_DS_NAME_FORMAT_GUID = 6,
459 DRSUAPI_DS_NAME_FORMAT_CANONICAL = 7,
460 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 8,
461 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 9,
462 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 10,
463 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 11,
464 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 12
465 } drsuapi_DsNameFormat;
467 typedef struct {
468 unistr *str;
469 } drsuapi_DsNameString;
471 typedef struct {
472 uint32 unknown1; /* 0x000004e4 */
473 uint32 unknown2; /* 0x00000407 */
474 drsuapi_DsNameFlags format_flags;
475 drsuapi_DsNameFormat format_offered;
476 drsuapi_DsNameFormat format_desired;
477 [range(1,10000)] uint32 count;
478 [size_is(count)] drsuapi_DsNameString *names[];
479 } drsuapi_DsNameRequest1;
481 typedef [switch_type(int32)] union {
482 [case(1)] drsuapi_DsNameRequest1 req1;
483 } drsuapi_DsNameRequest;
485 typedef struct {
486 drsuapi_DsNameStatus status;
487 unistr *dns_domain_name;
488 unistr *result_name;
489 } drsuapi_DsNameInfo1;
491 typedef struct {
492 uint32 count;
493 [size_is(count)] drsuapi_DsNameInfo1 *array[];
494 } drsuapi_DsNameCtr1;
496 typedef [switch_type(int32)] union {
497 [case(1)] drsuapi_DsNameCtr1 *ctr1;
498 } drsuapi_DsNameCtr;
500 WERROR drsuapi_DsCrackNames(
501 [in,ref] policy_handle *bind_handle,
502 [in, out] int32 level,
503 [in,switch_is(level)] drsuapi_DsNameRequest req,
504 [out,switch_is(level)] drsuapi_DsNameCtr ctr
507 /*****************/
508 /* Function 0x0d */
509 typedef [v1_enum] enum {
510 DRSUAPI_DS_SPN_OPERATION_ADD = 0,
511 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
512 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
513 } drsuapi_DsSpnOperation;
515 typedef struct {
516 drsuapi_DsSpnOperation operation;
517 uint32 unknown1;
518 unistr *object_dn;
519 [range(0,10000)] uint32 count;
520 [size_is(count)] drsuapi_DsNameString *spn_names[];
521 } drsuapi_DsWriteAccountSpnRequest1;
523 typedef [switch_type(int32)] union {
524 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
525 } drsuapi_DsWriteAccountSpnRequest;
527 typedef struct {
528 WERROR status;
529 } drsuapi_DsWriteAccountSpnResult1;
531 typedef [switch_type(int32)] union {
532 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
533 } drsuapi_DsWriteAccountSpnResult;
535 WERROR drsuapi_DsWriteAccountSpn(
536 [in,ref] policy_handle *bind_handle,
537 [in, out] int32 level,
538 [in,switch_is(level)] drsuapi_DsWriteAccountSpnRequest req,
539 [out,switch_is(level)] drsuapi_DsWriteAccountSpnResult res
542 /*****************/
543 /* Function 0x0e */
544 WERROR DRSUAPI_REMOVE_DS_SERVER();
546 /*****************/
547 /* Function 0x0f */
548 WERROR DRSUAPI_REMOVE_DS_DOMAIN();
550 /*****************/
551 /* Function 0x10 */
552 typedef struct {
553 unistr *domain_name; /* netbios or dns */
554 int32 level; /* specifies the switch level for the request */
555 } drsuapi_DsGetDCInfoRequest1;
557 typedef [switch_type(int32)] union {
558 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
559 } drsuapi_DsGetDCInfoRequest;
561 typedef struct {
562 unistr *netbios_name;
563 unistr *dns_name;
564 unistr *site_name;
565 unistr *computer_dn;
566 unistr *server_dn;
567 uint32 is_pdc;
568 uint32 is_enabled;
569 } drsuapi_DsGetDCInfo1;
571 typedef struct {
572 [range(0,10000)] uint32 count;
573 [size_is(count)] drsuapi_DsGetDCInfo1 *array[];
574 } drsuapi_DsGetDCInfoCtr1;
576 typedef struct {
577 unistr *netbios_name;
578 unistr *dns_name;
579 unistr *site_name;
580 unistr *site_dn;
581 unistr *computer_dn;
582 unistr *server_dn;
583 unistr *ntds_dn;
584 uint32 is_pdc;
585 uint32 is_enabled;
586 uint32 is_gc;
587 GUID site_guid;
588 GUID computer_guid;
589 GUID server_guid;
590 GUID ntds_guid;
591 } drsuapi_DsGetDCInfo2;
593 typedef struct {
594 [range(0,10000)] uint32 count;
595 [size_is(count)] drsuapi_DsGetDCInfo2 *array[];
596 } drsuapi_DsGetDCInfoCtr2;
598 typedef struct {
599 uint32 unknown1;
600 uint32 unknown2;
601 uint32 unknown3;
602 uint32 unknown4;
603 uint32 unknown5;
604 uint32 unknown6;
605 unistr *server_nt4_account;
606 } drsuapi_DsGetDCInfo01;
608 typedef struct {
609 [range(0,10000)] uint32 count;
610 [size_is(count)] drsuapi_DsGetDCInfo01 *array[];
611 } drsuapi_DsGetDCInfoCtr01;
613 typedef [v1_enum] enum {
614 DRSUAPI_DC_INFO_CTR_1 = 1,
615 DRSUAPI_DC_INFO_CTR_2 = 2,
616 DRSUAPI_DC_INFO_CTR_01 = -1
617 } drsuapi_DsGetDCInfoCtrLevels;
619 typedef [switch_type(int32)] union {
620 [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1;
621 [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2;
622 [case(DRSUAPI_DC_INFO_CTR_01)] drsuapi_DsGetDCInfoCtr01 ctr01;
623 } drsuapi_DsGetDCInfoCtr;
625 WERROR drsuapi_DsGetDomainControllerInfo(
626 [in,ref] policy_handle *bind_handle,
627 [in, out] int32 level,
628 [in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
629 [out,switch_is(level)] drsuapi_DsGetDCInfoCtr ctr
632 /*****************/
633 /* Function 0x11 */
634 WERROR drsuapi_DsAddEntry();
636 /*****************/
637 /* Function 0x12 */
638 WERROR DRSUAPI_EXECUTE_KCC();
640 /*****************/
641 /* Function 0x13 */
642 typedef [v1_enum] enum {
643 DRSUAPI_DS_REPLICA_GET_INFO = 1,
644 DRSUAPI_DS_REPLICA_GET_INFO2 = 2
645 } drsuapi_DsReplicaGetInfoLevel;
647 typedef [v1_enum] enum {
648 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0,
649 DRSUAPI_DS_REPLICA_INFO_CURSORS = 1,
650 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2,
651 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3,
652 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4,
653 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5,
654 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6,
655 DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7,
656 DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8,
657 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9,
658 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10,
659 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02 = -2,
660 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04 = -4,
661 DRSUAPI_DS_REPLICA_INFO_CURSURS05 = -5,
662 DRSUAPI_DS_REPLICA_INFO_06 = -6
663 } drsuapi_DsReplicaInfoType;
665 typedef struct {
666 drsuapi_DsReplicaInfoType info_type;
667 unistr *object_dn;
668 GUID guid1;
669 } drsuapi_DsReplicaGetInfoRequest1;
671 typedef struct {
672 drsuapi_DsReplicaInfoType info_type;
673 unistr *object_dn;
674 GUID guid1;
675 uint32 unknown1;
676 unistr *string1;
677 unistr *string2;
678 uint32 unknown2;
679 } drsuapi_DsReplicaGetInfoRequest2;
681 typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
682 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1;
683 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2;
684 } drsuapi_DsReplicaGetInfoRequest;
686 typedef struct {
687 unistr *naming_context_dn;
688 unistr *source_dsa_obj_dn;
689 unistr *source_dsa_address;
690 unistr *transport_obj_dn;
691 uint32 replica_flags;
692 uint32 reserved;
693 GUID naming_context_obj_guid;
694 GUID source_dsa_obj_guid;
695 GUID source_dsa_invocation_id;
696 GUID transport_obj_guid;
697 hyper tmp_highest_usn;
698 hyper highest_usn;
699 NTTIME last_success;
700 NTTIME last_attempt;
701 WERROR result_last_attempt;
702 uint32 consecutive_sync_failures;
703 } drsuapi_DsReplicaNeighbour;
705 typedef struct {
706 uint32 count;
707 uint32 reserved;
708 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
709 } drsuapi_DsReplicaNeighbourCtr;
711 typedef struct {
712 uint32 count;
713 uint32 reserved;
714 [size_is(count)] drsuapi_DsReplicaCoursor array[];
715 } drsuapi_DsReplicaCoursorCtr;
717 typedef struct {
718 unistr *attribute_name;
719 uint32 version;
720 NTTIME originating_last_changed;
721 GUID originating_dsa_invocation_id;
722 hyper originating_usn;
723 hyper local_usn;
724 } drsuapi_DsReplicaObjMetaData;
726 typedef struct {
727 uint32 count;
728 uint32 reserved;
729 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
730 } drsuapi_DsReplicaObjMetaDataCtr;
732 typedef struct {
733 unistr *dsa_obj_dn;
734 GUID dsa_obj_guid;
735 NTTIME first_failure;
736 uint32 num_failures;
737 WERROR last_result;
738 } drsuapi_DsReplicaKccDsaFailure;
740 typedef struct {
741 uint32 count;
742 uint32 reserved;
743 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
744 } drsuapi_DsReplicaKccDsaFailuresCtr;
746 typedef enum {
747 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0,
748 DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1,
749 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2,
750 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3,
751 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4
752 } drsuapi_DsReplicaOpType;
754 typedef [switch_type(drsuapi_DsReplicaOpType)] union {
755 [case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)] drsuapi_DsReplicaSyncOptions sync;
756 [case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)] drsuapi_DsReplicaAddOptions add;
757 [case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)] drsuapi_DsReplicaDeleteOptions delete;
758 [case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)] drsuapi_DsReplicaModifyOptions modify;
759 [case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)] drsuapi_DsReplicaUpdateRefsOptions update_refs;
760 [default] uint32 unknown;
761 } drsuapi_DsRplicaOpOptions;
763 typedef struct {
764 NTTIME operation_start;
765 uint32 serial_num; /* unique till reboot */
766 uint32 priority;
767 drsuapi_DsReplicaOpType operation_type;
768 [switch_is(operation_type)] drsuapi_DsRplicaOpOptions options;
769 unistr *nc_dn;
770 unistr *remote_dsa_obj_dn;
771 unistr *remote_dsa_address;
772 GUID nc_obj_guid;
773 GUID remote_dsa_obj_guid;
774 } drsuapi_DsReplicaOp;
776 typedef struct {
777 NTTIME time;
778 uint32 count;
779 [size_is(count)] drsuapi_DsReplicaOp array[];
780 } drsuapi_DsReplicaOpCtr;
782 typedef struct {
783 unistr *attribute_name;
784 unistr *object_dn;
785 uint32 value_length;
786 [size_is(value_length)] uint8 *value[];
787 NTTIME deleted;
788 NTTIME created;
789 uint32 version;
790 NTTIME originating_last_changed;
791 GUID originating_dsa_invocation_id;
792 hyper originating_usn;
793 hyper local_usn;
794 } drsuapi_DsReplicaAttrValMetaData;
796 typedef struct {
797 uint32 count;
798 int32 enumeration_context;
799 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
800 } drsuapi_DsReplicaAttrValMetaDataCtr;
802 typedef struct {
803 GUID source_dsa_invocation_id;
804 hyper highest_usn;
805 NTTIME last_sync_success;
806 } drsuapi_DsReplicaCoursor2;
808 typedef struct {
809 uint32 count;
810 int32 enumeration_context;
811 [size_is(count)] drsuapi_DsReplicaCoursor2 array[];
812 } drsuapi_DsReplicaCoursor2Ctr;
814 typedef struct {
815 GUID source_dsa_invocation_id;
816 hyper highest_usn;
817 NTTIME last_sync_success;
818 unistr *source_dsa_obj_dn;
819 } drsuapi_DsReplicaCoursor3;
821 typedef struct {
822 uint32 count;
823 int32 enumeration_context;
824 [size_is(count)] drsuapi_DsReplicaCoursor3 array[];
825 } drsuapi_DsReplicaCoursor3Ctr;
827 typedef struct {
828 unistr *attribute_name;
829 uint32 version;
830 NTTIME originating_last_changed;
831 GUID originating_dsa_invocation_id;
832 hyper originating_usn;
833 hyper local_usn;
834 unistr *originating_dsa_obj_dn;
835 } drsuapi_DsReplicaObjMetaData2;
837 typedef struct {
838 uint32 count;
839 int32 enumeration_context;
840 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
841 } drsuapi_DsReplicaObjMetaData2Ctr;
843 typedef struct {
844 unistr *attribute_name;
845 unistr *object_dn;
846 uint32 value_length;
847 [size_is(value_length)] uint8 *value[];
848 NTTIME deleted;
849 NTTIME created;
850 uint32 version;
851 NTTIME originating_last_changed;
852 GUID originating_dsa_invocation_id;
853 hyper originating_usn;
854 hyper local_usn;
855 unistr *originating_dsa_obj_dn;
856 } drsuapi_DsReplicaAttrValMetaData2;
858 typedef struct {
859 uint32 count;
860 int32 enumeration_context;
861 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
862 } drsuapi_DsReplicaAttrValMetaData2Ctr;
864 typedef struct {
865 hyper u1; /* session number? */
866 uint32 u2;
867 uint32 u3;
868 GUID bind_guid;
869 NTTIME_1sec bind_time;
870 uint32 u4; /* flags? */
871 uint32 u5;
872 } drsuapi_DsReplicaConnection04;
874 typedef struct {
875 [range(0,10000)] uint32 count;
876 uint32 reserved;
877 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
878 } drsuapi_DsReplicaConnection04Ctr;
880 typedef struct {
881 unistr *str1;
882 uint32 u1;
883 uint32 u2;
884 uint32 u3;
885 uint32 u4;
886 uint32 u5;
887 hyper u6;
888 uint32 u7;
889 } drsuapi_DsReplica06;
891 typedef struct {
892 [range(0,256)] uint32 count;
893 uint32 reserved;
894 [size_is(count)] drsuapi_DsReplica06 array[];
895 } drsuapi_DsReplica06Ctr;
897 typedef [switch_type(drsuapi_DsReplicaInfoType)] union {
898 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours;
899 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCoursorCtr *coursors;
900 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
901 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
902 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
903 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops;
904 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
905 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCoursor2Ctr *coursors2;
906 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCoursor3Ctr *coursors3;
907 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
908 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
909 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
910 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04;
911 [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCoursor05Ctr *coursors05;
912 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
913 } drsuapi_DsReplicaInfo;
915 WERROR drsuapi_DsReplicaGetInfo(
916 [in,ref] policy_handle *bind_handle,
917 [in] drsuapi_DsReplicaGetInfoLevel level,
918 [in,switch_is(level)] drsuapi_DsReplicaGetInfoRequest req,
919 [out] drsuapi_DsReplicaInfoType info_type,
920 [out,switch_is(info_type)] drsuapi_DsReplicaInfo info
923 /*****************/
924 /* Function 0x14 */
925 WERROR DRSUAPI_ADD_SID_HISTORY();
927 /*****************/
928 /* Function 0x15 */
929 WERROR DRSUAPI_GET_MEMBERSHIPS2();
931 /*****************/
932 /* Function 0x16 */
933 WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
935 /*****************/
936 /* Function 0x17 */
937 WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
939 /*****************/
940 /* Function 0x18 */
941 WERROR DRSUAPI_QUERY_SITES_BY_COST();