Initial source import
[drsuapi_dissector.git] / drsuapi / drsuapi.idl
blob923886e7709d81197802662718d508b1cb9d6004
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)
11 interface drsuapi
13 /*****************/
14 /* Function 0x00 */
15 typedef [bitmap32bit] bitmap {
16 DRSUAPI_SUPPORTED_EXTENSION_BASE = 0x00000001,
17 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION = 0x00000002,
18 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI = 0x00000004,
19 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2 = 0x00000008,
20 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS = 0x00000010,
21 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1 = 0x00000020,
22 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION = 0x00000040,
23 DRSUAPI_SUPPORTED_EXTENSION_00000080 = 0x00000080,
24 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE = 0x00000100,
25 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2 = 0x00000200,
26 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION = 0x00000400,
27 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2 = 0x00000800,
28 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000,
29 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND = 0x00002000,
30 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO = 0x00004000,
31 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION = 0x00008000,
32 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01 = 0x00010000,
33 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP = 0x00020000,
34 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY = 0x00040000,
35 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3 = 0x00080000,
36 DRSUAPI_SUPPORTED_EXTENSION_00100000 = 0x00100000,
37 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2 = 0x00200000,
38 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6 = 0x00400000,
39 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS = 0x00800000,
40 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8 = 0x01000000,
41 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5 = 0x02000000,
42 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6 = 0x04000000,
44 * the following 3 have the same value
45 * repadmin.exe /bind says that
47 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3 = 0x08000000,
48 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7 = 0x08000000,
49 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT = 0x08000000,
50 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS = 0x10000000,
51 DRSUAPI_SUPPORTED_EXTENSION_20000000 = 0x20000000,
52 DRSUAPI_SUPPORTED_EXTENSION_40000000 = 0x40000000,
53 DRSUAPI_SUPPORTED_EXTENSION_80000000 = 0x80000000
54 } drsuapi_SupportedExtensions;
56 /* this is used by w2k */
57 typedef struct {
58 drsuapi_SupportedExtensions supported_extensions;
59 GUID site_guid;
60 uint32 u1;
61 } drsuapi_DsBindInfo24;
63 /* this is used by w2k3 */
64 typedef struct {
65 drsuapi_SupportedExtensions supported_extensions;
66 GUID site_guid;
67 uint32 u1;
68 uint32 repl_epoch;
69 } drsuapi_DsBindInfo28;
71 /* typedef struct {
72 [flag(NDR_REMAINING)] DATA_BLOB info;
73 } drsuapi_DsBindInfoFallBack;
75 typedef union {
76 [case(24)] drsuapi_DsBindInfo24 info24;
77 [case(28)] drsuapi_DsBindInfo28 info28;
78 /* [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;*/
79 } drsuapi_DsBindInfo;
81 /* the drsuapi_DsBindInfoCtr was this before
82 * typedef [flag(NDR_PAHEX)] struct {
83 * [range(1,10000)] uint32 length;
84 * [size_is(length)] uint8 data[];
85 * } drsuapi_DsBindInfo;
87 * but we don't want the caller to manually decode this blob,
88 * so we're doing it here
91 typedef struct {
92 [range(1,10000)] uint32 length;
93 [switch_is(length)] drsuapi_DsBindInfo info;
94 } drsuapi_DsBindInfoCtr;
96 /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
98 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
100 /* 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 struct {
118 uint32 unknown1;
119 uint32 unknown2;
120 GUID guid1;
121 uint8 byte_array[28];
122 uint32 str_len;
123 [size_is(str_len+1)] uint16 nc_dn[];
124 } drsuapi_DsReplicaSyncRequest1Info;
126 typedef bitmap {
127 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION = 0x00000001,
128 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE = 0x00000002,
129 DRSUAPI_DS_REPLICA_SYNC_PERIODIC = 0x00000004,
130 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING = 0x00000008,
131 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES = 0x00000010,
132 DRSUAPI_DS_REPLICA_SYNC_FULL = 0x00000020,
133 DRSUAPI_DS_REPLICA_SYNC_URGENT = 0x00000040,
134 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD = 0x00000080,
135 DRSUAPI_DS_REPLICA_SYNC_FORCE = 0x00000100,
136 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE = 0x00000200,
137 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED = 0x00000400,
138 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY = 0x00000800,
139 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY = 0x00001000,
140 DRSUAPI_DS_REPLICA_SYNC_INITIAL = 0x00002000,
141 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION = 0x00004000,
142 DRSUAPI_DS_REPLICA_SYNC_ABANDONED = 0x00008000,
143 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS = 0x00010000,
144 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000,
145 DRSUAPI_DS_REPLICA_SYNC_REQUEUE = 0x00040000,
146 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION = 0x00080000,
147 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA = 0x00100000,
148 DRSUAPI_DS_REPLICA_SYNC_CRITICAL = 0x00200000,
149 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS = 0x00400000,
150 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED = 0x00800000
151 } drsuapi_DsReplicaSyncOptions;
153 typedef struct {
154 [ref] drsuapi_DsReplicaSyncRequest1Info *info;
155 GUID source_dsa_guid;
156 a_string *other_info; /* I assume this is related to the repsFromTo1OtherInfo dns_name */
157 drsuapi_DsReplicaSyncOptions options;
158 } drsuapi_DsReplicaSyncRequest1;
160 typedef [switch_type(uint32)] union {
161 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
162 } drsuapi_DsReplicaSyncRequest;
164 WERROR drsuapi_DsReplicaSync(
165 [in,ref] policy_handle *bind_handle,
166 [in] uint32 level,
167 [in,switch_is(level),ref] drsuapi_DsReplicaSyncRequest *req
170 /*****************/
171 /* Function 0x03 */
172 typedef struct {
173 uint64 usn1;
174 uint64 usn2;
175 uint64 usn3;
176 } drsuapi_DsGetNCChangesUsnTriple;
178 typedef struct {
179 GUID source_dsa_invocation_id;
180 uint64 highest_usn;
181 } drsuapi_DsReplicaCursor;
183 typedef struct {
184 uint32 u1;
185 uint32 u2;
186 [range(0,0x100000)] uint32 count;
187 uint32 u3;
188 [size_is(count)] drsuapi_DsReplicaCursor array[];
189 } drsuapi_DsReplicaCursor05Ctr;
191 typedef struct {
192 GUID guid1;
193 GUID guid2;
194 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
195 drsuapi_DsGetNCChangesUsnTriple usn1;
196 drsuapi_DsReplicaCursor05Ctr *coursor;
197 uint32 unknown1;
198 uint32 unknown2;
199 uint32 unknown3;
200 uint32 unknown4;
201 uint64 h1;
202 } drsuapi_DsGetNCChangesRequest5;
204 typedef [flag(NDR_PAHEX)] struct {
205 [range(0,10000)] uint32 length;
206 [size_is(length)] uint8 *byte_array[];
207 } drsuapi_DsGetNCChangesRequest_Ctr14;
209 typedef struct {
210 uint32 unknown1;
211 drsuapi_DsGetNCChangesRequest_Ctr14 data;
212 } drsuapi_DsGetNCChangesRequest_Ctr13;
214 typedef struct {
215 [range(0,0x100000)] uint32 count;
216 [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array[];
217 } drsuapi_DsGetNCChangesRequest_Ctr12;
219 typedef struct {
220 GUID guid1;
221 GUID guid2;
222 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
223 drsuapi_DsGetNCChangesUsnTriple usn1;
224 drsuapi_DsReplicaCursor05Ctr *coursor;
225 uint32 unknown1;
226 uint32 unknown2;
227 uint32 unknown3;
228 uint32 unknown4;
229 uint64 h1;
230 uint32 unique_ptr1;
231 uint32 unique_ptr2;
232 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
233 } drsuapi_DsGetNCChangesRequest8;
235 typedef [switch_type(uint32)] union {
236 [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
237 [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
238 } drsuapi_DsGetNCChangesRequest;
240 typedef struct {
241 drsuapi_DsReplicaCursor coursor;
242 NTTIME_1sec time1;
243 } drsuapi_DsReplicaCursorEx;
245 typedef struct {
246 uint32 u1;
247 uint32 u2;
248 [range(0,0x100000)] uint32 count;
249 uint32 u3;
250 [size_is(count)] drsuapi_DsReplicaCursorEx array[];
251 } drsuapi_DsReplicaCursorEx05Ctr;
253 typedef struct {
254 GUID guid1;
255 GUID guid2;
256 drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
257 drsuapi_DsGetNCChangesUsnTriple usn1;
258 drsuapi_DsGetNCChangesUsnTriple usn2;
259 drsuapi_DsReplicaCursorEx05Ctr *coursor_ex;
260 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
261 uint32 u1[3];
262 uint32 ptr1;
263 uint32 u2[3];
264 uint32 len1;
265 uint32 array_ptr1;
266 uint32 u3;
267 } drsuapi_DsGetNCChangesCtr6;
269 /* typedef struct {
270 } drsuapi_DsGetNCChangesCtr7;
272 typedef [switch_type(uint32)] union {
273 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6;
274 /* [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7;*/
275 } drsuapi_DsGetNCChangesCtr;
277 WERROR drsuapi_DsGetNCChanges(
278 [in,ref] policy_handle *bind_handle,
279 [in] uint32 level,
280 [in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req,
281 [out,ref] uint32 *level_out,
282 [out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr
285 /*****************/
286 /* Function 0x04 */
287 typedef struct {
288 char Data[28];
289 } DOM_SID28;
290 typedef [public,gensize] struct {
291 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->iconv_convenience, ndr->flags)-4)] uint32 __ndr_size;
292 [value(ndr_size_dom_sid28(&sid, ndr->flags))] uint32 __ndr_size_sid;
293 GUID guid;
294 DOM_SID28 sid;
295 [value(strlen_m(dn))] uint32 __ndr_size_dn;
296 unistr *dn;
297 } drsuapi_DsReplicaObjectIdentifier;
299 typedef bitmap {
300 DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION = 0x00000001,
301 DRSUAPI_DS_REPLICA_UPDATE_GETCHG_CHECK = 0x00000002,
302 DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE = 0x00000004,
303 DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE = 0x00000008,
304 DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE = 0x00000010
305 } drsuapi_DsReplicaUpdateRefsOptions;
307 typedef struct {
308 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
309 a_string *dest_dsa_dns_name;
310 GUID dest_dsa_guid;
311 drsuapi_DsReplicaUpdateRefsOptions options;
312 } drsuapi_DsReplicaUpdateRefsRequest1;
314 typedef [switch_type(uint32)] union {
315 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1;
316 } drsuapi_DsReplicaUpdateRefsRequest;
318 WERROR drsuapi_DsReplicaUpdateRefs(
319 [in,ref] policy_handle *bind_handle,
320 [in] uint32 level,
321 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req
324 /*****************/
325 /* Function 0x05 */
326 typedef bitmap {
327 DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION = 0x00000001,
328 DRSUAPI_DS_REPLICA_ADD_WRITEABLE = 0x00000002
329 /* TODO ... */
330 } drsuapi_DsReplicaAddOptions;
332 WERROR DRSUAPI_REPLICA_ADD();
334 /*****************/
335 /* Function 0x06 */
336 typedef bitmap {
337 DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = 0x00000001,
338 DRSUAPI_DS_REPLICA_DELETE_WRITEABLE = 0x00000002
339 /* TODO ... */
340 } drsuapi_DsReplicaDeleteOptions;
342 WERROR DRSUAPI_REPLICA_DEL();
344 /*****************/
345 /* Function 0x07 */
346 typedef bitmap {
347 DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION = 0x00000001,
348 DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE = 0x00000002
349 } drsuapi_DsReplicaModifyOptions;
351 WERROR DRSUAPI_REPLICA_MODIFY();
353 /*****************/
354 /* Function 0x08 */
355 WERROR DRSUAPI_VERIFY_NAMES();
357 /*****************/
358 /* Function 0x09 */
359 WERROR DRSUAPI_GET_MEMBERSHIPS();
361 /*****************/
362 /* Function 0x0a */
363 WERROR DRSUAPI_INTER_DOMAIN_MOVE();
365 /*****************/
366 /* Function 0x0b */
367 WERROR DRSUAPI_GET_NT4_CHANGELOG();
369 /*****************/
370 /* Function 0x0c */
371 typedef [v1_enum] enum {
372 DRSUAPI_DS_NAME_STATUS_OK = 0,
373 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1,
374 DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2,
375 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3,
376 DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4,
377 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5,
378 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6,
379 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7
380 } drsuapi_DsNameStatus;
382 typedef [v1_enum] enum {
383 DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0,
384 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,
385 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2,
386 DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4,
387 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8
388 } drsuapi_DsNameFlags;
390 typedef [v1_enum] enum {
391 DRSUAPI_DS_NAME_FORMAT_UKNOWN = 0,
392 DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 1,
393 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 2,
394 DRSUAPI_DS_NAME_FORMAT_DISPLAY = 3,
395 DRSUAPI_DS_NAME_FORMAT_GUID = 6,
396 DRSUAPI_DS_NAME_FORMAT_CANONICAL = 7,
397 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 8,
398 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 9,
399 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 10,
400 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 11,
401 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 12
402 } drsuapi_DsNameFormat;
404 typedef struct {
405 unistr *str;
406 } drsuapi_DsNameString;
408 typedef struct {
409 uint32 unknown1; /* 0x000004e4 */
410 uint32 unknown2; /* 0x00000407 */
411 drsuapi_DsNameFlags format_flags;
412 drsuapi_DsNameFormat format_offered;
413 drsuapi_DsNameFormat format_desired;
414 [range(1,10000)] uint32 count;
415 [size_is(count)] drsuapi_DsNameString *names[];
416 } drsuapi_DsNameRequest1;
418 typedef [switch_type(uint32)] union {
419 [case(1)] drsuapi_DsNameRequest1 req1;
420 } drsuapi_DsNameRequest;
422 typedef struct {
423 drsuapi_DsNameStatus status;
424 unistr *dns_domain_name;
425 unistr *result_name;
426 } drsuapi_DsNameInfo1;
428 typedef struct {
429 uint32 count;
430 [size_is(count)] drsuapi_DsNameInfo1 *array[];
431 } drsuapi_DsNameCtr1;
433 typedef [switch_type(uint32)] union {
434 [case(1)] drsuapi_DsNameCtr1 *ctr1;
435 } drsuapi_DsNameCtr;
437 WERROR drsuapi_DsCrackNames(
438 [in,ref] policy_handle *bind_handle,
439 [in] uint32 level,
440 [in,ref,switch_is(level)] drsuapi_DsNameRequest *req,
441 [out,ref] uint32 *level_out,
442 [out,ref,switch_is(*level_out)] drsuapi_DsNameCtr *ctr
445 /*****************/
446 /* Function 0x0d */
447 typedef [v1_enum] enum {
448 DRSUAPI_DS_SPN_OPERATION_ADD = 0,
449 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
450 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
451 } drsuapi_DsSpnOperation;
453 typedef struct {
454 drsuapi_DsSpnOperation operation;
455 uint32 unknown1;
456 unistr *object_dn;
457 [range(0,10000)] uint32 count;
458 [size_is(count)] drsuapi_DsNameString *spn_names;
459 } drsuapi_DsWriteAccountSpnRequest1;
461 typedef [switch_type(uint32)] union {
462 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
463 } drsuapi_DsWriteAccountSpnRequest;
465 typedef struct {
466 WERROR status;
467 } drsuapi_DsWriteAccountSpnResult1;
469 typedef [switch_type(uint32)] union {
470 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
471 } drsuapi_DsWriteAccountSpnResult;
473 WERROR drsuapi_DsWriteAccountSpn(
474 [in,ref] policy_handle *bind_handle,
475 [in] uint32 level,
476 [in,ref,switch_is(level)] drsuapi_DsWriteAccountSpnRequest *req,
477 [out,ref] uint32 *level_out,
478 [out,ref,switch_is(*level_out)] drsuapi_DsWriteAccountSpnResult *res
481 /*****************/
482 /* Function 0x0e */
483 WERROR DRSUAPI_REMOVE_DS_SERVER();
485 /*****************/
486 /* Function 0x0f */
487 WERROR DRSUAPI_REMOVE_DS_DOMAIN();
489 /*****************/
490 /* Function 0x10 */
491 typedef struct {
492 unistr *domain_name; /* netbios or dns */
493 int32 level; /* specifies the switch level for the request */
494 } drsuapi_DsGetDCInfoRequest1;
496 typedef [switch_type(uint32)] union {
497 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
498 } drsuapi_DsGetDCInfoRequest;
500 typedef struct {
501 unistr *netbios_name;
502 unistr *dns_name;
503 unistr *site_name;
504 unistr *computer_dn;
505 unistr *server_dn;
506 uint32 is_pdc;
507 uint32 is_enabled;
508 } drsuapi_DsGetDCInfo1;
510 typedef struct {
511 [range(0,10000)] uint32 count;
512 [size_is(count)] drsuapi_DsGetDCInfo1 *array[];
513 } drsuapi_DsGetDCInfoCtr1;
515 typedef struct {
516 unistr *netbios_name;
517 unistr *dns_name;
518 unistr *site_name;
519 unistr *site_dn;
520 unistr *computer_dn;
521 unistr *server_dn;
522 unistr *ntds_dn;
523 uint32 is_pdc;
524 uint32 is_enabled;
525 uint32 is_gc;
526 GUID site_guid;
527 GUID computer_guid;
528 GUID server_guid;
529 GUID ntds_guid;
530 } drsuapi_DsGetDCInfo2;
532 typedef struct {
533 [range(0,10000)] uint32 count;
534 [size_is(count)] drsuapi_DsGetDCInfo2 *array[];
535 } drsuapi_DsGetDCInfoCtr2;
537 typedef struct {
538 uint32 unknown1;
539 uint32 unknown2;
540 uint32 unknown3;
541 uint32 unknown4;
542 uint32 unknown5;
543 uint32 unknown6;
544 unistr *server_nt4_account;
545 } drsuapi_DsGetDCInfo01;
547 typedef struct {
548 [range(0,10000)] uint32 count;
549 [size_is(count)] drsuapi_DsGetDCInfo01 *array[];
550 } drsuapi_DsGetDCInfoCtr01;
552 typedef [v1_enum] enum {
553 DRSUAPI_DC_INFO_CTR_1 = 1,
554 DRSUAPI_DC_INFO_CTR_2 = 2,
555 DRSUAPI_DC_INFO_CTR_01 = -1
556 } drsuapi_DsGetDCInfoCtrLevels;
558 typedef [switch_type(uint32)] union {
559 [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1;
560 [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2;
561 [case(DRSUAPI_DC_INFO_CTR_01)] drsuapi_DsGetDCInfoCtr01 ctr01;
562 } drsuapi_DsGetDCInfoCtr;
564 WERROR drsuapi_DsGetDomainControllerInfo(
565 [in,ref] policy_handle *bind_handle,
566 [in] uint32 level,
567 [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req,
568 [out,ref] uint32 *level_out,
569 [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr
572 /*****************/
573 /* Function 0x11 */
574 WERROR drsuapi_DsAddEntry();
576 /*****************/
577 /* Function 0x12 */
578 WERROR DRSUAPI_EXECUTE_KCC();
580 /*****************/
581 /* Function 0x13 */
582 typedef [v1_enum] enum {
583 DRSUAPI_DS_REPLICA_GET_INFO = 1,
584 DRSUAPI_DS_REPLICA_GET_INFO2 = 2
585 } drsuapi_DsReplicaGetInfoLevel;
587 typedef [v1_enum] enum {
588 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0,
589 DRSUAPI_DS_REPLICA_INFO_CURSORS = 1,
590 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2,
591 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3,
592 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4,
593 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5,
594 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6,
595 DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7,
596 DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8,
597 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9,
598 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10,
599 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02 = -2,
600 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04 = -4,
601 DRSUAPI_DS_REPLICA_INFO_CURSURS05 = -5,
602 DRSUAPI_DS_REPLICA_INFO_06 = -6
603 } drsuapi_DsReplicaInfoType;
605 typedef struct {
606 drsuapi_DsReplicaInfoType info_type;
607 unistr *object_dn;
608 GUID guid1;
609 } drsuapi_DsReplicaGetInfoRequest1;
611 typedef struct {
612 drsuapi_DsReplicaInfoType info_type;
613 unistr *object_dn;
614 GUID guid1;
615 uint32 unknown1;
616 unistr *string1;
617 unistr *string2;
618 uint32 unknown2;
619 } drsuapi_DsReplicaGetInfoRequest2;
621 typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
622 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1;
623 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2;
624 } drsuapi_DsReplicaGetInfoRequest;
626 typedef struct {
627 unistr *naming_context_dn;
628 unistr *source_dsa_obj_dn;
629 unistr *source_dsa_address;
630 unistr *transport_obj_dn;
631 uint32 replica_flags;
632 uint32 reserved;
633 GUID naming_context_obj_guid;
634 GUID source_dsa_obj_guid;
635 GUID source_dsa_invocation_id;
636 GUID transport_obj_guid;
637 uint64 tmp_highest_usn;
638 uint64 highest_usn;
639 NTTIME last_success;
640 NTTIME last_attempt;
641 WERROR result_last_attempt;
642 uint32 consecutive_sync_failures;
643 } drsuapi_DsReplicaNeighbour;
645 typedef struct {
646 uint32 count;
647 uint32 reserved;
648 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
649 } drsuapi_DsReplicaNeighbourCtr;
651 typedef struct {
652 uint32 count;
653 uint32 reserved;
654 [size_is(count)] drsuapi_DsReplicaCursor array[];
655 } drsuapi_DsReplicaCursorCtr;
657 typedef struct {
658 unistr *attribute_name;
659 uint32 version;
660 NTTIME originating_last_changed;
661 GUID originating_dsa_invocation_id;
662 uint64 originating_usn;
663 uint64 local_usn;
664 } drsuapi_DsReplicaObjMetaData;
666 typedef struct {
667 uint32 count;
668 uint32 reserved;
669 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
670 } drsuapi_DsReplicaObjMetaDataCtr;
672 typedef struct {
673 unistr *dsa_obj_dn;
674 GUID dsa_obj_guid;
675 NTTIME first_failure;
676 uint32 num_failures;
677 WERROR last_result;
678 } drsuapi_DsReplicaKccDsaFailure;
680 typedef struct {
681 uint32 count;
682 uint32 reserved;
683 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
684 } drsuapi_DsReplicaKccDsaFailuresCtr;
686 typedef enum {
687 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0,
688 DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1,
689 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2,
690 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3,
691 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4
692 } drsuapi_DsReplicaOpType;
694 typedef [switch_type(drsuapi_DsReplicaOpType)] union {
695 [case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)] drsuapi_DsReplicaSyncOptions sync;
696 [case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)] drsuapi_DsReplicaAddOptions add;
697 [case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)] drsuapi_DsReplicaDeleteOptions delete;
698 [case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)] drsuapi_DsReplicaModifyOptions modify;
699 [case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)] drsuapi_DsReplicaUpdateRefsOptions update_refs;
700 [default] uint32 unknown;
701 } drsuapi_DsRplicaOpOptions;
703 typedef struct {
704 NTTIME operation_start;
705 uint32 serial_num; /* unique till reboot */
706 uint32 priority;
707 drsuapi_DsReplicaOpType operation_type;
708 [switch_is(operation_type)] drsuapi_DsRplicaOpOptions options;
709 unistr *nc_dn;
710 unistr *remote_dsa_obj_dn;
711 unistr *remote_dsa_address;
712 GUID nc_obj_guid;
713 GUID remote_dsa_obj_guid;
714 } drsuapi_DsReplicaOp;
716 typedef struct {
717 NTTIME time;
718 uint32 count;
719 [size_is(count)] drsuapi_DsReplicaOp array[];
720 } drsuapi_DsReplicaOpCtr;
722 typedef struct {
723 unistr *attribute_name;
724 unistr *object_dn;
725 uint32 value_length;
726 [size_is(value_length)] uint8 *value[];
727 NTTIME deleted;
728 NTTIME created;
729 uint32 version;
730 NTTIME originating_last_changed;
731 GUID originating_dsa_invocation_id;
732 uint64 originating_usn;
733 uint64 local_usn;
734 } drsuapi_DsReplicaAttrValMetaData;
736 typedef struct {
737 uint32 count;
738 int32 enumeration_context;
739 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
740 } drsuapi_DsReplicaAttrValMetaDataCtr;
742 typedef struct {
743 GUID source_dsa_invocation_id;
744 uint64 highest_usn;
745 NTTIME last_sync_success;
746 } drsuapi_DsReplicaCursor2;
748 typedef struct {
749 uint32 count;
750 int32 enumeration_context;
751 [size_is(count)] drsuapi_DsReplicaCursor2 array[];
752 } drsuapi_DsReplicaCursor2Ctr;
754 typedef struct {
755 GUID source_dsa_invocation_id;
756 uint64 highest_usn;
757 NTTIME last_sync_success;
758 unistr *source_dsa_obj_dn;
759 } drsuapi_DsReplicaCursor3;
761 typedef struct {
762 uint32 count;
763 int32 enumeration_context;
764 [size_is(count)] drsuapi_DsReplicaCursor3 array[];
765 } drsuapi_DsReplicaCursor3Ctr;
767 typedef struct {
768 unistr *attribute_name;
769 uint32 version;
770 NTTIME originating_last_changed;
771 GUID originating_dsa_invocation_id;
772 uint64 originating_usn;
773 uint64 local_usn;
774 unistr *originating_dsa_obj_dn;
775 } drsuapi_DsReplicaObjMetaData2;
777 typedef struct {
778 uint32 count;
779 int32 enumeration_context;
780 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
781 } drsuapi_DsReplicaObjMetaData2Ctr;
783 typedef struct {
784 unistr *attribute_name;
785 unistr *object_dn;
786 uint32 value_length;
787 [size_is(value_length)] uint8 *value[];
788 NTTIME deleted;
789 NTTIME created;
790 uint32 version;
791 NTTIME originating_last_changed;
792 GUID originating_dsa_invocation_id;
793 uint64 originating_usn;
794 uint64 local_usn;
795 unistr *originating_dsa_obj_dn;
796 } drsuapi_DsReplicaAttrValMetaData2;
798 typedef struct {
799 uint32 count;
800 int32 enumeration_context;
801 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
802 } drsuapi_DsReplicaAttrValMetaData2Ctr;
804 typedef struct {
805 uint64 u1; /* session number? */
806 uint32 u2;
807 uint32 u3;
808 GUID bind_guid;
809 NTTIME_1sec bind_time;
810 uint32 u4; /* flags? */
811 uint32 u5;
812 } drsuapi_DsReplicaConnection04;
814 typedef struct {
815 [range(0,10000)] uint32 count;
816 uint32 reserved;
817 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
818 } drsuapi_DsReplicaConnection04Ctr;
820 typedef struct {
821 unistr *str1;
822 uint32 u1;
823 uint32 u2;
824 uint32 u3;
825 uint32 u4;
826 uint32 u5;
827 uint64 u6;
828 uint32 u7;
829 } drsuapi_DsReplica06;
831 typedef struct {
832 [range(0,256)] uint32 count;
833 uint32 reserved;
834 [size_is(count)] drsuapi_DsReplica06 array[];
835 } drsuapi_DsReplica06Ctr;
837 typedef [switch_type(drsuapi_DsReplicaInfoType)] union {
838 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours;
839 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCursorCtr *coursors;
840 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
841 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
842 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
843 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops;
844 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
845 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCursor2Ctr *coursors2;
846 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCursor3Ctr *coursors3;
847 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
848 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
849 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
850 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04;
851 [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCursor05Ctr *coursors05;
852 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
853 } drsuapi_DsReplicaInfo;
855 WERROR drsuapi_DsReplicaGetInfo(
856 [in,ref] policy_handle *bind_handle,
857 [in] drsuapi_DsReplicaGetInfoLevel level,
858 [in,ref,switch_is(level)] drsuapi_DsReplicaGetInfoRequest *req,
859 [out,ref] drsuapi_DsReplicaInfoType *info_type,
860 [out,ref,switch_is(*info_type)] drsuapi_DsReplicaInfo *info
863 /*****************/
864 /* Function 0x14 */
865 WERROR DRSUAPI_ADD_SID_HISTORY();
867 /*****************/
868 /* Function 0x15 */
869 WERROR DRSUAPI_GET_MEMBERSHIPS2();
871 /*****************/
872 /* Function 0x16 */
873 WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
875 /*****************/
876 /* Function 0x17 */
877 WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
879 /*****************/
880 /* Function 0x18 */
881 WERROR DRSUAPI_QUERY_SITES_BY_COST();