3 import "security.idl", "misc.idl", "samr.idl";
6 uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"),
8 endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"),
10 helpstring("Active Directory Replication"),
11 helper("../librpc/ndr/ndr_drsuapi.h"),
12 pointer_default(unique)
16 typedef bitmap samr_GroupAttrs samr_GroupAttrs;
18 /* see MS-DRSR section 5.39 */
19 typedef [public,bitmap32bit] bitmap {
20 DRSUAPI_DRS_ASYNC_OP = 0x00000001,
21 DRSUAPI_DRS_GETCHG_CHECK = 0x00000002,
22 DRSUAPI_DRS_UPDATE_NOTIFICATION = 0x00000002,
23 DRSUAPI_DRS_ADD_REF = 0x00000004,
24 DRSUAPI_DRS_SYNC_ALL = 0x00000008,
25 DRSUAPI_DRS_DEL_REF = 0x00000008,
26 DRSUAPI_DRS_WRIT_REP = 0x00000010,
27 DRSUAPI_DRS_INIT_SYNC = 0x00000020,
28 DRSUAPI_DRS_PER_SYNC = 0x00000040,
29 DRSUAPI_DRS_MAIL_REP = 0x00000080,
30 DRSUAPI_DRS_ASYNC_REP = 0x00000100,
31 DRSUAPI_DRS_IGNORE_ERROR = 0x00000100,
32 DRSUAPI_DRS_TWOWAY_SYNC = 0x00000200,
33 DRSUAPI_DRS_CRITICAL_ONLY = 0x00000400,
34 DRSUAPI_DRS_GET_ANC = 0x00000800,
35 DRSUAPI_DRS_GET_NC_SIZE = 0x00001000,
36 DRSUAPI_DRS_LOCAL_ONLY = 0x00001000,
37 DRSUAPI_DRS_SYNC_BYNAME = 0x00004000,
38 DRSUAPI_DRS_REF_OK = 0x00004000,
39 DRSUAPI_DRS_FULL_SYNC_NOW = 0x00008000,
40 DRSUAPI_DRS_NO_SOURCE = 0x00008000,
41 DRSUAPI_DRS_FULL_SYNC_IN_PROGRESS = 0x00010000,
42 DRSUAPI_DRS_FULL_SYNC_PACKET = 0x00020000,
43 DRSUAPI_DRS_SYNC_REQUEUE = 0x00040000,
44 DRSUAPI_DRS_SYNC_URGENT = 0x00080000,
45 DRSUAPI_DRS_REF_GCSPN = 0x00100000,
46 DRSUAPI_DRS_NO_DISCARD = 0x00100000,
47 DRSUAPI_DRS_NEVER_SYNCED = 0x00200000,
48 DRSUAPI_DRS_SPECIAL_SECRET_PROCESSING = 0x00400000,
49 DRSUAPI_DRS_INIT_SYNC_NOW = 0x00800000,
50 DRSUAPI_DRS_PREEMPTED = 0x01000000,
51 DRSUAPI_DRS_SYNC_FORCED = 0x02000000,
52 DRSUAPI_DRS_DISABLE_AUTO_SYNC = 0x04000000,
53 DRSUAPI_DRS_DISABLE_PERIODIC_SYNC = 0x08000000,
54 DRSUAPI_DRS_USE_COMPRESSION = 0x10000000,
55 DRSUAPI_DRS_NEVER_NOTIFY = 0x20000000,
56 DRSUAPI_DRS_SYNC_PAS = 0x40000000,
57 DRSUAPI_DRS_GET_ALL_GROUP_MEMBERSHIP = 0x80000000
62 typedef [bitmap32bit] bitmap {
63 DRSUAPI_SUPPORTED_EXTENSION_BASE = 0x00000001,
64 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION = 0x00000002,
65 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI = 0x00000004,
66 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2 = 0x00000008,
67 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS = 0x00000010,
68 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1 = 0x00000020,
69 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION = 0x00000040,
70 DRSUAPI_SUPPORTED_EXTENSION_00000080 = 0x00000080,
71 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE = 0x00000100,
72 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2 = 0x00000200,
73 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION = 0x00000400,
74 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2 = 0x00000800,
75 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000,
76 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND = 0x00002000,
77 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO = 0x00004000,
78 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION = 0x00008000,
79 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01 = 0x00010000,
80 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP = 0x00020000,
81 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY = 0x00040000,
82 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3 = 0x00080000,
83 DRSUAPI_SUPPORTED_EXTENSION_00100000 = 0x00100000,
84 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2 = 0x00200000,
85 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6 = 0x00400000,
86 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS = 0x00800000,
87 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8 = 0x01000000,
88 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5 = 0x02000000,
89 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6 = 0x04000000,
91 * the following 3 have the same value
92 * repadmin.exe /bind says that
94 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3 = 0x08000000,
95 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7 = 0x08000000,
96 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT = 0x08000000,
97 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS = 0x10000000,
98 DRSUAPI_SUPPORTED_EXTENSION_20000000 = 0x20000000,
99 DRSUAPI_SUPPORTED_EXTENSION_40000000 = 0x40000000,
100 DRSUAPI_SUPPORTED_EXTENSION_80000000 = 0x80000000
101 } drsuapi_SupportedExtensions;
103 typedef [bitmap32bit] bitmap {
104 DRSUAPI_SUPPORTED_EXTENSION_ADAM = 0x00000001,
105 DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2 = 0x00000002
106 } drsuapi_SupportedExtensionsExt;
108 /* this is used by w2k */
110 drsuapi_SupportedExtensions supported_extensions;
113 } drsuapi_DsBindInfo24;
115 /* this is used by w2k3 */
117 drsuapi_SupportedExtensions supported_extensions;
121 } drsuapi_DsBindInfo28;
123 /* this is used by w2k8 */
125 drsuapi_SupportedExtensions supported_extensions;
129 drsuapi_SupportedExtensionsExt supported_extensions_ext;
131 } drsuapi_DsBindInfo48;
134 [flag(NDR_REMAINING)] DATA_BLOB info;
135 } drsuapi_DsBindInfoFallBack;
137 typedef [nodiscriminant] union {
138 [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24;
139 [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28;
140 [case(48)][subcontext(4)] drsuapi_DsBindInfo48 info48;
141 [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;
142 } drsuapi_DsBindInfo;
144 /* the drsuapi_DsBindInfoCtr was this before
145 * typedef [flag(NDR_PAHEX)] struct {
146 * [range(1,10000)] uint32 length;
147 * [size_is(length)] uint8 data[];
148 * } drsuapi_DsBindInfo;
150 * but we don't want the caller to manually decode this blob,
151 * so we're doing it here
155 [range(1,10000)] uint32 length;
156 [switch_is(length)] drsuapi_DsBindInfo info;
157 } drsuapi_DsBindInfoCtr;
159 /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
161 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
163 const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
165 * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges()
166 * as administrator and this values are also used in the destination_dsa_guid field
167 * of drsuapi_DsGetNCChangesReq5/8 and the source_dsa_guid is zero.
169 const char *DRSUAPI_DS_BIND_GUID_W2K = "6abec3d1-3054-41c8-a362-5a0c5b7d5d71";
170 const char *DRSUAPI_DS_BIND_GUID_W2K3 = "6afab99c-6e26-464a-975f-f58f105218bc";
172 [public] WERROR drsuapi_DsBind(
173 [in,unique] GUID *bind_guid,
174 [in,out,unique] drsuapi_DsBindInfoCtr *bind_info,
175 [out] policy_handle *bind_handle
180 WERROR drsuapi_DsUnbind(
181 [in,out] policy_handle *bind_handle
186 typedef [public,gensize] struct {
187 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->iconv_convenience, ndr->flags)-4)] uint32 __ndr_size;
188 [value(ndr_size_dom_sid28(&sid, ndr->flags))] uint32 __ndr_size_sid;
191 [value(strlen_m(dn))] uint32 __ndr_size_dn;
192 [charset(UTF16),size_is(__ndr_size_dn+1)] uint16 dn[];
193 } drsuapi_DsReplicaObjectIdentifier;
195 typedef [public] bitmap {
196 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION = 0x00000001,
197 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE = 0x00000002,
198 DRSUAPI_DS_REPLICA_SYNC_PERIODIC = 0x00000004,
199 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING = 0x00000008,
200 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES = 0x00000010,
201 DRSUAPI_DS_REPLICA_SYNC_FULL = 0x00000020,
202 DRSUAPI_DS_REPLICA_SYNC_URGENT = 0x00000040,
203 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD = 0x00000080,
204 DRSUAPI_DS_REPLICA_SYNC_FORCE = 0x00000100,
205 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE = 0x00000200,
206 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED = 0x00000400,
207 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY = 0x00000800,
208 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY = 0x00001000,
209 DRSUAPI_DS_REPLICA_SYNC_INITIAL = 0x00002000,
210 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION = 0x00004000,
211 DRSUAPI_DS_REPLICA_SYNC_ABANDONED = 0x00008000,
212 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS = 0x00010000,
213 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000,
214 DRSUAPI_DS_REPLICA_SYNC_REQUEUE = 0x00040000,
215 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION = 0x00080000,
216 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA = 0x00100000,
217 DRSUAPI_DS_REPLICA_SYNC_CRITICAL = 0x00200000,
218 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS = 0x00400000,
219 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED = 0x00800000
220 } drsuapi_DsReplicaSyncOptions;
223 drsuapi_DsReplicaObjectIdentifier *naming_context;
224 GUID source_dsa_guid;
225 astring *other_info; /* I assume this is related to the repsFromTo1OtherInfo dns_name */
226 drsuapi_DrsOptions options;
227 } drsuapi_DsReplicaSyncRequest1;
229 typedef [switch_type(int32)] union {
230 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
231 } drsuapi_DsReplicaSyncRequest;
233 WERROR drsuapi_DsReplicaSync(
234 [in] policy_handle *bind_handle,
236 [in,switch_is(level)] drsuapi_DsReplicaSyncRequest req
241 typedef [public] struct {
242 hyper tmp_highest_usn; /* updated after each object update */
244 hyper highest_usn; /* updated after a full replication cycle */
245 } drsuapi_DsReplicaHighWaterMark;
247 typedef [public] struct {
248 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
249 hyper highest_usn; /* updated after a full replication cycle */
250 } drsuapi_DsReplicaCursor;
253 [value(1)] uint32 version;
254 [value(0)] uint32 reserved1;
255 [range(0,0x100000)] uint32 count;
256 [value(0)] uint32 reserved2;
257 [size_is(count)] drsuapi_DsReplicaCursor cursors[];
258 } drsuapi_DsReplicaCursorCtrEx;
260 typedef [flag(NDR_PAHEX),v1_enum] enum {
261 DRSUAPI_EXOP_NONE = 0x00000000,
262 DRSUAPI_EXOP_FSMO_REQ_ROLE = 0x00000001,
263 DRSUAPI_EXOP_FSMO_RID_ALLOC = 0x00000002,
264 DRSUAPI_EXOP_FSMO_RID_REQ_ROLE = 0x00000003,
265 DRSUAPI_EXOP_FSMO_REQ_PDC = 0x00000004,
266 DRSUAPI_EXOP_FSMO_ABANDON_ROLE = 0x00000005,
267 DRSUAPI_EXOP_REPL_OBJ = 0x00000006,
268 DRSUAPI_EXOP_REPL_SECRET = 0x00000007
269 } drsuapi_DsExtendedOperation;
271 typedef [flag(NDR_PAHEX),v1_enum] enum {
272 DRSUAPI_EXOP_ERR_NONE = 0x00000000,
273 DRSUAPI_EXOP_ERR_SUCCESS = 0x00000001,
274 DRSUAPI_EXOP_ERR_UNKNOWN_OP = 0x00000002,
275 DRSUAPI_EXOP_ERR_FSMO_NOT_OWNER = 0x00000003,
276 DRSUAPI_EXOP_ERR_UPDATE_ERR = 0x00000004,
277 DRSUAPI_EXOP_ERR_EXCEPTION = 0x00000005,
278 DRSUAPI_EXOP_ERR_UNKNOWN_CALLER = 0x00000006,
279 DRSUAPI_EXOP_ERR_RID_ALLOC = 0x00000007,
280 DRSUAPI_EXOP_ERR_FSMO_OWNER_DELETED = 0x00000008,
281 DRSUAPI_EXOP_ERR_FMSO_PENDING_OP = 0x00000009,
282 DRSUAPI_EXOP_ERR_MISMATCH = 0x0000000A,
283 DRSUAPI_EXOP_ERR_COULDNT_CONTACT = 0x0000000B,
284 DRSUAPI_EXOP_ERR_FSMO_REFUSING_ROLES = 0x0000000C,
285 DRSUAPI_EXOP_ERR_DIR_ERROR = 0x0000000D,
286 DRSUAPI_EXOP_ERR_FSMO_MISSING_SETTINGS = 0x0000000E,
287 DRSUAPI_EXOP_ERR_ACCESS_DENIED = 0x0000000F,
288 DRSUAPI_EXOP_ERR_PARAM_ERROR = 0x00000010
289 } drsuapi_DsExtendedError;
292 GUID destination_dsa_guid;
293 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
294 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
295 drsuapi_DsReplicaHighWaterMark highwatermark;
296 drsuapi_DsReplicaCursorCtrEx *uptodateness_vector;
297 drsuapi_DrsOptions replica_flags;
298 uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */
299 uint32 max_ndr_size; /* w2k3 seems to ignore this */
300 drsuapi_DsExtendedOperation extended_op;
302 } drsuapi_DsGetNCChangesRequest5;
305 * In DRSUAPI all attributes with syntax 2.5.5.2
306 * are identified by uint32 values
308 * the following table shows the mapping used between the two representations
309 * e.g. - objectClass 'nTDSDSA' has governsID: 1.2.840.113556.1.5.7000.47
310 * and a UINT32-ID of '0x0017002F'.
311 * - so the OID 1.2.840.113556.1.5.7000.47 is splitted into a
312 * OID-prefix: 1.2.840.113556.1.5.7000
313 * and a value: 47 => 0x2F
314 * - the mapping table gives a UINT32-prefix: 0x00170000
315 * - and the UINT32-ID is 0x0017002F = 0x00170000 | 0x2F
317 * This prefix mapping table is replied in the drsuapi_DsReplicaOIDMapping_Ctr
318 * array. The following are the default mappings of w2k3
320 * OID-prefix => UINT32-Id prefix
322 * 2.5.4.* => 0x00000000 (standard attributes RFC2256 core.schema)
323 * 2.5.6.* => 0x00010000 (standard object classes RFC2256 core.schema)
324 * 1.2.840.113556.1.2.* => 0x00020000
325 * 1.2.840.113556.1.3.* => 0x00030000
326 * 2.5.5.* => 0x00080000 (attributeSyntax OID's)
327 * 1.2.840.113556.1.4.* => 0x00090000
328 * 1.2.840.113556.1.5.* => 0x000A0000
329 * 2.16.840.1.113730.3.* => 0x00140000
330 * 0.9.2342.19200300.100.1.* => 0x00150000
331 * 2.16.840.1.113730.3.1.* => 0x00160000
332 * 1.2.840.113556.1.5.7000.* => 0x00170000
333 * 2.5.21.* => 0x00180000 (attrs for SubSchema)
334 * 2.5.18.* => 0x00190000 (createTimeStamp,modifyTimeStamp, SubSchema)
335 * 2.5.20.* => 0x001A0000
336 * 1.3.6.1.4.1.1466.101.119.* => 0x001B0000 (dynamicObject, entryTTL)
337 * 2.16.840.1.113730.3.2.* => 0x001C0000
338 * 1.3.6.1.4.1.250.1.* => 0x001D0000
339 * 1.2.840.113549.1.9.* => 0x001E0000 (unstructuredAddress,unstructuredName)
340 * 0.9.2342.19200300.100.4.* => 0x001F0000
342 * Here's a list of used 'attributeSyntax' OID's
344 * 2.5.5.1 => Object(DS-DN) string
345 * struct drsuapi_DsObjectIdentifier3
347 * 2.5.5.2 => OID-string
348 * => all values are represented as uint32 values in drsuapi
349 * => governsID, attributeID and attributeSyntax returned as OID-Strings in LDAP
350 * => mayContain, mustContain and all other attributes with 2.5.5.2 syntax
351 * are returned as attribute names
353 * 2.5.5.4 => String(Teletex) case-insensitive string with teletex charset
355 * 2.5.5.5 => String(IA5) case-sensitive string
357 * 2.5.5.6 => String(Numeric)
358 * => eg. internationalISDNNumber
360 * 2.5.5.7 => Object(DN-Binary) B:<byte count>:<bytes>:<object DN>
361 * => e.g. wellKnownObjects
367 * 2.5.5.10 => DATA_BLOB
370 * 2.5.5.11 => LDAP timestring
373 * 2.5.5.12 => String(Unicode) case-insensitive string
374 * => 'standard strings'
376 * 2.5.5.13 => Object(Presentation-Address) string
377 * => used in objectClass applicationEntity
379 * 2.5.5.14 => Object(DN-String) S:<char count>:<string>:<object DN>
382 * 2.5.5.15 => ntSecurityDescriptor
386 * 2.5.5.17 => dom_sid
388 typedef [noprint] struct {
389 [range(0,10000)] uint32 length;
390 [size_is(length)] uint8 *binary_oid; /* partial-binary-OID encoded with asn1_write_partial_OID_String() */
391 } drsuapi_DsReplicaOID;
395 drsuapi_DsReplicaOID oid;
396 } drsuapi_DsReplicaOIDMapping;
398 typedef [public] struct {
399 [range(0,0x100000)] uint32 num_mappings;
400 [size_is(num_mappings)] drsuapi_DsReplicaOIDMapping *mappings;
401 } drsuapi_DsReplicaOIDMapping_Ctr;
403 typedef [flag(NDR_PAHEX),v1_enum] enum {
404 DRSUAPI_OBJECTCLASS_top = 0x00010000,
405 DRSUAPI_OBJECTCLASS_classSchema = 0x0003000d,
406 DRSUAPI_OBJECTCLASS_attributeSchema = 0x0003000e
407 } drsuapi_DsObjectClassId;
409 typedef [flag(NDR_PAHEX),v1_enum,public] enum {
410 DRSUAPI_ATTRIBUTE_objectClass = 0x00000000,
411 DRSUAPI_ATTRIBUTE_cn = 0x00000003,
412 DRSUAPI_ATTRIBUTE_description = 0x0000000d,
413 DRSUAPI_ATTRIBUTE_member = 0x0000001f,
414 DRSUAPI_ATTRIBUTE_instanceType = 0x00020001,
415 DRSUAPI_ATTRIBUTE_whenCreated = 0x00020002,
416 DRSUAPI_ATTRIBUTE_possSuperiors = 0x00020008,
417 DRSUAPI_ATTRIBUTE_hasMasterNCs = 0x0002000e,
418 DRSUAPI_ATTRIBUTE_subClassOf = 0x00020015,
419 DRSUAPI_ATTRIBUTE_governsID = 0x00020016,
420 DRSUAPI_ATTRIBUTE_mustContain = 0x00020018,
421 DRSUAPI_ATTRIBUTE_mayContain = 0x00020019,
422 DRSUAPI_ATTRIBUTE_rDNAttId = 0x0002001A,
423 DRSUAPI_ATTRIBUTE_attributeID = 0x0002001e,
424 DRSUAPI_ATTRIBUTE_attributeSyntax = 0x00020020,
425 DRSUAPI_ATTRIBUTE_isSingleValued = 0x00020021,
426 DRSUAPI_ATTRIBUTE_rangeLower = 0x00020022,
427 DRSUAPI_ATTRIBUTE_rangeUpper = 0x00020023,
428 DRSUAPI_ATTRIBUTE_dMDLocation = 0x00020024,
429 DRSUAPI_ATTRIBUTE_objectVersion = 0x0002004c,
430 DRSUAPI_ATTRIBUTE_invocationId = 0x00020073,
431 DRSUAPI_ATTRIBUTE_showInAdvancedViewOnly = 0x000200a9,
432 DRSUAPI_ATTRIBUTE_adminDisplayName = 0x000200c2,
433 DRSUAPI_ATTRIBUTE_adminDescription = 0x000200e2,
434 DRSUAPI_ATTRIBUTE_oMSyntax = 0x000200e7,
435 DRSUAPI_ATTRIBUTE_ntSecurityDescriptor = 0x00020119,
436 DRSUAPI_ATTRIBUTE_searchFlags = 0x0002014e,
437 DRSUAPI_ATTRIBUTE_auxiliaryClass = 0x0002015f,
438 DRSUAPI_ATTRIBUTE_lDAPDisplayName = 0x000201cc,
439 DRSUAPI_ATTRIBUTE_name = 0x00090001,
440 DRSUAPI_ATTRIBUTE_userAccountControl = 0x00090008,
441 DRSUAPI_ATTRIBUTE_currentValue = 0x0009001b,
442 DRSUAPI_ATTRIBUTE_homeDirectory = 0x0009002c,
443 DRSUAPI_ATTRIBUTE_homeDrive = 0x0009002d,
444 DRSUAPI_ATTRIBUTE_scriptPath = 0x0009003e,
445 DRSUAPI_ATTRIBUTE_profilePath = 0x0009008b,
446 DRSUAPI_ATTRIBUTE_objectSid = 0x00090092,
447 DRSUAPI_ATTRIBUTE_schemaIDGUID = 0x00090094,
448 DRSUAPI_ATTRIBUTE_dBCSPwd = 0x00090037,/* lmPwdHash */
449 DRSUAPI_ATTRIBUTE_logonHours = 0x00090040,
450 DRSUAPI_ATTRIBUTE_userWorkstations = 0x00090056,
451 DRSUAPI_ATTRIBUTE_unicodePwd = 0x0009005a,/* ntPwdHash */
452 DRSUAPI_ATTRIBUTE_ntPwdHistory = 0x0009005e,
453 DRSUAPI_ATTRIBUTE_priorValue = 0x00090064,
454 DRSUAPI_ATTRIBUTE_supplementalCredentials = 0x0009007d,
455 DRSUAPI_ATTRIBUTE_trustAuthIncoming = 0x00090081,
456 DRSUAPI_ATTRIBUTE_trustAuthOutgoing = 0x00090087,
457 DRSUAPI_ATTRIBUTE_lmPwdHistory = 0x000900a0,
458 DRSUAPI_ATTRIBUTE_systemPossSuperiors = 0x000900c3,
459 DRSUAPI_ATTRIBUTE_systemMayContain = 0x000900c4,
460 DRSUAPI_ATTRIBUTE_systemMustContain = 0x000900c5,
461 DRSUAPI_ATTRIBUTE_systemAuxiliaryClass = 0x000900c6,
462 DRSUAPI_ATTRIBUTE_sAMAccountName = 0x000900dd,
463 DRSUAPI_ATTRIBUTE_sAMAccountType = 0x0009012e,
464 DRSUAPI_ATTRIBUTE_fSMORoleOwner = 0x00090171,
465 DRSUAPI_ATTRIBUTE_systemFlags = 0x00090177,
466 DRSUAPI_ATTRIBUTE_serverReference = 0x00090203,
467 DRSUAPI_ATTRIBUTE_serverReferenceBL = 0x00090204,
468 DRSUAPI_ATTRIBUTE_initialAuthIncoming = 0x0009021b,
469 DRSUAPI_ATTRIBUTE_initialAuthOutgoing = 0x0009021c,
470 DRSUAPI_ATTRIBUTE_wellKnownObjects = 0x0009026a,
471 DRSUAPI_ATTRIBUTE_dNSHostName = 0x0009026b,
472 DRSUAPI_ATTRIBUTE_isMemberOfPartialAttributeSet = 0x0009027f,
473 DRSUAPI_ATTRIBUTE_userPrincipalName = 0x00090290,
474 DRSUAPI_ATTRIBUTE_groupType = 0x000902ee,
475 DRSUAPI_ATTRIBUTE_servicePrincipalName = 0x00090303,
476 DRSUAPI_ATTRIBUTE_objectCategory = 0x0009030e,
477 DRSUAPI_ATTRIBUTE_gPLink = 0x0009037b,
478 DRSUAPI_ATTRIBUTE_transportAddressAttribute = 0x0009037f,
479 DRSUAPI_ATTRIBUTE_msDS_Behavior_Version = 0x000905b3,
480 DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber = 0x000906f6,
481 DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs = 0x0009071c,
482 DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs = 0x0009072c,
483 DRSUAPI_ATTRIBUTE_NONE = 0xFFFFFFFF
484 } drsuapi_DsAttributeId;
487 [value(1)] uint32 version;
488 [value(0)] uint32 reserved1;
489 [range(1,0x100000)] uint32 num_attids;
490 [size_is(num_attids)] drsuapi_DsAttributeId attids[];
491 } drsuapi_DsPartialAttributeSet;
494 GUID destination_dsa_guid;
495 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
496 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
497 drsuapi_DsReplicaHighWaterMark highwatermark;
498 drsuapi_DsReplicaCursorCtrEx *uptodateness_vector;
499 drsuapi_DrsOptions replica_flags;
500 uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */
501 uint32 max_ndr_size; /* w2k3 seems to ignore this */
502 drsuapi_DsExtendedOperation extended_op;
504 drsuapi_DsPartialAttributeSet *partial_attribute_set;
505 drsuapi_DsPartialAttributeSet *partial_attribute_set_ex;
506 drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
507 } drsuapi_DsGetNCChangesRequest8;
510 GUID destination_dsa_guid;
511 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
512 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
513 drsuapi_DsReplicaHighWaterMark highwatermark;
514 drsuapi_DsReplicaCursorCtrEx *uptodateness_vector;
515 drsuapi_DrsOptions replica_flags;
516 uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */
517 uint32 max_ndr_size; /* w2k3 seems to ignore this */
518 drsuapi_DsExtendedOperation extended_op;
520 drsuapi_DsPartialAttributeSet *partial_attribute_set;
521 drsuapi_DsPartialAttributeSet *partial_attribute_set_ex;
522 drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
524 } drsuapi_DsGetNCChangesRequest10;
526 typedef [switch_type(int32)] union {
527 [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
528 [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
529 [case(10)] drsuapi_DsGetNCChangesRequest10 req10;
530 } drsuapi_DsGetNCChangesRequest;
532 typedef [public] struct {
533 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
534 hyper highest_usn; /* updated after a full replication cycle */
535 NTTIME last_sync_success;
536 } drsuapi_DsReplicaCursor2;
539 [value(2)] uint32 version;
540 [value(0)] uint32 reserved1;
541 [range(0,0x100000)] uint32 count;
542 [value(0)] uint32 reserved2;
543 [size_is(count)] drsuapi_DsReplicaCursor2 cursors[];
544 } drsuapi_DsReplicaCursor2CtrEx;
546 /* Generic DATA_BLOB values */
548 [range(0,10485760),value(ndr_size_DATA_BLOB(0,blob,0))] uint32 __ndr_size;
550 } drsuapi_DsAttributeValue;
553 [range(0,10485760)] uint32 num_values;
554 [size_is(num_values)] drsuapi_DsAttributeValue *values;
555 } drsuapi_DsAttributeValueCtr;
557 /* DN String values */
558 typedef [public,gensize] struct {
559 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size;
560 [value(ndr_size_dom_sid28(&sid,ndr->flags))] uint32 __ndr_size_sid;
563 [value(strlen_m(dn))] uint32 __ndr_size_dn;
564 [charset(UTF16)] uint16 dn[__ndr_size_dn+1];
565 } drsuapi_DsReplicaObjectIdentifier3;
567 typedef [public] struct {
568 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size;
569 [value(ndr_size_dom_sid28(&sid,ndr->flags))] uint32 __ndr_size_sid;
572 [value(strlen_m(dn))] uint32 __ndr_size_dn;
573 [charset(UTF16)] uint16 dn[__ndr_size_dn+1];
574 [value(binary.length + 4)] uint32 __ndr_size_binary;
575 [flag(NDR_REMAINING)] DATA_BLOB binary;
576 } drsuapi_DsReplicaObjectIdentifier3Binary;
578 typedef [public] struct {
579 drsuapi_DsAttributeId attid;
580 drsuapi_DsAttributeValueCtr value_ctr;
581 } drsuapi_DsReplicaAttribute;
584 [range(0,1048576)] uint32 num_attributes;
585 [size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes;
586 } drsuapi_DsReplicaAttributeCtr;
588 typedef [public] bitmap {
589 DRSUAPI_DS_REPLICA_OBJECT_FROM_MASTER = 0x00000001,
590 DRSUAPI_DS_REPLICA_OBJECT_DYNAMIC = 0x00000002,
591 DRSUAPI_DS_REPLICA_OBJECT_REMOTE_MODIFY = 0x00010000
592 } drsuapi_DsReplicaObjectFlags;
594 typedef [public] struct {
595 drsuapi_DsReplicaObjectIdentifier *identifier;
596 drsuapi_DsReplicaObjectFlags flags;
597 drsuapi_DsReplicaAttributeCtr attribute_ctr;
598 } drsuapi_DsReplicaObject;
602 NTTIME_1sec originating_change_time;
603 GUID originating_invocation_id;
604 hyper originating_usn;
605 } drsuapi_DsReplicaMetaData;
607 typedef [public] struct {
608 [range(0,1048576)] uint32 count;
609 [size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
610 } drsuapi_DsReplicaMetaDataCtr;
612 typedef [public,noprint] struct {
613 drsuapi_DsReplicaObjectListItemEx *next_object;
614 drsuapi_DsReplicaObject object;
615 boolean32 is_nc_prefix;
616 GUID *parent_object_guid;
617 drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
618 } drsuapi_DsReplicaObjectListItemEx;
620 typedef [public,gensize] struct {
621 GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */
622 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
623 drsuapi_DsReplicaObjectIdentifier *naming_context;
624 drsuapi_DsReplicaHighWaterMark old_highwatermark;
625 drsuapi_DsReplicaHighWaterMark new_highwatermark;
626 drsuapi_DsReplicaCursorCtrEx *uptodateness_vector;
627 drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
628 drsuapi_DsExtendedError extended_ret; /* w2k sends the nc_object_count value here */
630 /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
631 [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->iconv_convenience,ndr->flags)+55)] uint32 __ndr_size;
632 drsuapi_DsReplicaObjectListItemEx *first_object;
634 } drsuapi_DsGetNCChangesCtr1;
637 * if the DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE flag
638 * isn't there it means the value is deleted
640 typedef [public] bitmap {
641 DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE = 0x00000001
642 } drsuapi_DsLinkedAttributeFlags;
644 typedef [public] struct {
645 drsuapi_DsReplicaObjectIdentifier *identifier;
646 drsuapi_DsAttributeId attid;
647 drsuapi_DsAttributeValue value;
648 drsuapi_DsLinkedAttributeFlags flags;
649 NTTIME_1sec originating_add_time;
650 drsuapi_DsReplicaMetaData meta_data;
651 } drsuapi_DsReplicaLinkedAttribute;
653 /* [MS-DRSR] section 4.1.10.2.11 DRS_MSG_GETCHGREPLY_V6 */
654 typedef [public,gensize] struct {
655 GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */
656 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
657 drsuapi_DsReplicaObjectIdentifier *naming_context;
658 drsuapi_DsReplicaHighWaterMark old_highwatermark;
659 drsuapi_DsReplicaHighWaterMark new_highwatermark;
660 drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector;
661 drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
662 drsuapi_DsExtendedError extended_ret;
664 /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
665 [value(ndr_size_drsuapi_DsGetNCChangesCtr6(r,ndr->iconv_convenience,ndr->flags)+55)] uint32 __ndr_size;
666 drsuapi_DsReplicaObjectListItemEx *first_object;
668 uint32 nc_object_count; /* estimated amount of objects in the whole NC */
669 uint32 nc_linked_attributes_count; /* estimated amount of linked values in the whole NC */
670 [range(0,1048576)] uint32 linked_attributes_count;
671 [size_is(linked_attributes_count)] drsuapi_DsReplicaLinkedAttribute *linked_attributes;
673 } drsuapi_DsGetNCChangesCtr6;
675 typedef [public] struct {
676 [subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr1 ctr1;
677 } drsuapi_DsGetNCChangesCtr1TS;
679 typedef [public] struct {
680 [subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr6 ctr6;
681 } drsuapi_DsGetNCChangesCtr6TS;
683 typedef [nopush] struct {
684 uint32 decompressed_length;
685 uint32 compressed_length;
686 [subcontext(4),subcontext_size(compressed_length),
687 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
688 drsuapi_DsGetNCChangesCtr1TS *ts;
689 } drsuapi_DsGetNCChangesMSZIPCtr1;
691 typedef [nopush] struct {
692 uint32 decompressed_length;
693 uint32 compressed_length;
694 [subcontext(4),subcontext_size(compressed_length),
695 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
696 drsuapi_DsGetNCChangesCtr6TS *ts;
697 } drsuapi_DsGetNCChangesMSZIPCtr6;
699 typedef [nopush] struct {
700 uint32 decompressed_length;
701 uint32 compressed_length;
702 [subcontext(4),subcontext_size(compressed_length),
703 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)]
704 drsuapi_DsGetNCChangesCtr1TS *ts;
705 } drsuapi_DsGetNCChangesXPRESSCtr1;
707 typedef [nopush] struct {
708 uint32 decompressed_length;
709 uint32 compressed_length;
710 [subcontext(4),subcontext_size(compressed_length),
711 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)]
712 drsuapi_DsGetNCChangesCtr6TS *ts;
713 } drsuapi_DsGetNCChangesXPRESSCtr6;
715 typedef [enum16bit] enum {
716 DRSUAPI_COMPRESSION_TYPE_MSZIP = 2,
717 DRSUAPI_COMPRESSION_TYPE_XPRESS = 3
718 } drsuapi_DsGetNCChangesCompressionType;
720 typedef [nodiscriminant,flag(NDR_PAHEX)] union {
721 [case(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesMSZIPCtr1 mszip1;
722 [case(6|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesMSZIPCtr6 mszip6;
723 [case(1|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))] drsuapi_DsGetNCChangesXPRESSCtr1 xpress1;
724 [case(6|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))] drsuapi_DsGetNCChangesXPRESSCtr6 xpress6;
725 } drsuapi_DsGetNCChangesCompressedCtr;
728 drsuapi_DsGetNCChangesMSZIPCtr1 mszip1;
729 } drsuapi_DsGetNCChangesCtr2;
732 [range(0,6)] int32 level;
733 [range(2,3)] drsuapi_DsGetNCChangesCompressionType type;
734 [switch_is(level | (type<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr;
735 } drsuapi_DsGetNCChangesCtr7;
737 typedef [switch_type(int32)] union {
738 [case(1)] drsuapi_DsGetNCChangesCtr1 ctr1;
739 [case(2)] drsuapi_DsGetNCChangesCtr2 ctr2;
740 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6;
741 [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7;
742 } drsuapi_DsGetNCChangesCtr;
744 WERROR drsuapi_DsGetNCChanges(
745 [in] policy_handle *bind_handle,
747 [in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req,
748 [out,ref] int32 *level_out,
749 [out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr
754 /* [MS-DRSR] 4.1.26 */
757 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
758 [ref,charset(DOS),string] uint8 *dest_dsa_dns_name;
760 drsuapi_DrsOptions options;
761 } drsuapi_DsReplicaUpdateRefsRequest1;
763 typedef [switch_type(int32)] union {
764 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1;
765 } drsuapi_DsReplicaUpdateRefsRequest;
767 WERROR drsuapi_DsReplicaUpdateRefs(
768 [in] policy_handle *bind_handle,
770 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req
777 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
778 [charset(UTF16),string] uint16 *source_dsa_address;
780 drsuapi_DrsOptions options;
781 } drsuapi_DsReplicaAddRequest1;
784 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
785 drsuapi_DsReplicaObjectIdentifier *source_dsa_dn;
786 drsuapi_DsReplicaObjectIdentifier *transport_dn;
787 [charset(UTF16),string] uint16 *source_dsa_address;
789 drsuapi_DrsOptions options;
790 } drsuapi_DsReplicaAddRequest2;
792 typedef [switch_type(int32)] union {
793 [case(1)] drsuapi_DsReplicaAddRequest1 req1;
794 [case(2)] drsuapi_DsReplicaAddRequest2 req2;
795 } drsuapi_DsReplicaAddRequest;
797 WERROR drsuapi_DsReplicaAdd(
798 [in] policy_handle *bind_handle,
800 [in,switch_is(level)] drsuapi_DsReplicaAddRequest req
807 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
808 [charset(UTF16),string] uint16 *source_dsa_address;
809 drsuapi_DrsOptions options;
810 } drsuapi_DsReplicaDelRequest1;
812 typedef [switch_type(int32)] union {
813 [case(1)] drsuapi_DsReplicaDelRequest1 req1;
814 } drsuapi_DsReplicaDelRequest;
816 WERROR drsuapi_DsReplicaDel(
817 [in] policy_handle *bind_handle,
819 [in,switch_is(level)] drsuapi_DsReplicaDelRequest req
826 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
828 [charset(UTF16),string] uint16 *source_dra_address;
830 uint32 replica_flags;
831 uint32 modify_fields;
832 drsuapi_DrsOptions options;
833 } drsuapi_DsReplicaModRequest1;
835 typedef [switch_type(int32)] union {
836 [case(1)] drsuapi_DsReplicaModRequest1 req1;
837 } drsuapi_DsReplicaModRequest;
839 WERROR drsuapi_DsReplicaMod(
840 [in] policy_handle *bind_handle,
842 [in,switch_is(level)] drsuapi_DsReplicaModRequest req
847 [todo] WERROR DRSUAPI_VERIFY_NAMES();
852 /* how are type 4 and 7 different from 2 and 3 ? */
853 typedef [v1_enum] enum {
854 DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_AND_DOMAIN_GROUPS = 1,
855 DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS = 2,
856 DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS = 3,
857 DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS2 = 4,
858 DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_GROUPS = 5,
859 DRSUAPI_DS_MEMBERSHIP_TYPE_GROUPMEMBERS = 6,
860 DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS2 = 7
861 } drsuapi_DsMembershipType;
865 [range(0,10000)] uint32 num_memberships;
866 [range(0,10000)] uint32 num_sids;
867 [size_is(num_memberships)] drsuapi_DsReplicaObjectIdentifier **info_array;
868 [size_is(num_memberships)] samr_GroupAttrs *group_attrs;
869 [size_is(num_sids)] dom_sid28 **sids;
870 } drsuapi_DsGetMembershipsCtr1;
872 typedef [switch_type(int32)] union {
873 [case(1)] drsuapi_DsGetMembershipsCtr1 ctr1;
874 } drsuapi_DsGetMembershipsCtr;
876 const int DRSUAPI_DS_MEMBERSHIP_FLAG_GROUP_ATTR = 0x1;
879 [range(1,10000)] uint32 count;
880 [size_is(count)] drsuapi_DsReplicaObjectIdentifier **info_array;
882 drsuapi_DsMembershipType type;
883 drsuapi_DsReplicaObjectIdentifier *domain;
884 } drsuapi_DsGetMembershipsRequest1;
886 typedef [switch_type(int32)] union {
887 [case(1)] drsuapi_DsGetMembershipsRequest1 req1;
888 } drsuapi_DsGetMembershipsRequest;
890 [todo] WERROR drsuapi_DsGetMemberships(
891 [in] policy_handle *bind_handle,
893 [in,ref] [switch_is(level)] drsuapi_DsGetMembershipsRequest *req,
894 [out,ref] int32 *level_out,
895 [out,ref] [switch_is(*level_out)] drsuapi_DsGetMembershipsCtr *ctr
900 [todo] WERROR DRSUAPI_INTER_DOMAIN_MOVE();
907 [range(0,0x00A00000)] uint32 length;
908 [size_is(length)] uint8 *data;
909 } drsuapi_DsGetNT4ChangeLogRequest1;
911 typedef [switch_type(uint32)] union {
912 [case(1)] drsuapi_DsGetNT4ChangeLogRequest1 req1;
913 } drsuapi_DsGetNT4ChangeLogRequest;
916 [range(0,0x00A00000)] uint32 length1;
917 [range(0,0x00A00000)] uint32 length2;
925 [size_is(length1)] uint8 *data1;
926 [size_is(length2)] uint8 *data2;
927 } drsuapi_DsGetNT4ChangeLogInfo1;
929 typedef [switch_type(uint32)] union {
930 [case(1)] drsuapi_DsGetNT4ChangeLogInfo1 info1;
931 } drsuapi_DsGetNT4ChangeLogInfo;
933 [todo] WERROR drsuapi_DsGetNT4ChangeLog(
934 [in] policy_handle *bind_handle,
936 [in,ref] [switch_is(level)] drsuapi_DsGetNT4ChangeLogRequest *req,
937 [out,ref] uint32 *level_out,
938 [out,ref] [switch_is(*level_out)] drsuapi_DsGetNT4ChangeLogInfo *info
943 typedef [v1_enum] enum {
944 DRSUAPI_DS_NAME_STATUS_OK = 0,
945 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1,
946 DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2,
947 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3,
948 DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4,
949 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5,
950 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6,
951 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7
952 } drsuapi_DsNameStatus;
954 typedef [v1_enum] enum {
955 DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0,
956 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,
957 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2,
958 DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4,
959 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8
960 } drsuapi_DsNameFlags;
962 typedef [v1_enum] enum {
963 DRSUAPI_DS_NAME_FORMAT_UNKNOWN = 0,
964 DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 1,
965 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 2,
966 DRSUAPI_DS_NAME_FORMAT_DISPLAY = 3,
967 DRSUAPI_DS_NAME_FORMAT_GUID = 6,
968 DRSUAPI_DS_NAME_FORMAT_CANONICAL = 7,
969 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 8,
970 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 9,
971 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 10,
972 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 11,
973 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 12
974 } drsuapi_DsNameFormat;
977 [string,charset(UTF16)] uint16 *str;
978 } drsuapi_DsNameString;
981 uint32 codepage; /* 0x000004e4 - 1252 is german codepage*/
982 uint32 language; /* 0x00000407 - german language ID*/
983 drsuapi_DsNameFlags format_flags;
984 drsuapi_DsNameFormat format_offered;
985 drsuapi_DsNameFormat format_desired;
986 [range(1,10000)] uint32 count;
987 [size_is(count)] drsuapi_DsNameString *names;
988 } drsuapi_DsNameRequest1;
990 typedef [switch_type(int32)] union {
991 [case(1)] drsuapi_DsNameRequest1 req1;
992 } drsuapi_DsNameRequest;
995 drsuapi_DsNameStatus status;
996 [charset(UTF16),string] uint16 *dns_domain_name;
997 [charset(UTF16),string] uint16 *result_name;
998 } drsuapi_DsNameInfo1;
1002 [size_is(count)] drsuapi_DsNameInfo1 *array;
1003 } drsuapi_DsNameCtr1;
1005 typedef [switch_type(int32)] union {
1006 [case(1)] drsuapi_DsNameCtr1 *ctr1;
1007 } drsuapi_DsNameCtr;
1009 WERROR drsuapi_DsCrackNames(
1010 [in] policy_handle *bind_handle,
1012 [in,ref,switch_is(level)] drsuapi_DsNameRequest *req,
1013 [out,ref] int32 *level_out,
1014 [out,ref,switch_is(*level_out)] drsuapi_DsNameCtr *ctr
1019 typedef [v1_enum] enum {
1020 DRSUAPI_DS_SPN_OPERATION_ADD = 0,
1021 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
1022 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
1023 } drsuapi_DsSpnOperation;
1026 drsuapi_DsSpnOperation operation;
1028 [charset(UTF16),string] uint16 *object_dn;
1029 [range(0,10000)] uint32 count;
1030 [size_is(count)] drsuapi_DsNameString *spn_names;
1031 } drsuapi_DsWriteAccountSpnRequest1;
1033 typedef [switch_type(int32)] union {
1034 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
1035 } drsuapi_DsWriteAccountSpnRequest;
1039 } drsuapi_DsWriteAccountSpnResult1;
1041 typedef [switch_type(int32)] union {
1042 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
1043 } drsuapi_DsWriteAccountSpnResult;
1045 WERROR drsuapi_DsWriteAccountSpn(
1046 [in] policy_handle *bind_handle,
1048 [in,ref,switch_is(level)] drsuapi_DsWriteAccountSpnRequest *req,
1049 [out,ref] int32 *level_out,
1050 [out,ref,switch_is(*level_out)] drsuapi_DsWriteAccountSpnResult *res
1056 [charset(UTF16),string] uint16 *server_dn;
1057 [charset(UTF16),string] uint16 *domain_dn;
1059 } drsuapi_DsRemoveDSServerRequest1;
1061 typedef [switch_type(int32)] union {
1062 [case(1)] drsuapi_DsRemoveDSServerRequest1 req1;
1063 } drsuapi_DsRemoveDSServerRequest;
1066 boolean32 last_dc_in_domain;
1067 } drsuapi_DsRemoveDSServerResult1;
1069 typedef [switch_type(int32)] union {
1070 [case(1)] drsuapi_DsRemoveDSServerResult1 res1;
1071 } drsuapi_DsRemoveDSServerResult;
1073 WERROR drsuapi_DsRemoveDSServer(
1074 [in] policy_handle *bind_handle,
1076 [in,ref,switch_is(level)] drsuapi_DsRemoveDSServerRequest *req,
1077 [out,ref] int32 *level_out,
1078 [out,ref,switch_is(*level_out)] drsuapi_DsRemoveDSServerResult *res
1083 [todo] WERROR DRSUAPI_REMOVE_DS_DOMAIN();
1088 [charset(UTF16),string] uint16 *domain_name; /* netbios or dns */
1089 int32 level; /* specifies the switch level for the request */
1090 } drsuapi_DsGetDCInfoRequest1;
1092 typedef [switch_type(int32)] union {
1093 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
1094 } drsuapi_DsGetDCInfoRequest;
1097 [charset(UTF16),string] uint16 *netbios_name;
1098 [charset(UTF16),string] uint16 *dns_name;
1099 [charset(UTF16),string] uint16 *site_name;
1100 [charset(UTF16),string] uint16 *computer_dn;
1101 [charset(UTF16),string] uint16 *server_dn;
1104 } drsuapi_DsGetDCInfo1;
1107 [range(0,10000)] uint32 count;
1108 [size_is(count)] drsuapi_DsGetDCInfo1 *array;
1109 } drsuapi_DsGetDCInfoCtr1;
1112 [charset(UTF16),string] uint16 *netbios_name;
1113 [charset(UTF16),string] uint16 *dns_name;
1114 [charset(UTF16),string] uint16 *site_name;
1115 [charset(UTF16),string] uint16 *site_dn;
1116 [charset(UTF16),string] uint16 *computer_dn;
1117 [charset(UTF16),string] uint16 *server_dn;
1118 [charset(UTF16),string] uint16 *ntds_dn;
1126 } drsuapi_DsGetDCInfo2;
1129 [range(0,10000)] uint32 count;
1130 [size_is(count)] drsuapi_DsGetDCInfo2 *array;
1131 } drsuapi_DsGetDCInfoCtr2;
1134 [charset(UTF16),string] uint16 *netbios_name;
1135 [charset(UTF16),string] uint16 *dns_name;
1136 [charset(UTF16),string] uint16 *site_name;
1137 [charset(UTF16),string] uint16 *site_dn;
1138 [charset(UTF16),string] uint16 *computer_dn;
1139 [charset(UTF16),string] uint16 *server_dn;
1140 [charset(UTF16),string] uint16 *ntds_dn;
1149 } drsuapi_DsGetDCInfo3;
1152 [range(0,10000)] uint32 count;
1153 [size_is(count)] drsuapi_DsGetDCInfo3 *array;
1154 } drsuapi_DsGetDCInfoCtr3;
1157 * this represents an active connection to the
1158 * Directory System Agent (DSA)
1159 * this can be via LDAP or DRSUAPI
1162 [flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address;
1164 uint32 connection_time; /* in seconds */
1169 * client_account can be the following:
1170 * "W2K3\Administrator"
1171 * "Administrator@W2K3"
1172 * "cn=Administrator,cn=Users,DC=w2k3,DC=vmnet1,DC=vm,DC=base"
1176 [charset(UTF16),string] uint16 *client_account;
1177 } drsuapi_DsGetDCConnection01;
1180 [range(0,10000)] uint32 count;
1181 [size_is(count)] drsuapi_DsGetDCConnection01 *array;
1182 } drsuapi_DsGetDCConnectionCtr01;
1184 typedef [v1_enum] enum {
1185 DRSUAPI_DC_INFO_CTR_1 = 1,
1186 DRSUAPI_DC_INFO_CTR_2 = 2,
1187 DRSUAPI_DC_INFO_CTR_3 = 3,
1188 DRSUAPI_DC_CONNECTION_CTR_01 = -1
1189 } drsuapi_DsGetDCInfoCtrLevels;
1191 typedef [switch_type(int32)] union {
1192 [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1;
1193 [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2;
1194 [case(DRSUAPI_DC_INFO_CTR_3)] drsuapi_DsGetDCInfoCtr3 ctr3;
1195 [case(DRSUAPI_DC_CONNECTION_CTR_01)] drsuapi_DsGetDCConnectionCtr01 ctr01;
1196 } drsuapi_DsGetDCInfoCtr;
1198 WERROR drsuapi_DsGetDomainControllerInfo(
1199 [in] policy_handle *bind_handle,
1201 [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req,
1202 [out,ref] int32 *level_out,
1203 [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr
1208 typedef [public,noprint] struct {
1209 drsuapi_DsReplicaObjectListItem *next_object;
1210 drsuapi_DsReplicaObject object;
1211 } drsuapi_DsReplicaObjectListItem;
1214 * The DsAddEntry() call which creates a nTDSDSA object,
1215 * also adds a servicePrincipalName in the following form
1216 * to the computer account of the new domain controller
1217 * referenced by the "serverReferenece" attribute.
1219 * E3514235-4B06-11D1-AB04-00C04FC2DCD2/<new-ntdsdsa-object-guid-as-string>/<domain-dns-name>
1221 * also note that the "serverReference" isn't added to the new object!
1223 const char *DRSUAPI_NTDSDSA_KRB5_SERVICE_GUID = "E3514235-4B06-11D1-AB04-00C04FC2DCD2";
1226 * please note the the current idl
1227 * for DsAddEntry does only parse
1228 * what I saw between 2 w2k3 boxes
1229 * in my dssync experiments I got some other replies
1230 * so all I want to say is that this is very incomplete yet...
1234 drsuapi_DsReplicaObjectListItem first_object;
1235 } drsuapi_DsAddEntryRequest2;
1237 typedef [switch_type(int32)] union {
1238 [case(2)] drsuapi_DsAddEntryRequest2 req2;
1239 } drsuapi_DsAddEntryRequest;
1246 } drsuapi_DsAddEntryErrorInfoX;
1249 [range(0,10485760)] uint32 size;
1250 [size_is(size)] uint8 *data;
1251 } drsuapi_DsAddEntryExtraErrorBuffer;
1254 drsuapi_DsAddEntryErrorInfoX error;
1255 drsuapi_DsAttributeId attid;
1257 drsuapi_DsAddEntryExtraErrorBuffer buffer;
1258 } drsuapi_DsAddEntryExtraError1;
1260 typedef /*[noprint]*/ struct {
1261 drsuapi_DsAddEntryErrorListItem1 *next;
1262 drsuapi_DsAddEntryExtraError1 error;
1263 } drsuapi_DsAddEntryErrorListItem1;
1266 drsuapi_DsReplicaObjectIdentifier *id;
1268 drsuapi_DsAddEntryErrorListItem1 first;
1269 } drsuapi_DsAddEntryErrorInfo1;
1271 typedef [switch_type(uint32)] union {
1272 [case(1)] drsuapi_DsAddEntryErrorInfo1 error1;
1273 /* [case(2)] drsuapi_DsAddEntryErrorInfo2 error2;
1274 [case(3)] drsuapi_DsAddEntryErrorInfo3 error3;
1275 */ [case(4)] drsuapi_DsAddEntryErrorInfoX errorX;
1276 [case(5)] drsuapi_DsAddEntryErrorInfoX errorX;
1277 [case(6)] drsuapi_DsAddEntryErrorInfoX errorX;
1278 [case(7)] drsuapi_DsAddEntryErrorInfoX errorX;
1279 } drsuapi_DsAddEntryErrorInfo;
1284 [switch_is(level)] drsuapi_DsAddEntryErrorInfo *info;
1285 } drsuapi_DsAddEntryError1;
1287 typedef [switch_type(uint32)] union {
1288 [case(1)] drsuapi_DsAddEntryError1 info1;
1289 } drsuapi_DsAddEntryError;
1294 } drsuapi_DsReplicaObjectIdentifier2;
1297 drsuapi_DsReplicaObjectIdentifier *id;
1299 drsuapi_DsAddEntryErrorInfoX error;
1300 [range(0,10000)] uint32 count;
1301 [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects;
1302 } drsuapi_DsAddEntryCtr2;
1305 drsuapi_DsReplicaObjectIdentifier *id;
1307 [switch_is(level)] drsuapi_DsAddEntryError *error;
1308 [range(0,10000)] uint32 count;
1309 [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects;
1310 } drsuapi_DsAddEntryCtr3;
1312 typedef [switch_type(int32)] union {
1313 [case(2)] drsuapi_DsAddEntryCtr2 ctr2;
1314 [case(3)] drsuapi_DsAddEntryCtr3 ctr3;
1315 } drsuapi_DsAddEntryCtr;
1317 [public] WERROR drsuapi_DsAddEntry(
1318 [in] policy_handle *bind_handle,
1320 [in,ref,switch_is(level)] drsuapi_DsAddEntryRequest *req,
1321 [out,ref] int32 *level_out,
1322 [out,ref,switch_is(*level_out)] drsuapi_DsAddEntryCtr *ctr
1328 DRSUAPI_DS_EXECUTE_KCC_ASYNCHRONOUS_OPERATION = 0x00000001,
1329 DRSUAPI_DS_EXECUTE_KCC_DAMPED = 0x00000002
1330 } drsuapi_DsExecuteKCCFlags;
1334 drsuapi_DsExecuteKCCFlags flags;
1335 } drsuapi_DsExecuteKCC1;
1337 typedef [switch_type(uint32)] union {
1338 [case(1)] drsuapi_DsExecuteKCC1 ctr1;
1339 } drsuapi_DsExecuteKCCRequest;
1341 WERROR drsuapi_DsExecuteKCC(
1342 [in] policy_handle *bind_handle,
1344 [in, ref, switch_is(level)] drsuapi_DsExecuteKCCRequest *req
1349 typedef [v1_enum] enum {
1350 DRSUAPI_DS_REPLICA_GET_INFO = 1,
1351 DRSUAPI_DS_REPLICA_GET_INFO2 = 2
1352 } drsuapi_DsReplicaGetInfoLevel;
1354 typedef [v1_enum] enum {
1355 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0,
1356 DRSUAPI_DS_REPLICA_INFO_CURSORS = 1,
1357 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2,
1358 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3,
1359 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4,
1360 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5,
1361 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6,
1362 DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7,
1363 DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8,
1364 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9,
1365 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10,
1366 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02 = -2,
1367 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04 = -4,
1368 DRSUAPI_DS_REPLICA_INFO_CURSORS05 = -5,
1369 DRSUAPI_DS_REPLICA_INFO_06 = -6
1370 } drsuapi_DsReplicaInfoType;
1373 drsuapi_DsReplicaInfoType info_type;
1374 [charset(UTF16),string] uint16 *object_dn;
1376 } drsuapi_DsReplicaGetInfoRequest1;
1379 drsuapi_DsReplicaInfoType info_type;
1380 [charset(UTF16),string] uint16 *object_dn;
1383 [charset(UTF16),string] uint16 *string1;
1384 [charset(UTF16),string] uint16 *string2;
1385 uint32 enumeration_context;
1386 } drsuapi_DsReplicaGetInfoRequest2;
1388 typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
1389 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1;
1390 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2;
1391 } drsuapi_DsReplicaGetInfoRequest;
1394 [charset(UTF16),string] uint16 *naming_context_dn;
1395 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
1396 [charset(UTF16),string] uint16 *source_dsa_address;
1397 [charset(UTF16),string] uint16 *transport_obj_dn;
1398 drsuapi_DrsOptions replica_flags;
1400 GUID naming_context_obj_guid;
1401 GUID source_dsa_obj_guid;
1402 GUID source_dsa_invocation_id;
1403 GUID transport_obj_guid;
1404 hyper tmp_highest_usn;
1406 NTTIME last_success;
1407 NTTIME last_attempt;
1408 WERROR result_last_attempt;
1409 uint32 consecutive_sync_failures;
1410 } drsuapi_DsReplicaNeighbour;
1415 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
1416 } drsuapi_DsReplicaNeighbourCtr;
1421 [size_is(count)] drsuapi_DsReplicaCursor array[];
1422 } drsuapi_DsReplicaCursorCtr;
1425 [charset(UTF16),string] uint16 *attribute_name;
1427 NTTIME originating_change_time;
1428 GUID originating_invocation_id;
1429 hyper originating_usn;
1431 } drsuapi_DsReplicaObjMetaData;
1436 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
1437 } drsuapi_DsReplicaObjMetaDataCtr;
1440 [charset(UTF16),string] uint16 *dsa_obj_dn;
1442 NTTIME first_failure;
1443 uint32 num_failures;
1445 } drsuapi_DsReplicaKccDsaFailure;
1450 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
1451 } drsuapi_DsReplicaKccDsaFailuresCtr;
1454 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0,
1455 DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1,
1456 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2,
1457 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3,
1458 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4
1459 } drsuapi_DsReplicaOpType;
1462 NTTIME operation_start;
1463 uint32 serial_num; /* unique till reboot */
1465 drsuapi_DsReplicaOpType operation_type;
1466 drsuapi_DrsOptions options;
1467 [charset(UTF16),string] uint16 *nc_dn;
1468 [charset(UTF16),string] uint16 *remote_dsa_obj_dn;
1469 [charset(UTF16),string] uint16 *remote_dsa_address;
1471 GUID remote_dsa_obj_guid;
1472 } drsuapi_DsReplicaOp;
1477 [size_is(count)] drsuapi_DsReplicaOp array[];
1478 } drsuapi_DsReplicaOpCtr;
1481 [charset(UTF16),string] uint16 *attribute_name;
1482 [charset(UTF16),string] uint16 *object_dn;
1483 [value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary;
1488 NTTIME originating_change_time;
1489 GUID originating_invocation_id;
1490 hyper originating_usn;
1492 } drsuapi_DsReplicaAttrValMetaData;
1496 uint32 enumeration_context;
1497 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
1498 } drsuapi_DsReplicaAttrValMetaDataCtr;
1502 uint32 enumeration_context;
1503 [size_is(count)] drsuapi_DsReplicaCursor2 array[];
1504 } drsuapi_DsReplicaCursor2Ctr;
1507 GUID source_dsa_invocation_id;
1509 NTTIME last_sync_success;
1510 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
1511 } drsuapi_DsReplicaCursor3;
1515 uint32 enumeration_context;
1516 [size_is(count)] drsuapi_DsReplicaCursor3 array[];
1517 } drsuapi_DsReplicaCursor3Ctr;
1520 [charset(UTF16),string] uint16 *attribute_name;
1522 NTTIME originating_change_time;
1523 GUID originating_invocation_id;
1524 hyper originating_usn;
1526 [charset(UTF16),string] uint16 *originating_dsa_dn;
1527 } drsuapi_DsReplicaObjMetaData2;
1531 uint32 enumeration_context;
1532 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
1533 } drsuapi_DsReplicaObjMetaData2Ctr;
1536 [charset(UTF16),string] uint16 *attribute_name;
1537 [charset(UTF16),string] uint16 *object_dn;
1538 [value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary;
1543 NTTIME originating_change_time;
1544 GUID originating_invocation_id;
1545 hyper originating_usn;
1547 [charset(UTF16),string] uint16 *originating_dsa_dn;
1548 } drsuapi_DsReplicaAttrValMetaData2;
1552 uint32 enumeration_context;
1553 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
1554 } drsuapi_DsReplicaAttrValMetaData2Ctr;
1557 hyper u1; /* session number? */
1561 NTTIME_1sec bind_time;
1562 [flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address;
1563 uint32 u5; /* this is the same value the client used as pid in the DsBindInfoX struct */
1564 } drsuapi_DsReplicaConnection04;
1567 [range(0,10000)] uint32 count;
1569 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
1570 } drsuapi_DsReplicaConnection04Ctr;
1573 [charset(UTF16),string] uint16 *str1;
1581 } drsuapi_DsReplica06;
1584 [range(0,256)] uint32 count;
1586 [size_is(count)] drsuapi_DsReplica06 array[];
1587 } drsuapi_DsReplica06Ctr;
1589 typedef [switch_type(drsuapi_DsReplicaInfoType)] union {
1590 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours;
1591 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCursorCtr *cursors;
1592 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
1593 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
1594 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
1595 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops;
1596 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
1597 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCursor2Ctr *cursors2;
1598 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCursor3Ctr *cursors3;
1599 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
1600 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
1601 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
1602 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04;
1603 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS05)] drsuapi_DsReplicaCursorCtrEx *cursors05;
1604 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
1605 } drsuapi_DsReplicaInfo;
1607 WERROR drsuapi_DsReplicaGetInfo(
1608 [in] policy_handle *bind_handle,
1609 [in] drsuapi_DsReplicaGetInfoLevel level,
1610 [in,ref,switch_is(level)] drsuapi_DsReplicaGetInfoRequest *req,
1611 [out,ref] drsuapi_DsReplicaInfoType *info_type,
1612 [out,ref,switch_is(*info_type)] drsuapi_DsReplicaInfo *info
1617 [todo] WERROR DRSUAPI_ADD_SID_HISTORY();
1623 [range(0,10000)] uint32 num_entries;
1624 [size_is(num_entries)] drsuapi_DsGetMembershipsCtr1 **ctrl_array;
1625 } drsuapi_DsGetMemberships2Ctr1;
1627 typedef [switch_type(int32)] union {
1628 [case(1)] drsuapi_DsGetMembershipsCtr1 ctr1;
1629 } drsuapi_DsGetMemberships2Ctr;
1632 [range(1,10000)] uint32 num_req;
1633 [size_is(num_req)] drsuapi_DsGetMembershipsRequest1 **req_array;
1634 } drsuapi_DsGetMemberships2Request1;
1636 typedef [switch_type(int32)] union {
1637 [case(1)] drsuapi_DsGetMemberships2Request1 req1;
1638 } drsuapi_DsGetMemberships2Request;
1640 WERROR drsuapi_DsGetMemberships2(
1641 [in] policy_handle *bind_handle,
1643 [in,ref] [switch_is(level)] drsuapi_DsGetMemberships2Request *req,
1644 [out,ref] int32 *level_out,
1645 [out,ref] [switch_is(*level_out)] drsuapi_DsGetMemberships2Ctr *ctr
1650 [todo] WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
1654 [todo] WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
1661 } drsuapi_DsSiteCostInfo;
1664 [range(0,10000)] uint32 num_info;
1665 [size_is(num_info)] drsuapi_DsSiteCostInfo *info;
1667 } drsuapi_QuerySitesByCostCtr1;
1669 typedef [switch_type(int32)] union {
1670 [case(1)] drsuapi_QuerySitesByCostCtr1 ctr1;
1671 } drsuapi_QuerySitesByCostCtr;
1674 [charset(UTF16),string] uint16 *site_from;
1675 [range(1,10000)] uint32 num_req;
1676 [size_is(num_req)] [charset(UTF16),string] uint16 **site_to;
1678 } drsuapi_QuerySitesByCostRequest1;
1680 typedef [switch_type(int32)] union {
1681 [case(1)] drsuapi_QuerySitesByCostRequest1 req1;
1682 } drsuapi_QuerySitesByCostRequest;
1684 WERROR drsuapi_QuerySitesByCost(
1685 [in] policy_handle *bind_handle,
1687 [in,ref] [switch_is(level)] drsuapi_QuerySitesByCostRequest *req,
1688 [out,ref] int32 *level_out,
1689 [out,ref] [switch_is(*level_out)] drsuapi_QuerySitesByCostCtr *ctr