fix few trailing spaces
[drsuapi_dissector.git] / drsuapi / drsuapi.idl
blob038f9743a4027c74f25df70e9be5796f09f61b18
1 #include "idl_types.h"
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 typedef [bitmap32bit] bitmap {
57 DRSUAPI_SUPPORTED_EXTENSION_ADAM = 0x00000001,
58 DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2 = 0x00000002
59 } drsuapi_SupportedExtensionsExt;
61 /* this is used by w2k */
62 typedef struct {
63 drsuapi_SupportedExtensions supported_extensions;
64 GUID site_guid;
65 uint32 pid;
66 } drsuapi_DsBindInfo24;
68 /* this is used by w2k3 */
69 typedef struct {
70 drsuapi_SupportedExtensions supported_extensions;
71 GUID site_guid;
72 uint32 pid;
73 uint32 repl_epoch;
74 } drsuapi_DsBindInfo28;
76 /* this is used by w2k8 */
77 typedef struct {
78 drsuapi_SupportedExtensions supported_extensions;
79 GUID site_guid;
80 uint32 pid;
81 uint32 repl_epoch;
82 drsuapi_SupportedExtensionsExt supported_extensions_ext;
83 GUID config_dn_guid;
84 } drsuapi_DsBindInfo48;
87 typedef struct {
88 [flag(NDR_REMAINING)] DATA_BLOB info;
89 } drsuapi_DsBindInfoFallBack;
92 typedef [switch_type(uint32)] union {
93 [case(24)] drsuapi_DsBindInfo24 info24;
94 [case(28)] drsuapi_DsBindInfo28 info28;
95 [case(48)] drsuapi_DsBindInfo48 info48;
96 /* [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;*/
97 } drsuapi_DsBindInfo;
99 /* the drsuapi_DsBindInfoCtr was this before
100 * typedef [flag(NDR_PAHEX)] struct {
101 * [range(1,10000)] uint32 length;
102 * [size_is(length)] uint8 data[];
103 * } drsuapi_DsBindInfo;
105 * but we don't want the caller to manually decode this blob,
106 * so we're doing it here
109 typedef struct {
110 [range(1,10000)] uint32 length;
111 [switch_is(length)] drsuapi_DsBindInfo info;
112 } drsuapi_DsBindInfoCtr;
114 /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
116 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
118 const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
120 * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges()
121 * as administrator and this values are also used in the destination_dsa_guid field
122 * of drsuapi_DsGetNCChangesReq5/8 and the source_dsa_guid is zero.
124 const char *DRSUAPI_DS_BIND_GUID_W2K = "6abec3d1-3054-41c8-a362-5a0c5b7d5d71";
125 const char *DRSUAPI_DS_BIND_GUID_W2K3 = "6afab99c-6e26-464a-975f-f58f105218bc";
127 [public] WERROR drsuapi_DsBind(
128 [in,unique] GUID *bind_guid,
129 [in,out,unique] drsuapi_DsBindInfoCtr *bind_info,
130 [out] policy_handle *bind_handle
133 /*****************/
134 /* Function 0x01 */
135 WERROR drsuapi_DsUnbind(
136 [in,out,ref] policy_handle *bind_handle
139 /*****************/
140 /* Function 0x02 */
141 typedef struct {
142 uint32 unknown1;
143 uint32 unknown2;
144 GUID guid1;
145 uint8 byte_array[28];
146 uint32 str_len;
147 [size_is(str_len+1)] uint16 nc_dn[];
148 } drsuapi_DsReplicaSyncRequest1Info;
150 typedef bitmap {
151 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION = 0x00000001,
152 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE = 0x00000002,
153 DRSUAPI_DS_REPLICA_SYNC_PERIODIC = 0x00000004,
154 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING = 0x00000008,
155 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES = 0x00000010,
156 DRSUAPI_DS_REPLICA_SYNC_FULL = 0x00000020,
157 DRSUAPI_DS_REPLICA_SYNC_URGENT = 0x00000040,
158 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD = 0x00000080,
159 DRSUAPI_DS_REPLICA_SYNC_FORCE = 0x00000100,
160 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE = 0x00000200,
161 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED = 0x00000400,
162 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY = 0x00000800,
163 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY = 0x00001000,
164 DRSUAPI_DS_REPLICA_SYNC_INITIAL = 0x00002000,
165 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION = 0x00004000,
166 DRSUAPI_DS_REPLICA_SYNC_ABANDONED = 0x00008000,
167 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS = 0x00010000,
168 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000,
169 DRSUAPI_DS_REPLICA_SYNC_REQUEUE = 0x00040000,
170 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION = 0x00080000,
171 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA = 0x00100000,
172 DRSUAPI_DS_REPLICA_SYNC_CRITICAL = 0x00200000,
173 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS = 0x00400000,
174 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED = 0x00800000
175 } drsuapi_DsReplicaSyncOptions;
177 typedef struct {
178 [ref] drsuapi_DsReplicaSyncRequest1Info *info;
179 GUID source_dsa_guid;
180 [ref,charset(DOS),string] uint8 *other_info; /* I assume this is related to the repsFromTo1OtherInfo dns_name */
181 drsuapi_DsReplicaSyncOptions options;
182 } drsuapi_DsReplicaSyncRequest1;
184 typedef [switch_type(uint32)] union {
185 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
186 } drsuapi_DsReplicaSyncRequest;
188 WERROR drsuapi_DsReplicaSync(
189 [in,ref] policy_handle *bind_handle,
190 [in] uint32 level,
191 [in,switch_is(level),ref] drsuapi_DsReplicaSyncRequest *req
194 /*****************/
195 /* Function 0x03 */
196 typedef struct {
197 uint64 usn1;
198 uint64 usn2;
199 uint64 usn3;
200 } drsuapi_DsGetNCChangesUsnTriple;
202 typedef struct {
203 GUID source_dsa_invocation_id;
204 uint64 highest_usn;
205 } drsuapi_DsReplicaCursor;
207 typedef struct {
208 uint32 u1;
209 uint32 u2;
210 [range(0,0x100000)] uint32 count;
211 uint32 u3;
212 [size_is(count)] drsuapi_DsReplicaCursor array[];
213 } drsuapi_DsReplicaCursor05Ctr;
215 typedef struct {
216 GUID guid1;
217 GUID guid2;
218 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
219 drsuapi_DsGetNCChangesUsnTriple usn1;
220 drsuapi_DsReplicaCursor05Ctr *coursor;
221 uint32 unknown1;
222 uint32 unknown2;
223 uint32 unknown3;
224 uint32 unknown4;
225 uint64 h1;
226 } drsuapi_DsGetNCChangesRequest5;
228 typedef [flag(NDR_PAHEX)] struct {
229 [range(0,10000)] uint32 length;
230 [size_is(length)] uint8 *byte_array[];
231 } drsuapi_DsGetNCChangesRequest_Ctr14;
233 typedef struct {
234 uint32 unknown1;
235 drsuapi_DsGetNCChangesRequest_Ctr14 data;
236 } drsuapi_DsGetNCChangesRequest_Ctr13;
238 typedef struct {
239 [range(0,0x100000)] uint32 count;
240 [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array[];
241 } drsuapi_DsGetNCChangesRequest_Ctr12;
243 typedef struct {
244 GUID guid1;
245 GUID guid2;
246 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
247 drsuapi_DsGetNCChangesUsnTriple usn1;
248 drsuapi_DsReplicaCursor05Ctr *coursor;
249 uint32 unknown1;
250 uint32 unknown2;
251 uint32 unknown3;
252 uint32 unknown4;
253 uint64 h1;
254 uint32 unique_ptr1;
255 uint32 unique_ptr2;
256 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
257 } drsuapi_DsGetNCChangesRequest8;
259 typedef [switch_type(uint32)] union {
260 [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
261 [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
262 } drsuapi_DsGetNCChangesRequest;
264 typedef struct {
265 drsuapi_DsReplicaCursor coursor;
266 NTTIME_1sec time1;
267 } drsuapi_DsReplicaCursorEx;
269 typedef struct {
270 uint32 u1;
271 uint32 u2;
272 [range(0,0x100000)] uint32 count;
273 uint32 u3;
274 [size_is(count)] drsuapi_DsReplicaCursorEx array[];
275 } drsuapi_DsReplicaCursorEx05Ctr;
277 typedef struct {
278 GUID guid1;
279 GUID guid2;
280 drsuapi_DsReplicaSyncRequest1Info *sync_req_info1;
281 drsuapi_DsGetNCChangesUsnTriple usn1;
282 drsuapi_DsGetNCChangesUsnTriple usn2;
283 drsuapi_DsReplicaCursorEx05Ctr *coursor_ex;
284 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
285 uint32 u1[3];
286 uint32 ptr1;
287 uint32 u2[3];
288 uint32 len1;
289 uint32 array_ptr1;
290 uint32 u3;
291 } drsuapi_DsGetNCChangesCtr6;
293 /* typedef struct {
294 } drsuapi_DsGetNCChangesCtr7;
296 typedef [switch_type(uint32)] union {
297 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6;
298 /* [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7;*/
299 } drsuapi_DsGetNCChangesCtr;
301 WERROR drsuapi_DsGetNCChanges(
302 [in,ref] policy_handle *bind_handle,
303 [in] uint32 level,
304 [in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req,
305 [out,ref] uint32 *level_out,
306 [out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr
309 /*****************/
310 /* Function 0x04 */
311 typedef struct {
312 char Data[28];
313 } DOM_SID28;
314 typedef [public,gensize] struct {
315 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->iconv_convenience, ndr->flags)-4)] uint32 __ndr_size;
316 [value(ndr_size_dom_sid28(&sid, ndr->flags))] uint32 __ndr_size_sid;
317 GUID guid;
318 DOM_SID28 sid;
319 [value(strlen_m(dn))] uint32 __ndr_size_dn;
320 [charset(UTF16),size_is(__ndr_size_dn+1)] uint16 dn[];
321 } drsuapi_DsReplicaObjectIdentifier;
323 typedef bitmap {
324 DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION = 0x00000001,
325 DRSUAPI_DS_REPLICA_UPDATE_GETCHG_CHECK = 0x00000002,
326 DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE = 0x00000004,
327 DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE = 0x00000008,
328 DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE = 0x00000010
329 } drsuapi_DsReplicaUpdateRefsOptions;
331 typedef struct {
332 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
333 [ref,charset(DOS),string] uint8 *dest_dsa_dns_name;
334 GUID dest_dsa_guid;
335 drsuapi_DsReplicaUpdateRefsOptions options;
336 } drsuapi_DsReplicaUpdateRefsRequest1;
338 typedef [switch_type(uint32)] union {
339 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1;
340 } drsuapi_DsReplicaUpdateRefsRequest;
342 WERROR drsuapi_DsReplicaUpdateRefs(
343 [in,ref] policy_handle *bind_handle,
344 [in] uint32 level,
345 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req
348 /*****************/
349 /* Function 0x05 */
350 typedef bitmap {
351 DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION = 0x00000001,
352 DRSUAPI_DS_REPLICA_ADD_WRITEABLE = 0x00000002
353 /* TODO ... */
354 } drsuapi_DsReplicaAddOptions;
356 WERROR DRSUAPI_REPLICA_ADD();
358 /*****************/
359 /* Function 0x06 */
360 typedef bitmap {
361 DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = 0x00000001,
362 DRSUAPI_DS_REPLICA_DELETE_WRITEABLE = 0x00000002
363 /* TODO ... */
364 } drsuapi_DsReplicaDeleteOptions;
366 WERROR DRSUAPI_REPLICA_DEL();
368 /*****************/
369 /* Function 0x07 */
370 typedef bitmap {
371 DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION = 0x00000001,
372 DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE = 0x00000002
373 } drsuapi_DsReplicaModifyOptions;
375 WERROR DRSUAPI_REPLICA_MODIFY();
377 /*****************/
378 /* Function 0x08 */
379 WERROR DRSUAPI_VERIFY_NAMES();
381 /*****************/
382 /* Function 0x09 */
383 WERROR DRSUAPI_GET_MEMBERSHIPS();
385 /*****************/
386 /* Function 0x0a */
387 WERROR DRSUAPI_INTER_DOMAIN_MOVE();
389 /*****************/
390 /* Function 0x0b */
391 WERROR DRSUAPI_GET_NT4_CHANGELOG();
393 /*****************/
394 /* Function 0x0c */
395 typedef [v1_enum] enum {
396 DRSUAPI_DS_NAME_STATUS_OK = 0,
397 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1,
398 DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2,
399 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3,
400 DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4,
401 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5,
402 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6,
403 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7
404 } drsuapi_DsNameStatus;
406 typedef [v1_enum] enum {
407 DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0,
408 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,
409 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2,
410 DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4,
411 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8
412 } drsuapi_DsNameFlags;
414 typedef [v1_enum] enum {
415 DRSUAPI_DS_NAME_FORMAT_UKNOWN = 0,
416 DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 1,
417 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 2,
418 DRSUAPI_DS_NAME_FORMAT_DISPLAY = 3,
419 DRSUAPI_DS_NAME_FORMAT_GUID = 6,
420 DRSUAPI_DS_NAME_FORMAT_CANONICAL = 7,
421 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 8,
422 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 9,
423 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 10,
424 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 11,
425 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 12
426 } drsuapi_DsNameFormat;
428 typedef struct {
429 [string,charset(UTF16)] uint16 *str;
430 } drsuapi_DsNameString;
432 typedef struct {
433 uint32 unknown1; /* 0x000004e4 */
434 uint32 unknown2; /* 0x00000407 */
435 drsuapi_DsNameFlags format_flags;
436 drsuapi_DsNameFormat format_offered;
437 drsuapi_DsNameFormat format_desired;
438 [range(1,10000)] uint32 count;
439 [size_is(count)] drsuapi_DsNameString *names[];
440 } drsuapi_DsNameRequest1;
442 typedef [switch_type(uint32)] union {
443 [case(1)] drsuapi_DsNameRequest1 req1;
444 } drsuapi_DsNameRequest;
446 typedef struct {
447 drsuapi_DsNameStatus status;
448 [charset(UTF16),string] uint16 *dns_domain_name;
449 [charset(UTF16),string] uint16 *result_name;
450 } drsuapi_DsNameInfo1;
452 typedef struct {
453 uint32 count;
454 [size_is(count)] drsuapi_DsNameInfo1 *array[];
455 } drsuapi_DsNameCtr1;
457 typedef [switch_type(uint32)] union {
458 [case(1)] drsuapi_DsNameCtr1 *ctr1;
459 } drsuapi_DsNameCtr;
461 WERROR drsuapi_DsCrackNames(
462 [in,ref] policy_handle *bind_handle,
463 [in] uint32 level,
464 [in,ref,switch_is(level)] drsuapi_DsNameRequest *req,
465 [out,ref] uint32 *level_out,
466 [out,ref,switch_is(*level_out)] drsuapi_DsNameCtr *ctr
469 /*****************/
470 /* Function 0x0d */
471 typedef [v1_enum] enum {
472 DRSUAPI_DS_SPN_OPERATION_ADD = 0,
473 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
474 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
475 } drsuapi_DsSpnOperation;
477 typedef struct {
478 drsuapi_DsSpnOperation operation;
479 uint32 unknown1;
480 [charset(UTF16),string] uint16 *object_dn;
481 [range(0,10000)] uint32 count;
482 [size_is(count)] drsuapi_DsNameString *spn_names;
483 } drsuapi_DsWriteAccountSpnRequest1;
485 typedef [switch_type(uint32)] union {
486 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
487 } drsuapi_DsWriteAccountSpnRequest;
489 typedef struct {
490 WERROR status;
491 } drsuapi_DsWriteAccountSpnResult1;
493 typedef [switch_type(uint32)] union {
494 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
495 } drsuapi_DsWriteAccountSpnResult;
497 WERROR drsuapi_DsWriteAccountSpn(
498 [in,ref] policy_handle *bind_handle,
499 [in] uint32 level,
500 [in,ref,switch_is(level)] drsuapi_DsWriteAccountSpnRequest *req,
501 [out,ref] uint32 *level_out,
502 [out,ref,switch_is(*level_out)] drsuapi_DsWriteAccountSpnResult *res
505 /*****************/
506 /* Function 0x0e */
507 WERROR DRSUAPI_REMOVE_DS_SERVER();
509 /*****************/
510 /* Function 0x0f */
511 WERROR DRSUAPI_REMOVE_DS_DOMAIN();
513 /*****************/
514 /* Function 0x10 */
515 typedef struct {
516 [charset(UTF16),string] uint16 *domain_name; /* netbios or dns */
517 int32 level; /* specifies the switch level for the request */
518 } drsuapi_DsGetDCInfoRequest1;
520 typedef [switch_type(uint32)] union {
521 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
522 } drsuapi_DsGetDCInfoRequest;
524 typedef struct {
525 [charset(UTF16),string] uint16 *netbios_name;
526 [charset(UTF16),string] uint16 *dns_name;
527 [charset(UTF16),string] uint16 *site_name;
528 [charset(UTF16),string] uint16 *computer_dn;
529 [charset(UTF16),string] uint16 *server_dn;
530 uint32 is_pdc;
531 uint32 is_enabled;
532 } drsuapi_DsGetDCInfo1;
534 typedef struct {
535 [range(0,10000)] uint32 count;
536 [size_is(count)] drsuapi_DsGetDCInfo1 *array[];
537 } drsuapi_DsGetDCInfoCtr1;
539 typedef struct {
540 [charset(UTF16),string] uint16 *netbios_name;
541 [charset(UTF16),string] uint16 *dns_name;
542 [charset(UTF16),string] uint16 *site_name;
543 [charset(UTF16),string] uint16 *site_dn;
544 [charset(UTF16),string] uint16 *computer_dn;
545 [charset(UTF16),string] uint16 *server_dn;
546 [charset(UTF16),string] uint16 *ntds_dn;
547 uint32 is_pdc;
548 uint32 is_enabled;
549 uint32 is_gc;
550 GUID site_guid;
551 GUID computer_guid;
552 GUID server_guid;
553 GUID ntds_guid;
554 } drsuapi_DsGetDCInfo2;
556 typedef struct {
557 [range(0,10000)] uint32 count;
558 [size_is(count)] drsuapi_DsGetDCInfo2 *array[];
559 } drsuapi_DsGetDCInfoCtr2;
561 typedef struct {
562 uint32 unknown1;
563 uint32 unknown2;
564 uint32 unknown3;
565 uint32 unknown4;
566 uint32 unknown5;
567 uint32 unknown6;
568 [charset(UTF16),string] uint16 *server_nt4_account;
569 } drsuapi_DsGetDCInfo01;
571 typedef struct {
572 [range(0,10000)] uint32 count;
573 [size_is(count)] drsuapi_DsGetDCInfo01 *array[];
574 } drsuapi_DsGetDCInfoCtr01;
576 typedef [v1_enum] enum {
577 DRSUAPI_DC_INFO_CTR_1 = 1,
578 DRSUAPI_DC_INFO_CTR_2 = 2,
579 DRSUAPI_DC_INFO_CTR_01 = -1
580 } drsuapi_DsGetDCInfoCtrLevels;
582 typedef [switch_type(uint32)] union {
583 [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1;
584 [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2;
585 [case(DRSUAPI_DC_INFO_CTR_01)] drsuapi_DsGetDCInfoCtr01 ctr01;
586 } drsuapi_DsGetDCInfoCtr;
588 WERROR drsuapi_DsGetDomainControllerInfo(
589 [in,ref] policy_handle *bind_handle,
590 [in] uint32 level,
591 [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req,
592 [out,ref] uint32 *level_out,
593 [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr
596 /*****************/
597 /* Function 0x11 */
598 WERROR drsuapi_DsAddEntry();
600 /*****************/
601 /* Function 0x12 */
602 typedef bitmap {
603 DRSUAPI_DS_EXECUTE_KCC_ASYNCHRONOUS_OPERATION = 0x00000001,
604 DRSUAPI_DS_EXECUTE_KCC_DAMPED = 0x00000002
605 } drsuapi_DsExecuteKCCFlags;
607 typedef struct {
608 uint32 taskID;
609 drsuapi_DsExecuteKCCFlags flags;
610 } drsuapi_DsExecuteKCC1;
612 typedef [switch_type(uint32)] union {
613 [case(1)] drsuapi_DsExecuteKCC1 ctr1;
614 } drsuapi_DsExecuteKCCRequest;
616 WERROR drsuapi_DsExecuteKCC(
617 [in] policy_handle *bind_handle,
618 [in] uint32 level,
619 [in, ref, switch_is(level)] drsuapi_DsExecuteKCCRequest *req
622 /*****************/
623 /* Function 0x13 */
624 typedef [v1_enum] enum {
625 DRSUAPI_DS_REPLICA_GET_INFO = 1,
626 DRSUAPI_DS_REPLICA_GET_INFO2 = 2
627 } drsuapi_DsReplicaGetInfoLevel;
629 typedef [v1_enum] enum {
630 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0,
631 DRSUAPI_DS_REPLICA_INFO_CURSORS = 1,
632 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2,
633 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3,
634 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4,
635 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5,
636 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6,
637 DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7,
638 DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8,
639 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9,
640 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10,
641 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02 = -2,
642 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04 = -4,
643 DRSUAPI_DS_REPLICA_INFO_CURSURS05 = -5,
644 DRSUAPI_DS_REPLICA_INFO_06 = -6
645 } drsuapi_DsReplicaInfoType;
647 typedef struct {
648 drsuapi_DsReplicaInfoType info_type;
649 [charset(UTF16),string] uint16 *object_dn;
650 GUID guid1;
651 } drsuapi_DsReplicaGetInfoRequest1;
653 typedef struct {
654 drsuapi_DsReplicaInfoType info_type;
655 [charset(UTF16),string] uint16 *object_dn;
656 GUID guid1;
657 uint32 unknown1;
658 [charset(UTF16),string] uint16 *string1;
659 [charset(UTF16),string] uint16 *string2;
660 uint32 unknown2;
661 } drsuapi_DsReplicaGetInfoRequest2;
663 typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
664 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1;
665 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2;
666 } drsuapi_DsReplicaGetInfoRequest;
668 typedef struct {
669 [charset(UTF16),string] uint16 *naming_context_dn;
670 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
671 [charset(UTF16),string] uint16 *source_dsa_address;
672 [charset(UTF16),string] uint16 *transport_obj_dn;
673 uint32 replica_flags;
674 uint32 reserved;
675 GUID naming_context_obj_guid;
676 GUID source_dsa_obj_guid;
677 GUID source_dsa_invocation_id;
678 GUID transport_obj_guid;
679 uint64 tmp_highest_usn;
680 uint64 highest_usn;
681 NTTIME last_success;
682 NTTIME last_attempt;
683 WERROR result_last_attempt;
684 uint32 consecutive_sync_failures;
685 } drsuapi_DsReplicaNeighbour;
687 typedef struct {
688 uint32 count;
689 uint32 reserved;
690 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
691 } drsuapi_DsReplicaNeighbourCtr;
693 typedef struct {
694 uint32 count;
695 uint32 reserved;
696 [size_is(count)] drsuapi_DsReplicaCursor array[];
697 } drsuapi_DsReplicaCursorCtr;
699 typedef struct {
700 [charset(UTF16),string] uint16 *attribute_name;
701 uint32 version;
702 NTTIME originating_last_changed;
703 GUID originating_dsa_invocation_id;
704 uint64 originating_usn;
705 uint64 local_usn;
706 } drsuapi_DsReplicaObjMetaData;
708 typedef struct {
709 uint32 count;
710 uint32 reserved;
711 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
712 } drsuapi_DsReplicaObjMetaDataCtr;
714 typedef struct {
715 [charset(UTF16),string] uint16 *dsa_obj_dn;
716 GUID dsa_obj_guid;
717 NTTIME first_failure;
718 uint32 num_failures;
719 WERROR last_result;
720 } drsuapi_DsReplicaKccDsaFailure;
722 typedef struct {
723 uint32 count;
724 uint32 reserved;
725 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
726 } drsuapi_DsReplicaKccDsaFailuresCtr;
728 typedef enum {
729 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0,
730 DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1,
731 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2,
732 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3,
733 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4
734 } drsuapi_DsReplicaOpType;
736 typedef [switch_type(drsuapi_DsReplicaOpType)] union {
737 [case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)] drsuapi_DsReplicaSyncOptions sync;
738 [case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)] drsuapi_DsReplicaAddOptions add;
739 [case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)] drsuapi_DsReplicaDeleteOptions delete;
740 [case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)] drsuapi_DsReplicaModifyOptions modify;
741 [case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)] drsuapi_DsReplicaUpdateRefsOptions update_refs;
742 [default] uint32 unknown;
743 } drsuapi_DsRplicaOpOptions;
745 typedef struct {
746 NTTIME operation_start;
747 uint32 serial_num; /* unique till reboot */
748 uint32 priority;
749 drsuapi_DsReplicaOpType operation_type;
750 [switch_is(operation_type)] drsuapi_DsRplicaOpOptions options;
751 [charset(UTF16),string] uint16 *nc_dn;
752 [charset(UTF16),string] uint16 *remote_dsa_obj_dn;
753 [charset(UTF16),string] uint16 *remote_dsa_address;
754 GUID nc_obj_guid;
755 GUID remote_dsa_obj_guid;
756 } drsuapi_DsReplicaOp;
758 typedef struct {
759 NTTIME time;
760 uint32 count;
761 [size_is(count)] drsuapi_DsReplicaOp array[];
762 } drsuapi_DsReplicaOpCtr;
764 typedef struct {
765 [charset(UTF16),string] uint16 *attribute_name;
766 [charset(UTF16),string] uint16 *object_dn;
767 uint32 value_length;
768 [size_is(value_length)] uint8 *value[];
769 NTTIME deleted;
770 NTTIME created;
771 uint32 version;
772 NTTIME originating_last_changed;
773 GUID originating_dsa_invocation_id;
774 uint64 originating_usn;
775 uint64 local_usn;
776 } drsuapi_DsReplicaAttrValMetaData;
778 typedef struct {
779 uint32 count;
780 int32 enumeration_context;
781 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
782 } drsuapi_DsReplicaAttrValMetaDataCtr;
784 typedef struct {
785 GUID source_dsa_invocation_id;
786 uint64 highest_usn;
787 NTTIME last_sync_success;
788 } drsuapi_DsReplicaCursor2;
790 typedef struct {
791 uint32 count;
792 int32 enumeration_context;
793 [size_is(count)] drsuapi_DsReplicaCursor2 array[];
794 } drsuapi_DsReplicaCursor2Ctr;
796 typedef struct {
797 GUID source_dsa_invocation_id;
798 uint64 highest_usn;
799 NTTIME last_sync_success;
800 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
801 } drsuapi_DsReplicaCursor3;
803 typedef struct {
804 uint32 count;
805 int32 enumeration_context;
806 [size_is(count)] drsuapi_DsReplicaCursor3 array[];
807 } drsuapi_DsReplicaCursor3Ctr;
809 typedef struct {
810 [charset(UTF16),string] uint16 *attribute_name;
811 uint32 version;
812 NTTIME originating_last_changed;
813 GUID originating_dsa_invocation_id;
814 uint64 originating_usn;
815 uint64 local_usn;
816 [charset(UTF16),string] uint16 *originating_dsa_obj_dn;
817 } drsuapi_DsReplicaObjMetaData2;
819 typedef struct {
820 uint32 count;
821 int32 enumeration_context;
822 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
823 } drsuapi_DsReplicaObjMetaData2Ctr;
825 typedef struct {
826 [charset(UTF16),string] uint16 *attribute_name;
827 [charset(UTF16),string] uint16 *object_dn;
828 uint32 value_length;
829 [size_is(value_length)] uint8 *value[];
830 NTTIME deleted;
831 NTTIME created;
832 uint32 version;
833 NTTIME originating_last_changed;
834 GUID originating_dsa_invocation_id;
835 uint64 originating_usn;
836 uint64 local_usn;
837 [charset(UTF16),string] uint16 *originating_dsa_obj_dn;
838 } drsuapi_DsReplicaAttrValMetaData2;
840 typedef struct {
841 uint32 count;
842 int32 enumeration_context;
843 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
844 } drsuapi_DsReplicaAttrValMetaData2Ctr;
846 typedef struct {
847 uint64 u1; /* session number? */
848 uint32 u2;
849 uint32 u3;
850 GUID bind_guid;
851 NTTIME_1sec bind_time;
852 uint32 u4; /* flags? */
853 uint32 u5;
854 } drsuapi_DsReplicaConnection04;
856 typedef struct {
857 [range(0,10000)] uint32 count;
858 uint32 reserved;
859 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
860 } drsuapi_DsReplicaConnection04Ctr;
862 typedef struct {
863 [charset(UTF16),string] uint16 *str1;
864 uint32 u1;
865 uint32 u2;
866 uint32 u3;
867 uint32 u4;
868 uint32 u5;
869 uint64 u6;
870 uint32 u7;
871 } drsuapi_DsReplica06;
873 typedef struct {
874 [range(0,256)] uint32 count;
875 uint32 reserved;
876 [size_is(count)] drsuapi_DsReplica06 array[];
877 } drsuapi_DsReplica06Ctr;
879 typedef [switch_type(drsuapi_DsReplicaInfoType)] union {
880 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours;
881 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCursorCtr *coursors;
882 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
883 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
884 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
885 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops;
886 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
887 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCursor2Ctr *coursors2;
888 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCursor3Ctr *coursors3;
889 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
890 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
891 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
892 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04;
893 [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCursor05Ctr *coursors05;
894 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
895 } drsuapi_DsReplicaInfo;
897 WERROR drsuapi_DsReplicaGetInfo(
898 [in,ref] policy_handle *bind_handle,
899 [in] drsuapi_DsReplicaGetInfoLevel level,
900 [in,ref,switch_is(level)] drsuapi_DsReplicaGetInfoRequest *req,
901 [out,ref] drsuapi_DsReplicaInfoType *info_type,
902 [out,ref,switch_is(*info_type)] drsuapi_DsReplicaInfo *info
905 /*****************/
906 /* Function 0x14 */
907 WERROR DRSUAPI_ADD_SID_HISTORY();
909 /*****************/
910 /* Function 0x15 */
911 WERROR DRSUAPI_GET_MEMBERSHIPS2();
913 /*****************/
914 /* Function 0x16 */
915 WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
917 /*****************/
918 /* Function 0x17 */
919 WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
921 /*****************/
922 /* Function 0x18 */
923 WERROR DRSUAPI_QUERY_SITES_BY_COST();