f106c4ce3a2c07b773b12bc3409e2f81172491d5
[jelmer/samba4-debian.git] / source / librpc / idl / drsuapi.idl
1 #include "idl_types.h"
2
3
4   uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"),
5   version(4.0),
6   endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"),
7   authservice("ldap"),
8   helpstring("Active Directory Replication"),
9   pointer_default(unique),
10   depends(security,misc),
11   keepref
12
13 interface drsuapi
14 {
15         /*****************/
16         /* Function 0x00 */
17         typedef [bitmap32bit] bitmap {
18                 DRSUAPI_SUPPORTED_EXTENSION_BASE                        = 0x00000001,
19                 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION           = 0x00000002,
20                 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI                   = 0x00000004,
21                 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2                  = 0x00000008,
22                 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS             = 0x00000010,
23                 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1                   = 0x00000020,
24                 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION    = 0x00000040,
25                 DRSUAPI_SUPPORTED_EXTENSION_00000080                    = 0x00000080,
26                 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE                 = 0x00000100,
27                 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2                 = 0x00000200,
28                 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION    = 0x00000400,
29                 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2                   = 0x00000800,
30                 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000,
31                 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND                 = 0x00002000,
32                 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO               = 0x00004000,
33                 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION           = 0x00008000,
34                 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01                  = 0x00010000,
35                 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP       = 0x00020000,
36                 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY             = 0x00040000,
37                 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3                  = 0x00080000,
38                 DRSUAPI_SUPPORTED_EXTENSION_00100000                    = 0x00100000,
39                 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2            = 0x00200000,
40                 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6                = 0x00400000,
41                 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS               = 0x00800000,
42                 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8                = 0x01000000,
43                 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5              = 0x02000000,
44                 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6              = 0x04000000,
45                 /*
46                  * the following 3 have the same value
47                  * repadmin.exe /bind says that
48                  */
49                 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3            = 0x08000000,
50                 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7              = 0x08000000,
51                 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT               = 0x08000000,
52                 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS             = 0x10000000,
53                 DRSUAPI_SUPPORTED_EXTENSION_20000000                    = 0x20000000,
54                 DRSUAPI_SUPPORTED_EXTENSION_40000000                    = 0x40000000,
55                 DRSUAPI_SUPPORTED_EXTENSION_80000000                    = 0x80000000
56         } drsuapi_SupportedExtensions;
57
58         /* this is used by w2k */
59         typedef struct {
60                 drsuapi_SupportedExtensions supported_extensions;
61                 GUID site_guid;
62                 uint32 u1;
63         } drsuapi_DsBindInfo24;
64
65         /* this is used by w2k3 */
66         typedef struct {
67                 drsuapi_SupportedExtensions supported_extensions;
68                 GUID site_guid;
69                 uint32 u1;
70                 uint32 repl_epoch;
71         } drsuapi_DsBindInfo28;
72
73         typedef struct {
74                 [flag(NDR_REMAINING)] DATA_BLOB info;
75         } drsuapi_DsBindInfoFallBack;
76
77         typedef [nodiscriminant] union {
78                 [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24;
79                 [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28;
80                 [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack;
81         } drsuapi_DsBindInfo;
82
83         /* the drsuapi_DsBindInfoCtr was this before
84          * typedef [flag(NDR_PAHEX)] struct {
85          *      [range(1,10000)] uint32 length;
86          *      [size_is(length)] uint8 data[];
87          * } drsuapi_DsBindInfo;
88          *
89          * but we don't want the caller to manually decode this blob,
90          * so we're doing it here
91          */
92
93         typedef struct {
94                 [range(1,10000)] uint32 length;
95                 [switch_is(length)] drsuapi_DsBindInfo info;
96         } drsuapi_DsBindInfoCtr;
97
98         /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work
99          * 
100          * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04
101          */
102         const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
103         /* 
104          * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges()
105          */
106         const char *DRSUAPI_DS_BIND_GUID_W2K    = "6abec3d1-3054-41c8-a362-5a0c5b7d5d71";
107         const char *DRSUAPI_DS_BIND_GUID_W2K3   = "6afab99c-6e26-464a-975f-f58f105218bc";
108
109         WERROR drsuapi_DsBind(
110                 [in,unique]         GUID *bind_guid,
111                 [in,out,unique]    drsuapi_DsBindInfoCtr *bind_info,
112                 [out]   policy_handle *bind_handle
113                 );
114
115         /*****************/
116         /* Function 0x01 */
117         WERROR drsuapi_DsUnbind(
118                 [in,out] policy_handle *bind_handle
119                 );
120
121         /*****************/
122         /* Function 0x02 */
123         typedef [public,gensize] struct {
124                 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size;
125                 [value(ndr_size_dom_sid(&r->sid, ndr->flags))]  uint32 __ndr_size_sid;
126                 GUID guid;
127                 dom_sid28 sid;
128                 [flag(STR_SIZE4|STR_CHARLEN|STR_CONFORMANT)] string dn;
129         } drsuapi_DsReplicaObjectIdentifier;
130
131         typedef [public] bitmap {
132                 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION  = 0x00000001,
133                 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE               = 0x00000002,
134                 DRSUAPI_DS_REPLICA_SYNC_PERIODIC                = 0x00000004,
135                 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING     = 0x00000008,
136                 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES             = 0x00000010,
137                 DRSUAPI_DS_REPLICA_SYNC_FULL                    = 0x00000020,
138                 DRSUAPI_DS_REPLICA_SYNC_URGENT                  = 0x00000040,
139                 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD              = 0x00000080,
140                 DRSUAPI_DS_REPLICA_SYNC_FORCE                   = 0x00000100,
141                 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE           = 0x00000200,
142                 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED         = 0x00000400,
143                 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY                 = 0x00000800,
144                 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY            = 0x00001000,
145                 DRSUAPI_DS_REPLICA_SYNC_INITIAL                 = 0x00002000,
146                 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION         = 0x00004000,
147                 DRSUAPI_DS_REPLICA_SYNC_ABANDONED               = 0x00008000,
148                 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS     = 0x00010000,
149                 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET   = 0x00020000,
150                 DRSUAPI_DS_REPLICA_SYNC_REQUEUE                 = 0x00040000,
151                 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION            = 0x00080000,
152                 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA    = 0x00100000,
153                 DRSUAPI_DS_REPLICA_SYNC_CRITICAL                = 0x00200000,
154                 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS        = 0x00400000,
155                 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED               = 0x00800000
156         } drsuapi_DsReplicaSyncOptions;
157
158         typedef struct {
159                 drsuapi_DsReplicaObjectIdentifier *naming_context;
160                 GUID guid1;
161                 astring *string1;
162                 drsuapi_DsReplicaSyncOptions options;
163         } drsuapi_DsReplicaSyncRequest1;
164
165         typedef [switch_type(int32)] union {
166                 [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
167         } drsuapi_DsReplicaSyncRequest;
168
169         WERROR drsuapi_DsReplicaSync(
170                 [in] policy_handle *bind_handle,
171                 [in] int32 level,
172                 [in,switch_is(level)] drsuapi_DsReplicaSyncRequest req
173                 );
174
175         /*****************/
176         /* Function 0x03 */
177         typedef [public] struct {
178                 hyper tmp_highest_usn; /* updated after each object update */
179                 hyper reserved_usn;
180                 hyper highest_usn; /* updated after a full replication cycle */
181         } drsuapi_DsReplicaHighWaterMark;
182
183         typedef [public] struct {
184                 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
185                 hyper highest_usn;  /* updated after a full replication cycle */
186         } drsuapi_DsReplicaCoursor;
187
188         typedef struct {
189                 uint32 u1;
190                 uint32 u2;
191                 [range(0,0x100000)] uint32 count;
192                 uint32 u3;
193                 [size_is(count)] drsuapi_DsReplicaCoursor coursors[];
194         } drsuapi_DsReplicaCoursorCtrEx;
195
196         typedef [public] bitmap {
197                 /* the _WRITEABLE flag seems to indicate a replication with all attributes,
198                  * and I'm currently always on error when it's set, but w2k and w2k3 uses it
199                  * in the dc join
200                  * --metze
201                  */
202                 DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE                          = 0x00000010,
203                 DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP                    = 0x00000020,
204                 DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS                 = 0x00000040,
205                 DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT      = 0x00000080,
206                 DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC                       = 0x00000200,
207                 DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              = 0x00000800,
208                 DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   = 0x00010000,
209                 DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET                   = 0x00020000,
210                 DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED                       = 0x00200000,
211                 DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED                          = 0x01000000,
212                 DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS        = 0x04000000,
213                 DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC             = 0x08000000,
214                 /* 
215                  * the following NOTE applies to DsGetNCChangesRequest5:
216                  *  - the data is only compressed when 10 or more objects are replicated
217                  *  - but there could also be a size limit of 35 KBytes or something like that
218                  *  - the reply is DsGetNCChangesCtr2
219                  *  - maybe the same applies to DsGetNCChangesRequest8...
220                  *
221                  *  --metze
222                  */
223                 DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES                   = 0x10000000,
224                 DRSUAPI_DS_REPLICA_NEIGHBOUR_NO_CHANGE_NOTIFICATIONS            = 0x20000000,
225                 DRSUAPI_DS_REPLICA_NEIGHBOUR_PARTIAL_ATTRIBUTE_SET              = 0x40000000
226         } drsuapi_DsReplicaNeighbourFlags;
227
228         typedef struct {
229                 GUID destination_dsa_guid;
230                 GUID source_dsa_guid;
231                 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
232                 drsuapi_DsReplicaHighWaterMark highwatermark;
233                 drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
234                 drsuapi_DsReplicaNeighbourFlags replica_flags;
235                 uint32 unknown2;
236                 uint32 unknown3;
237                 uint32 unknown4;
238                 hyper h1;
239         } drsuapi_DsGetNCChangesRequest5;
240
241         typedef [flag(NDR_PAHEX)] struct {
242                 [range(0,10000)] uint32 length;
243                 [size_is(length)] uint8 *byte_array;
244         } drsuapi_DsGetNCChangesRequest_Ctr14;
245
246         typedef struct {
247                 uint32 unknown1;
248                 drsuapi_DsGetNCChangesRequest_Ctr14 data;
249         } drsuapi_DsGetNCChangesRequest_Ctr13;
250
251         typedef struct {
252                 [range(0,0x100000)] uint32 count;
253                 [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array;
254         } drsuapi_DsGetNCChangesRequest_Ctr12;
255
256         typedef struct {
257                 GUID destination_dsa_guid;
258                 GUID source_dsa_guid;
259                 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
260                 drsuapi_DsReplicaHighWaterMark highwatermark;
261                 drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
262                 drsuapi_DsReplicaNeighbourFlags replica_flags;
263                 uint32 unknown2;
264                 uint32 unknown3;
265                 uint32 unknown4;
266                 hyper h1;
267                 uint32 unique_ptr1;
268                 uint32 unique_ptr2;
269                 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
270         } drsuapi_DsGetNCChangesRequest8;
271
272         typedef [switch_type(int32)] union {
273                 [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
274                 [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
275         } drsuapi_DsGetNCChangesRequest;
276
277         typedef [public] struct {
278                 GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
279                 hyper highest_usn;  /* updated after a full replication cycle */
280                 NTTIME last_sync_success;
281         } drsuapi_DsReplicaCoursor2;
282
283         typedef struct {
284                 uint32 u1;
285                 uint32 u2;
286                 [range(0,0x100000)] uint32 count;
287                 uint32 u3;
288                 [size_is(count)] drsuapi_DsReplicaCoursor2 coursors[];
289         } drsuapi_DsReplicaCoursor2CtrEx;
290
291         /*
292          * In DRSUAPI the objectClasses and attributes
293          * are identified by uint32 values, but in the schema
294          * they are identified by the governsID (objectClasses)
295          * and attributeID (attributes)
296          *
297          * the following table shows the mapping used between the two representations
298          * e.g. - objectClass 'nTDSDSA' has governsID: 1.2.840.113556.1.5.7000.47
299          *        and a UINT32-ID of '0x0017002F'.
300          *      - so the OID 1.2.840.113556.1.5.7000.47 is splitted into a
301          *        OID-prefix: 1.2.840.113556.1.5.7000
302          *        and a value: 47 => 0x2F
303          *      - the mapping table gives a UINT32-prefix: 0x00170000
304          *      - and the UINT32-ID is 0x0017002F = 0x00170000 | 0x2F
305          *
306          * OID-prefix                   => UINT32-Id prefix
307          *
308          * 2.5.4.*                      => 0x00000000 (standard attributes RFC2256 core.schema)
309          * 2.5.6.*                      => 0x00010000 (standard object classes RFC2256 core.schema)
310          * 1.2.840.113556.1.2.*         => 0x00020000
311          * 1.2.840.113556.1.3.*         => 0x00030000
312          * 1.2.840.113556.1.4.*         => 0x00090000
313          * 1.2.840.113556.1.5.*         => 0x000A0000
314          * 2.16.840.1.113730.3.*        => 0x00140000
315          * 0.9.2342.19200300.100.1.*    => 0x00150000
316          * 2.16.840.1.113730.3.1.*      => 0x00160000
317          * 1.2.840.113556.1.5.7000.*    => 0x00170000
318          * 2.5.20.*                     => 0x001A0000
319          * 2.16.840.1.113730.3.2.*      => 0x001C0000
320          * 1.3.6.1.4.1.250.1.*          => 0x001D0000
321          * 0.9.2342.19200300.100.4.*    => 0x001F0000
322          *
323          * 1.2.840.113549.1.9.*         (unstructuredAddress,unstructuredName)
324          * 1.3.6.1.4.1.1466.101.119.2   (dynamicObject)
325          * 1.3.6.1.4.1.1466.101.119.3   (entryTTL)
326          * 2.5.18.*                     (createTimeStamp,modifyTimeStamp, SubSchema)            
327          * 2.5.21.*                     (attrs for SubSchema)
328          *
329          * Here's a list of used 'attributeSyntax' OID's
330          *
331          * 2.5.5.1      => Object(DS-DN) string
332          *                 struct drsuapi_DsObjectIdentifier3
333          *
334          * 2.5.5.2      => OID-string
335          *              => mayContain, mustContain... also have this syntax but have string values
336          *
337          * 2.5.5.4      => String(Teletex) case-insensitive string with teletex charset
338          *
339          * 2.5.5.5      => String(IA5) case-sensitive string
340          *
341          * 2.5.5.6      => String(Numeric)
342          *              => eg. internationalISDNNumber
343          *
344          * 2.5.5.7      => Object(DN-Binary) B:<byte count>:<bytes>:<object DN>
345          *              => e.g. wellKnownObjects
346          *
347          * 2.5.5.8      => BOOL
348          *
349          * 2.5.5.9      => int32
350          *
351          * 2.5.5.10     => DATA_BLOB
352          *              => struct GUID
353          *
354          * 2.5.5.11     => LDAP timestring
355          *              => NTTIME_1sec
356          *
357          * 2.5.5.12     => String(Unicode) case-insensitive string
358          *              => 'standard strings'
359          *
360          * 2.5.5.13     => Object(Presentation-Address) string
361          *              => used in objectClass applicationEntity
362          *
363          * 2.5.5.14     => Object(DN-String) S:<char count>:<string>:<object DN>
364          *              => not used
365          *
366          * 2.5.5.15     => ntSecurityDescriptor
367          *
368          * 2.5.5.16     => int64
369          *
370          * 2.5.5.17     => dom_sid
371          */
372
373         typedef [flag(NDR_PAHEX),v1_enum] enum {
374                 DRSUAPI_OBJECTCLASS_top                 = 0x00010000
375         } drsuapi_DsObjectClassId;
376
377         typedef [flag(NDR_PAHEX),v1_enum,public] enum {
378                 DRSUAPI_ATTRIBUTE_objectClass                   = 0x00000000,
379                 DRSUAPI_ATTRIBUTE_description                   = 0x0000000d,
380                 DRSUAPI_ATTRIBUTE_member                        = 0x0000001f,
381                 DRSUAPI_ATTRIBUTE_hasMasterNCs                  = 0x0002000e,
382                 DRSUAPI_ATTRIBUTE_invocationId                  = 0x00020073,
383                 DRSUAPI_ATTRIBUTE_dMDLocation                   = 0x00020024,
384                 DRSUAPI_ATTRIBUTE_ntSecurityDescriptor          = 0x00020119,
385                 DRSUAPI_ATTRIBUTE_objectSid                     = 0x00090092,
386                 DRSUAPI_ATTRIBUTE_dBCSPwd                       = 0x00090037,/* lmPwdHash */
387                 DRSUAPI_ATTRIBUTE_unicodePwd                    = 0x0009005a,/* ntPwdHash */
388                 DRSUAPI_ATTRIBUTE_ntPwdHistory                  = 0x0009005e,
389                 DRSUAPI_ATTRIBUTE_lmPwdHistory                  = 0x000900a0,
390                 DRSUAPI_ATTRIBUTE_supplementalCredentials       = 0x0009007d,
391                 DRSUAPI_ATTRIBUTE_systemFlags                   = 0x00090177,
392                 DRSUAPI_ATTRIBUTE_serverReference               = 0x00090203,
393                 DRSUAPI_ATTRIBUTE_objectCategory                = 0x0009030e,
394                 DRSUAPI_ATTRIBUTE_msDS_Behavior_Version         = 0x000905b3,
395                 DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber         = 0x000906f6,           
396                 DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs             = 0x0009071c,
397                 DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs             = 0x0009072c
398         } drsuapi_DsAttributeId;
399
400         /* Generic DATA_BLOB values */
401         typedef struct {
402                 [range(0,10485760)] uint32 length;
403                 DATA_BLOB *data;
404         } drsuapi_DsAttributeValueDataBlob;
405
406         typedef struct {
407                 [range(0,10485760)] uint32 num_values;
408                 [size_is(num_values)] drsuapi_DsAttributeValueDataBlob *values;
409         } drsuapi_DsAttributeValueCtrDataBlob;
410
411         /* objectClass values */
412         typedef struct {
413                 [range(0,10485760),value(4)] uint32 __ndr_size;
414                 [subcontext(4)] drsuapi_DsObjectClassId *objectClassId;
415         } drsuapi_DsAttributeValueObjectClassId;
416
417         typedef struct {
418                 [range(0,10485760)] uint32 num_values;
419                 [size_is(num_values)] drsuapi_DsAttributeValueObjectClassId *values;
420         } drsuapi_DsAttributeValueCtrObjectClassId;
421
422         /* uint32 values */
423         typedef struct {
424                 [range(0,10485760),value(4)] uint32 __ndr_size;
425                 [subcontext(4)] uint32 *value;
426         } drsuapi_DsAttributeValueUINT32;
427
428         typedef struct {
429                 [range(0,10485760)] uint32 num_values;
430                 [size_is(num_values)] drsuapi_DsAttributeValueUINT32 *values;
431         } drsuapi_DsAttributeValueCtrUINT32;
432
433         /* UnicodeString values */
434         typedef struct {
435                 [range(0,10485760)] uint32 length;
436                 [subcontext(4)] nstring *string;
437         } drsuapi_DsAttributeValueUnicodeString;
438
439         typedef struct {
440                 [range(0,10485760)] uint32 num_values;
441                 [size_is(num_values)] drsuapi_DsAttributeValueUnicodeString *values;
442         } drsuapi_DsAttributeValueCtrUnicodeString;
443
444         /* DN String values */
445         typedef [public,gensize] struct {
446                 [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size;
447                 [value(ndr_size_dom_sid(&r->sid,ndr->flags))]  uint32 __ndr_size_sid;
448                 GUID guid;
449                 dom_sid28 sid;
450                 [flag(STR_SIZE4|STR_CHARLEN)] string dn;
451         } drsuapi_DsReplicaObjectIdentifier3;
452
453         typedef struct {
454                 [range(0,10485760),value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(object, ndr->flags))] uint32 __ndr_size;
455                 [subcontext(4),subcontext_size(__ndr_size)] drsuapi_DsReplicaObjectIdentifier3 *object;
456         } drsuapi_DsAttributeValueDNString;
457
458         typedef struct {
459                 [range(0,10485760)] uint32 num_values;
460                 [size_is(num_values)] drsuapi_DsAttributeValueDNString *values;
461         } drsuapi_DsAttributeValueCtrDNString;
462
463         /* GUID values */
464         typedef struct {
465                 [range(0,10485760),value(ndr_size_GUID(guid, ndr->flags))] uint32 __ndr_size;
466                 [subcontext(4)] GUID *guid;
467         } drsuapi_DsAttributeValueGUID;
468
469         typedef struct {
470                 [range(0,10485760)] uint32 num_values;
471                 [size_is(num_values)] drsuapi_DsAttributeValueGUID *values;
472         } drsuapi_DsAttributeValueCtrGUID;
473
474         /* SID values */
475         typedef struct {
476                 [range(0,10485760),value(ndr_size_dom_sid(sid,ndr->flags))] uint32 __ndr_size;
477                 [subcontext(4)] dom_sid *sid;
478         } drsuapi_DsAttributeValueSID;
479
480         typedef struct {
481                 [range(0,10485760)] uint32 num_values;
482                 [size_is(num_values)] drsuapi_DsAttributeValueSID *values;
483         } drsuapi_DsAttributeValueCtrSID;
484
485         /* SecurityDescriptor values */
486         typedef struct {
487                 [range(0,10485760),value(ndr_size_security_descriptor(sd,ndr->flags))] uint32 __ndr_size;
488                 [subcontext(4)] security_descriptor *sd;
489         } drsuapi_DsAttributeValueSecurityDescriptor;
490
491         typedef struct {
492                 [range(0,10485760)] uint32 num_values;
493                 [size_is(num_values)] drsuapi_DsAttributeValueSecurityDescriptor *values;
494         } drsuapi_DsAttributeValueCtrSecurityDescriptor;
495
496         /* NTTIME_1sec values */
497         typedef struct {
498                 [range(0,10485760),value(8)] uint32 __ndr_size;
499                 [subcontext(4)] NTTIME_1sec *time;
500         } drsuapi_DsAttributeValueNTTIME_1sec;
501
502         typedef struct {
503                 [range(0,10485760)] uint32 num_values;
504                 [size_is(num_values)] drsuapi_DsAttributeValueNTTIME_1sec *values;
505         } drsuapi_DsAttributeValueCtrNTTIME_1sec;
506
507         typedef [nodiscriminant] union {
508                 [case(DRSUAPI_ATTRIBUTE_objectClass)] drsuapi_DsAttributeValueCtrObjectClassId object_class_id;
509
510                 /* UINT32 */
511                 [case(0x00020001)] drsuapi_DsAttributeValueCtrUINT32 uint32;
512                 [case(0x0002004c)] drsuapi_DsAttributeValueCtrUINT32 uint32;
513                 [case(0x000200a9)] drsuapi_DsAttributeValueCtrUINT32 uint32;
514                 [case(0x00090177)] drsuapi_DsAttributeValueCtrUINT32 uint32;
515                 [case(0x000905b3)] drsuapi_DsAttributeValueCtrUINT32 uint32;
516
517                 /* GUID */
518                 [case(DRSUAPI_ATTRIBUTE_invocationId)] drsuapi_DsAttributeValueCtrGUID guid;
519
520                 /* SID */
521                 [case(DRSUAPI_ATTRIBUTE_objectSid)] drsuapi_DsAttributeValueCtrSID sid;
522
523                 /* SecurityDescriptor */
524                 [case(DRSUAPI_ATTRIBUTE_ntSecurityDescriptor)] drsuapi_DsAttributeValueCtrSecurityDescriptor security_descriptor;
525
526                 /* UnicodeString */
527                 [case(DRSUAPI_ATTRIBUTE_description)]           drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
528                 [case(0x00090001)]                              drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
529                 [case(0x000900dd)]                              drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
530                 [case(0x0009037b)]                              drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
531
532                 /* DN String */
533                 [case(DRSUAPI_ATTRIBUTE_member)]                drsuapi_DsAttributeValueCtrDNString dn_string;
534                 [case(DRSUAPI_ATTRIBUTE_objectCategory)]        drsuapi_DsAttributeValueCtrDNString dn_string;
535                 [case(0x0002000e)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
536                 [case(0x00020024)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
537                 [case(0x00090171)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
538                 [case(0x0009071c)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
539                 [case(0x0009072c)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
540                 [case(0x0009026a)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
541                 [case(0x00090203)]                              drsuapi_DsAttributeValueCtrDNString dn_string;
542
543                 /* NTTIME_1sec */
544                 [case(0x00020002)] drsuapi_DsAttributeValueCtrNTTIME_1sec nttime_1sec;
545
546                 /* the default is the DATA_BLOB */
547                 [default] drsuapi_DsAttributeValueCtrDataBlob data_blob;
548         } drsuapi_DsReplicaAttributeValueCtr;
549
550         typedef struct {
551                 drsuapi_DsAttributeId attid;
552                 [switch_is(attid)] drsuapi_DsReplicaAttributeValueCtr value_ctr;
553         } drsuapi_DsReplicaAttribute;
554
555         typedef struct {
556                 [range(0,1048576)] uint32 num_attributes;
557                 [size_is(num_attributes)]  drsuapi_DsReplicaAttribute *attributes;
558         } drsuapi_DsReplicaAttributeCtr;
559
560         typedef [public] struct {
561                 drsuapi_DsReplicaObjectIdentifier *identifier;
562                 uint32 unknown1;
563                 drsuapi_DsReplicaAttributeCtr attribute_ctr;
564         } drsuapi_DsReplicaObject;
565
566         typedef struct {
567                 uint32 version;
568                 NTTIME_1sec orginating_time;
569                 GUID orginating_invocation_id;
570                 hyper orginating_usn;
571         } drsuapi_DsReplicaMetaData;
572
573         typedef [public] struct {
574                 [range(0,1048576)] uint32 count;
575                 [size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
576         } drsuapi_DsReplicaMetaDataCtr;
577
578         typedef [public,noprint] struct {
579                 drsuapi_DsReplicaObjectListItemEx *next_object;
580                 drsuapi_DsReplicaObject object;
581                 uint32 unknown1;
582                 GUID *parent_object_guid;
583                 drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
584         } drsuapi_DsReplicaObjectListItemEx;
585
586         typedef [public,gensize] struct {
587                 GUID guid1;
588                 GUID guid2;
589                 drsuapi_DsReplicaObjectIdentifier *naming_context;
590                 drsuapi_DsReplicaHighWaterMark old_highwatermark;
591                 drsuapi_DsReplicaHighWaterMark new_highwatermark;
592                 drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
593                 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
594                 uint32 unknown1;
595                 uint32 object_count;
596                 /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
597                 [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->flags)+55)] uint32 __ndr_size;
598                 drsuapi_DsReplicaObjectListItemEx *first_object;
599                 uint32 unknown4;
600         } drsuapi_DsGetNCChangesCtr1;
601
602         typedef struct {
603                 drsuapi_DsReplicaObjectIdentifier *dn;
604                 drsuapi_DsAttributeId attid;
605                 /* this dn_string, depends on the attid, maybe could be another
606                  * attribute syntax
607                  */
608                 drsuapi_DsAttributeValueDNString dn_string;
609                 uint32 u1;
610                 NTTIME_1sec time1;
611                 drsuapi_DsReplicaMetaData meta_data;
612         } drsuapi_DsReplicaLinkedAttribute;
613
614         typedef struct {
615                 GUID guid1;
616                 GUID guid2;
617                 drsuapi_DsReplicaObjectIdentifier *naming_context;
618                 drsuapi_DsReplicaHighWaterMark old_highwatermark;
619                 drsuapi_DsReplicaHighWaterMark new_highwatermark;
620                 drsuapi_DsReplicaCoursor2CtrEx *uptodateness_vector;
621                 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
622                 uint32 unknown1;
623                 uint32 unknown2;
624                 uint32 unknown3;
625                 drsuapi_DsReplicaObjectListItemEx *first_object;
626                 uint32 unknown4;
627                 uint32 unknown5;
628                 uint32 unknown6;
629                 [range(0,1048576)] uint32 linked_attributes_count;
630                 [size_is(linked_attributes_count)] drsuapi_DsReplicaLinkedAttribute *linked_attributes;
631                 uint32 unknown7;
632         } drsuapi_DsGetNCChangesCtr6;
633
634         typedef struct {
635                 uint32 decompressed_length;
636                 uint32 compressed_length;
637                 [subcontext(4),subcontext_size(r->compressed_length),
638                  compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
639                  drsuapi_DsGetNCChangesCtr1 *ctr1;
640         } drsuapi_DsGetNCChangesMSZIPCtr1;
641
642         typedef struct {
643                 uint32 decompressed_length;
644                 uint32 compressed_length;
645                 [subcontext(4),subcontext_size(r->compressed_length),
646                  compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
647                  drsuapi_DsGetNCChangesCtr6 *ctr6;
648         } drsuapi_DsGetNCChangesMSZIPCtr6;
649
650         typedef struct {
651                 uint32 decompressed_length;
652                 uint32 compressed_length;
653                 [subcontext(4),subcontext_size(r->compressed_length),
654                  compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length),
655                  flag(NDR_REMAINING)] DATA_BLOB *decompressed;
656         } drsuapi_DsGetNCChangesXPRESSCtr1;
657
658         typedef struct {
659                 uint32 decompressed_length;
660                 uint32 compressed_length;
661                 [subcontext(4),subcontext_size(r->compressed_length),
662                  compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length),
663                  flag(NDR_REMAINING)] DATA_BLOB *decompressed;
664         } drsuapi_DsGetNCChangesXPRESSCtr6;
665
666         typedef [enum16bit] enum {
667                 DRSUAPI_COMPRESSION_TYPE_MSZIP  = 2,
668                 DRSUAPI_COMPRESSION_TYPE_XPRESS = 3
669         } drsuapi_DsGetNCChangesCompressionType;
670
671         typedef [nodiscriminant,flag(NDR_PAHEX)] union {
672                 [case(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))]  drsuapi_DsGetNCChangesMSZIPCtr1 mszip1;
673                 [case(6|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))]  drsuapi_DsGetNCChangesMSZIPCtr6 mszip6;
674                 [case(1|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))] drsuapi_DsGetNCChangesXPRESSCtr1 xpress1;
675                 [case(6|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))] drsuapi_DsGetNCChangesXPRESSCtr6 xpress6;
676         } drsuapi_DsGetNCChangesCompressedCtr;
677
678         typedef struct {
679                 /* 
680                  * this is a bit ugly, as the compression depends on the flags
681                  * in the DsBind(), but only w2k uses DsGetNCChangesReq5
682                  * and will get DsGetNCChangesCtr2 replies, and w2k only knowns
683                  * about MSZIP and level 1 replies
684                  */
685                 [switch_is(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr;
686         } drsuapi_DsGetNCChangesCtr2;
687
688         typedef struct {
689                 [range(0,6)] int32 level;
690                 [range(2,3)] drsuapi_DsGetNCChangesCompressionType type;
691                 [switch_is(level | (type<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr;
692         } drsuapi_DsGetNCChangesCtr7;
693
694         typedef [switch_type(int32)] union {
695                 [case(1)] drsuapi_DsGetNCChangesCtr1 ctr1;
696                 [case(2)] drsuapi_DsGetNCChangesCtr2 ctr2;
697                 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6;
698                 [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7;
699         } drsuapi_DsGetNCChangesCtr;
700
701         WERROR drsuapi_DsGetNCChanges(
702                 [in] policy_handle *bind_handle,
703                 [in,out] int32 level,
704                 [in,switch_is(level)] drsuapi_DsGetNCChangesRequest req,
705                 [out,switch_is(level)] drsuapi_DsGetNCChangesCtr ctr
706                 );
707
708         /*****************/
709         /* Function 0x04 */
710         typedef bitmap {
711                 DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION        = 0x00000001,
712                 DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE                     = 0x00000002,
713                 DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE                 = 0x00000004,
714                 DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE              = 0x00000008,
715                 DRSUAPI_DS_REPLICA_UPDATE_0x00000010                    = 0x00000010
716         } drsuapi_DsReplicaUpdateRefsOptions;
717
718         typedef struct {
719                 [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
720                 [ref,charset(DOS),string] uint8 *dest_dsa_dns_name;
721                 GUID dest_dsa_guid;
722                 drsuapi_DsReplicaUpdateRefsOptions options;
723         } drsuapi_DsReplicaUpdateRefsRequest1;
724
725         typedef [switch_type(int32)] union {
726                 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1;
727         } drsuapi_DsReplicaUpdateRefsRequest;
728
729         WERROR drsuapi_DsReplicaUpdateRefs(
730                 [in] policy_handle *bind_handle,
731                 [in] int32 level,
732                 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req
733                 );
734
735         /*****************/
736         /* Function 0x05 */
737         typedef bitmap {
738                 DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION   = 0x00000001,
739                 DRSUAPI_DS_REPLICA_ADD_WRITEABLE                = 0x00000002
740                 /* TODO ... */
741         } drsuapi_DsReplicaAddOptions;
742
743         WERROR DRSUAPI_REPLICA_ADD();
744
745         /*****************/
746         /* Function 0x06 */
747         typedef bitmap {
748                 DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION        = 0x00000001,
749                 DRSUAPI_DS_REPLICA_DELETE_WRITEABLE                     = 0x00000002
750                 /* TODO ... */
751         } drsuapi_DsReplicaDeleteOptions;
752
753         WERROR DRSUAPI_REPLICA_DEL();
754
755         /*****************/
756         /* Function 0x07 */
757         typedef bitmap {
758                 DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION        = 0x00000001,
759                 DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE                     = 0x00000002
760         } drsuapi_DsReplicaModifyOptions;
761
762         WERROR DRSUAPI_REPLICA_MODIFY();
763
764         /*****************/
765         /* Function 0x08 */
766         WERROR DRSUAPI_VERIFY_NAMES();
767
768         /*****************/
769         /* Function 0x09 */
770         WERROR DRSUAPI_GET_MEMBERSHIPS();
771
772         /*****************/
773         /* Function 0x0a */
774         WERROR DRSUAPI_INTER_DOMAIN_MOVE();
775
776         /*****************/
777         /* Function 0x0b */
778         WERROR DRSUAPI_GET_NT4_CHANGELOG();
779
780         /*****************/
781         /* Function 0x0c */
782         typedef [v1_enum] enum {
783                 DRSUAPI_DS_NAME_STATUS_OK                       = 0,
784                 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR            = 1,
785                 DRSUAPI_DS_NAME_STATUS_NOT_FOUND                = 2,
786                 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE               = 3,
787                 DRSUAPI_DS_NAME_STATUS_NO_MAPPING               = 4,
788                 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY              = 5,
789                 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING   = 6,
790                 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL           = 7
791         } drsuapi_DsNameStatus;
792
793         typedef [v1_enum] enum {
794                 DRSUAPI_DS_NAME_FLAG_NO_FLAGS                   = 0x0,
795                 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY           = 0x1,
796                 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC                 = 0x2,
797                 DRSUAPI_DS_NAME_FLAG_GCVERIFY                   = 0x4,
798                 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL             = 0x8
799         } drsuapi_DsNameFlags;
800
801         typedef [v1_enum] enum {
802                 DRSUAPI_DS_NAME_FORMAT_UKNOWN                   = 0,
803                 DRSUAPI_DS_NAME_FORMAT_FQDN_1779                = 1,
804                 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT              = 2,
805                 DRSUAPI_DS_NAME_FORMAT_DISPLAY                  = 3,
806                 DRSUAPI_DS_NAME_FORMAT_GUID                     = 6,
807                 DRSUAPI_DS_NAME_FORMAT_CANONICAL                = 7,
808                 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL           = 8,
809                 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX             = 9,
810                 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL        = 10,
811                 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY       = 11,
812                 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN               = 12
813         } drsuapi_DsNameFormat;
814
815         typedef struct {
816                 [string,charset(UTF16)] uint16 *str;
817         } drsuapi_DsNameString;
818
819         typedef struct {
820                 uint32 unknown1; /* 0x000004e4 */
821                 uint32 unknown2; /* 0x00000407 */
822                 drsuapi_DsNameFlags format_flags;
823                 drsuapi_DsNameFormat format_offered;
824                 drsuapi_DsNameFormat format_desired;
825                 [range(1,10000)] uint32 count;
826                 [size_is(count)] drsuapi_DsNameString *names;
827         } drsuapi_DsNameRequest1;
828
829         typedef [switch_type(int32)] union {
830                 [case(1)] drsuapi_DsNameRequest1 req1;
831         } drsuapi_DsNameRequest;
832
833         typedef struct {
834                 drsuapi_DsNameStatus status;
835                 [charset(UTF16),string] uint16 *dns_domain_name;
836                 [charset(UTF16),string] uint16 *result_name;
837         } drsuapi_DsNameInfo1;
838
839         typedef struct {
840                 uint32 count;
841                 [size_is(count)] drsuapi_DsNameInfo1 *array;
842         } drsuapi_DsNameCtr1;
843
844         typedef [switch_type(int32)] union {
845                 [case(1)] drsuapi_DsNameCtr1 *ctr1;
846         } drsuapi_DsNameCtr;
847
848         WERROR drsuapi_DsCrackNames(
849                 [in] policy_handle *bind_handle,
850                 [in, out] int32 level,
851                 [in,switch_is(level)] drsuapi_DsNameRequest req,
852                 [out,switch_is(level)] drsuapi_DsNameCtr ctr
853                 );
854
855         /*****************/
856         /* Function 0x0d */
857         typedef [v1_enum] enum {
858                 DRSUAPI_DS_SPN_OPERATION_ADD    = 0,
859                 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1,
860                 DRSUAPI_DS_SPN_OPERATION_DELETE = 2
861         } drsuapi_DsSpnOperation;
862
863         typedef struct {
864                 drsuapi_DsSpnOperation operation;
865                 uint32 unknown1;
866                 [charset(UTF16),string] uint16 *object_dn;
867                 [range(0,10000)] uint32 count;
868                 [size_is(count)] drsuapi_DsNameString *spn_names;
869         } drsuapi_DsWriteAccountSpnRequest1;
870
871         typedef [switch_type(int32)] union {
872                 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1;
873         } drsuapi_DsWriteAccountSpnRequest;
874
875         typedef struct {
876                 WERROR status;
877         } drsuapi_DsWriteAccountSpnResult1;
878
879         typedef [switch_type(int32)] union {
880                 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1;
881         } drsuapi_DsWriteAccountSpnResult;
882
883         WERROR drsuapi_DsWriteAccountSpn(
884                 [in] policy_handle *bind_handle,
885                 [in,out] int32 level,
886                 [in,switch_is(level)] drsuapi_DsWriteAccountSpnRequest req,
887                 [out,switch_is(level)] drsuapi_DsWriteAccountSpnResult res
888                 );
889
890         /*****************/
891         /* Function 0x0e */
892         WERROR DRSUAPI_REMOVE_DS_SERVER();
893
894         /*****************/
895         /* Function 0x0f */
896         WERROR DRSUAPI_REMOVE_DS_DOMAIN();
897
898         /*****************/
899         /* Function 0x10 */
900         typedef struct {
901                 [charset(UTF16),string] uint16 *domain_name; /* netbios or dns */
902                 int32 level; /* specifies the switch level for the request */
903         } drsuapi_DsGetDCInfoRequest1;
904
905         typedef [switch_type(int32)] union {
906                 [case(1)] drsuapi_DsGetDCInfoRequest1 req1;
907         } drsuapi_DsGetDCInfoRequest;
908
909         typedef struct {
910                 [charset(UTF16),string] uint16 *netbios_name;
911                 [charset(UTF16),string] uint16 *dns_name;
912                 [charset(UTF16),string] uint16 *site_name;
913                 [charset(UTF16),string] uint16 *computer_dn;
914                 [charset(UTF16),string] uint16 *server_dn;
915                 uint32 is_pdc;
916                 uint32 is_enabled;
917         } drsuapi_DsGetDCInfo1;
918
919         typedef struct {
920                 [range(0,10000)] uint32 count;
921                 [size_is(count)] drsuapi_DsGetDCInfo1 *array;
922         } drsuapi_DsGetDCInfoCtr1;
923
924         typedef struct {
925                 [charset(UTF16),string] uint16 *netbios_name;
926                 [charset(UTF16),string] uint16 *dns_name;
927                 [charset(UTF16),string] uint16 *site_name;
928                 [charset(UTF16),string] uint16 *site_dn;
929                 [charset(UTF16),string] uint16 *computer_dn;
930                 [charset(UTF16),string] uint16 *server_dn;
931                 [charset(UTF16),string] uint16 *ntds_dn;
932                 uint32 is_pdc;
933                 uint32 is_enabled;
934                 uint32 is_gc;
935                 GUID site_guid;
936                 GUID computer_guid;
937                 GUID server_guid;
938                 GUID ntds_guid;
939         } drsuapi_DsGetDCInfo2;
940
941         typedef struct {
942                 [range(0,10000)] uint32 count;
943                 [size_is(count)] drsuapi_DsGetDCInfo2 *array;
944         } drsuapi_DsGetDCInfoCtr2;
945
946         typedef struct {
947                 uint32 unknown1;
948                 uint32 unknown2;
949                 uint32 unknown3;
950                 uint32 unknown4;
951                 uint32 unknown5;
952                 uint32 unknown6;
953                 [charset(UTF16),string] uint16 *server_nt4_account;
954         } drsuapi_DsGetDCInfo01;
955
956         typedef struct {
957                 [range(0,10000)] uint32 count;
958                 [size_is(count)] drsuapi_DsGetDCInfo01 *array;
959         } drsuapi_DsGetDCInfoCtr01;
960
961         typedef [v1_enum] enum {
962                 DRSUAPI_DC_INFO_CTR_1  = 1,
963                 DRSUAPI_DC_INFO_CTR_2  = 2,
964                 DRSUAPI_DC_INFO_CTR_01 = -1
965         } drsuapi_DsGetDCInfoCtrLevels;
966
967         typedef [switch_type(int32)] union {
968                 [case(DRSUAPI_DC_INFO_CTR_1)]  drsuapi_DsGetDCInfoCtr1  ctr1;
969                 [case(DRSUAPI_DC_INFO_CTR_2)]  drsuapi_DsGetDCInfoCtr2  ctr2;
970                 [case(DRSUAPI_DC_INFO_CTR_01)] drsuapi_DsGetDCInfoCtr01 ctr01;
971         } drsuapi_DsGetDCInfoCtr;
972
973         WERROR drsuapi_DsGetDomainControllerInfo(
974                 [in] policy_handle *bind_handle,
975                 [in, out] int32 level,
976                 [in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
977                 [out,switch_is(level)] drsuapi_DsGetDCInfoCtr ctr
978                 );
979
980         /*****************/
981         /* Function 0x11 */
982         typedef [public,noprint] struct {
983                 drsuapi_DsReplicaObjectListItem *next_object;
984                 drsuapi_DsReplicaObject object;
985         } drsuapi_DsReplicaObjectListItem;
986
987         /*
988          * please note the the current idl
989          * for DsAddEntry does only parse 
990          * what I saw between 2 w2k3 boxes
991          * in my dssync experiments I got some other replies
992          * so all I want to say is that this is very incomplete yet...
993          * --metze
994          */
995         typedef struct {
996                 drsuapi_DsReplicaObjectListItem first_object;
997         } drsuapi_DsAddEntryRequest2;
998
999         typedef [switch_type(int32)] union {
1000                 [case(2)] drsuapi_DsAddEntryRequest2 req2;
1001         } drsuapi_DsAddEntryRequest;
1002
1003         typedef struct {
1004                 uint32 unknown1;
1005                 WERROR status;
1006                 uint32 unknown2;
1007                 uint16 unknown3;
1008         } drsuapi_DsAddEntryErrorInfoX;
1009
1010         typedef struct {
1011                 [range(0,10485760)] uint32 size;
1012                 [size_is(size)] uint8 *data;
1013         } drsuapi_DsAddEntryExtraErrorBuffer;
1014
1015         typedef struct {
1016                 drsuapi_DsAddEntryErrorInfoX error;
1017                 drsuapi_DsAttributeId attid;
1018                 uint32 unknown2;
1019                 drsuapi_DsAddEntryExtraErrorBuffer buffer;
1020         } drsuapi_DsAddEntryExtraError1;
1021
1022         typedef /*[noprint]*/ struct {
1023                 drsuapi_DsAddEntryErrorListItem1 *next;
1024                 drsuapi_DsAddEntryExtraError1 error;
1025         } drsuapi_DsAddEntryErrorListItem1;
1026
1027         typedef struct {
1028                 drsuapi_DsReplicaObjectIdentifier *id;
1029                 WERROR status;
1030                 drsuapi_DsAddEntryErrorListItem1 first;
1031         } drsuapi_DsAddEntryErrorInfo1;
1032
1033         typedef [switch_type(uint32)] union {
1034                 [case(1)] drsuapi_DsAddEntryErrorInfo1 error1;
1035 /*              [case(2)] drsuapi_DsAddEntryErrorInfo2 error2;
1036                 [case(3)] drsuapi_DsAddEntryErrorInfo3 error3;
1037 */              [case(4)] drsuapi_DsAddEntryErrorInfoX error4;
1038                 [case(5)] drsuapi_DsAddEntryErrorInfoX error5;
1039                 [case(6)] drsuapi_DsAddEntryErrorInfoX error6;
1040                 [case(7)] drsuapi_DsAddEntryErrorInfoX error7;
1041         } drsuapi_DsAddEntryErrorInfo;
1042
1043         typedef struct {
1044                 WERROR status;
1045                 uint32 level;
1046                 [switch_is(level)] drsuapi_DsAddEntryErrorInfo *info;
1047         } drsuapi_DsAddEntryError1;
1048
1049         typedef [switch_type(uint32)] union {
1050                 [case(1)] drsuapi_DsAddEntryError1 info1;
1051         } drsuapi_DsAddEntryError;
1052
1053         typedef struct {
1054                 GUID guid;
1055                 dom_sid28 sid;
1056         } drsuapi_DsReplicaObjectIdentifier2;
1057
1058         typedef struct {
1059                 drsuapi_DsReplicaObjectIdentifier *id;
1060                 uint32 unknown1;
1061                 drsuapi_DsAddEntryErrorInfoX error;
1062                 [range(0,10000)] uint32 count;
1063                 [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects;
1064         } drsuapi_DsAddEntryCtr2;
1065
1066         typedef struct {
1067                 drsuapi_DsReplicaObjectIdentifier *id;
1068                 uint32 level;
1069                 [switch_is(level)] drsuapi_DsAddEntryError *error;
1070                 [range(0,10000)] uint32 count;
1071                 [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects;
1072         } drsuapi_DsAddEntryCtr3;
1073
1074         typedef [switch_type(int32)] union {
1075                 [case(2)] drsuapi_DsAddEntryCtr2 ctr2;
1076                 [case(3)] drsuapi_DsAddEntryCtr3 ctr3;
1077         } drsuapi_DsAddEntryCtr;
1078
1079         WERROR drsuapi_DsAddEntry(
1080                 [in] policy_handle *bind_handle,
1081                 [in,out] int32 level,
1082                 [in,switch_is(level)] drsuapi_DsAddEntryRequest req,
1083                 [out,switch_is(level)] drsuapi_DsAddEntryCtr ctr
1084                 );
1085
1086         /*****************/
1087         /* Function 0x12 */
1088         WERROR DRSUAPI_EXECUTE_KCC();
1089
1090         /*****************/
1091         /* Function 0x13 */
1092         typedef [v1_enum] enum {
1093                 DRSUAPI_DS_REPLICA_GET_INFO                             = 1,
1094                 DRSUAPI_DS_REPLICA_GET_INFO2                            = 2
1095         } drsuapi_DsReplicaGetInfoLevel;
1096
1097         typedef [v1_enum] enum {
1098                 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS                       = 0,
1099                 DRSUAPI_DS_REPLICA_INFO_CURSORS                         = 1,
1100                 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA                    = 2,
1101                 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES        = 3,
1102                 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES           = 4,
1103                 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS                     = 5,
1104                 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA        = 6,
1105                 DRSUAPI_DS_REPLICA_INFO_CURSORS2                        = 7,
1106                 DRSUAPI_DS_REPLICA_INFO_CURSORS3                        = 8,
1107                 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2                   = 9,
1108                 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2       = 10,
1109                 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02                     = -2,
1110                 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04                   = -4,
1111                 DRSUAPI_DS_REPLICA_INFO_CURSURS05                       = -5,
1112                 DRSUAPI_DS_REPLICA_INFO_06                              = -6
1113         } drsuapi_DsReplicaInfoType;
1114
1115         typedef struct {
1116                 drsuapi_DsReplicaInfoType info_type;
1117                 [charset(UTF16),string] uint16 *object_dn;
1118                 GUID guid1;
1119         } drsuapi_DsReplicaGetInfoRequest1;
1120
1121         typedef struct {
1122                 drsuapi_DsReplicaInfoType info_type;
1123                 [charset(UTF16),string] uint16 *object_dn;
1124                 GUID guid1;
1125                 uint32 unknown1;
1126                 [charset(UTF16),string] uint16 *string1;
1127                 [charset(UTF16),string] uint16 *string2;
1128                 uint32 unknown2;
1129         } drsuapi_DsReplicaGetInfoRequest2;
1130
1131         typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
1132                 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1;
1133                 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2;
1134         } drsuapi_DsReplicaGetInfoRequest;
1135
1136         typedef struct {
1137                 [charset(UTF16),string] uint16 *naming_context_dn;
1138                 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
1139                 [charset(UTF16),string] uint16 *source_dsa_address;
1140                 [charset(UTF16),string] uint16 *transport_obj_dn;
1141                 drsuapi_DsReplicaNeighbourFlags replica_flags;
1142                 uint32 reserved;
1143                 GUID naming_context_obj_guid;
1144                 GUID source_dsa_obj_guid;
1145                 GUID source_dsa_invocation_id;
1146                 GUID transport_obj_guid;
1147                 hyper tmp_highest_usn;
1148                 hyper highest_usn;
1149                 NTTIME last_success;
1150                 NTTIME last_attempt;
1151                 WERROR result_last_attempt;
1152                 uint32 consecutive_sync_failures;
1153         } drsuapi_DsReplicaNeighbour;
1154
1155         typedef struct {
1156                 uint32 count;
1157                 uint32 reserved;
1158                 [size_is(count)] drsuapi_DsReplicaNeighbour array[];
1159         } drsuapi_DsReplicaNeighbourCtr;
1160
1161         typedef struct {
1162                 uint32 count;
1163                 uint32 reserved;
1164                 [size_is(count)] drsuapi_DsReplicaCoursor array[];
1165         } drsuapi_DsReplicaCoursorCtr;
1166
1167         typedef struct {
1168                 [charset(UTF16),string] uint16 *attribute_name;
1169                 uint32 version;
1170                 NTTIME originating_last_changed;
1171                 GUID originating_dsa_invocation_id;
1172                 hyper originating_usn;
1173                 hyper local_usn;
1174         } drsuapi_DsReplicaObjMetaData;
1175
1176         typedef struct {
1177                 uint32 count;
1178                 uint32 reserved;
1179                 [size_is(count)] drsuapi_DsReplicaObjMetaData array[];
1180         } drsuapi_DsReplicaObjMetaDataCtr;
1181
1182         typedef struct {
1183                 [charset(UTF16),string] uint16 *dsa_obj_dn;
1184                 GUID dsa_obj_guid;
1185                 NTTIME first_failure;
1186                 uint32 num_failures;
1187                 WERROR last_result;
1188         } drsuapi_DsReplicaKccDsaFailure;
1189
1190         typedef struct {
1191                 uint32 count;
1192                 uint32 reserved;
1193                 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[];
1194         } drsuapi_DsReplicaKccDsaFailuresCtr;
1195
1196         typedef enum {
1197                 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC         = 0,
1198                 DRSUAPI_DS_REPLICA_OP_TYPE_ADD          = 1,
1199                 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE       = 2,
1200                 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY       = 3,
1201                 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS  = 4
1202         } drsuapi_DsReplicaOpType;
1203
1204         typedef [switch_type(drsuapi_DsReplicaOpType)] union {
1205                 [case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)]         drsuapi_DsReplicaSyncOptions sync;
1206                 [case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)]          drsuapi_DsReplicaAddOptions add;
1207                 [case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)]       drsuapi_DsReplicaDeleteOptions delete;
1208                 [case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)]       drsuapi_DsReplicaModifyOptions modify;
1209                 [case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)]  drsuapi_DsReplicaUpdateRefsOptions update_refs;
1210                 [default] uint32 unknown;
1211         } drsuapi_DsRplicaOpOptions;
1212
1213         typedef struct {
1214                 NTTIME operation_start;
1215                 uint32 serial_num; /* unique till reboot */
1216                 uint32 priority;
1217                 drsuapi_DsReplicaOpType operation_type;
1218                 [switch_is(operation_type)] drsuapi_DsRplicaOpOptions options;
1219                 [charset(UTF16),string] uint16 *nc_dn;
1220                 [charset(UTF16),string] uint16 *remote_dsa_obj_dn;
1221                 [charset(UTF16),string] uint16 *remote_dsa_address;
1222                 GUID nc_obj_guid;
1223                 GUID remote_dsa_obj_guid;
1224         } drsuapi_DsReplicaOp;
1225
1226         typedef struct {
1227                 NTTIME time;
1228                 uint32 count;
1229                 [size_is(count)] drsuapi_DsReplicaOp array[];
1230         } drsuapi_DsReplicaOpCtr;
1231
1232         typedef struct {
1233                 [charset(UTF16),string] uint16 *attribute_name;
1234                 [charset(UTF16),string] uint16 *object_dn;
1235                 uint32 value_length;
1236                 [size_is(value_length)] uint8 *value;
1237                 NTTIME deleted;
1238                 NTTIME created;
1239                 uint32 version;
1240                 NTTIME originating_last_changed;
1241                 GUID originating_dsa_invocation_id;
1242                 hyper originating_usn;
1243                 hyper local_usn;
1244         } drsuapi_DsReplicaAttrValMetaData;
1245
1246         typedef struct {
1247                 uint32 count;
1248                 int32 enumeration_context;
1249                 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
1250         } drsuapi_DsReplicaAttrValMetaDataCtr;
1251
1252         typedef struct {
1253                 uint32 count;
1254                 int32 enumeration_context;
1255                 [size_is(count)] drsuapi_DsReplicaCoursor2 array[];
1256         } drsuapi_DsReplicaCoursor2Ctr;
1257
1258         typedef struct {
1259                 GUID source_dsa_invocation_id;
1260                 hyper highest_usn;
1261                 NTTIME last_sync_success;
1262                 [charset(UTF16),string] uint16 *source_dsa_obj_dn;
1263         } drsuapi_DsReplicaCoursor3;
1264
1265         typedef struct {
1266                 uint32 count;
1267                 int32 enumeration_context;
1268                 [size_is(count)] drsuapi_DsReplicaCoursor3 array[];
1269         } drsuapi_DsReplicaCoursor3Ctr;
1270
1271         typedef struct {
1272                 [charset(UTF16),string] uint16 *attribute_name;
1273                 uint32 version;
1274                 NTTIME originating_last_changed;
1275                 GUID originating_dsa_invocation_id;
1276                 hyper originating_usn;
1277                 hyper local_usn;
1278                 [charset(UTF16),string] uint16 *originating_dsa_obj_dn;
1279         } drsuapi_DsReplicaObjMetaData2;
1280
1281         typedef struct {
1282                 uint32 count;
1283                 int32 enumeration_context;
1284                 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
1285         } drsuapi_DsReplicaObjMetaData2Ctr;
1286
1287         typedef struct {
1288                 [charset(UTF16),string] uint16 *attribute_name;
1289                 [charset(UTF16),string] uint16 *object_dn;
1290                 uint32 value_length;
1291                 [size_is(value_length)] uint8 *value;
1292                 NTTIME deleted;
1293                 NTTIME created;
1294                 uint32 version;
1295                 NTTIME originating_last_changed;
1296                 GUID originating_dsa_invocation_id;
1297                 hyper originating_usn;
1298                 hyper local_usn;
1299                 [charset(UTF16),string] uint16 *originating_dsa_obj_dn;
1300         } drsuapi_DsReplicaAttrValMetaData2;
1301
1302         typedef struct {
1303                 uint32 count;
1304                 int32 enumeration_context;
1305                 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
1306         } drsuapi_DsReplicaAttrValMetaData2Ctr;
1307
1308         typedef struct {
1309                 hyper u1; /* session number? */
1310                 uint32 u2;
1311                 uint32 u3;
1312                 GUID bind_guid;
1313                 NTTIME_1sec bind_time;
1314                 uint32 u4; /* flags? */
1315                 uint32 u5;
1316         } drsuapi_DsReplicaConnection04;
1317
1318         typedef struct {
1319                 [range(0,10000)] uint32 count;
1320                 uint32 reserved;
1321                 [size_is(count)] drsuapi_DsReplicaConnection04 array[];
1322         } drsuapi_DsReplicaConnection04Ctr;
1323
1324         typedef struct {
1325                 [charset(UTF16),string] uint16 *str1;
1326                 uint32 u1;
1327                 uint32 u2;
1328                 uint32 u3;
1329                 uint32 u4;
1330                 uint32 u5;
1331                 hyper u6;
1332                 uint32 u7;
1333         } drsuapi_DsReplica06;
1334
1335         typedef struct {
1336                 [range(0,256)] uint32 count;
1337                 uint32 reserved;
1338                 [size_is(count)] drsuapi_DsReplica06 array[];
1339         } drsuapi_DsReplica06Ctr;
1340
1341         typedef [switch_type(drsuapi_DsReplicaInfoType)] union {
1342                 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours;
1343                 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCoursorCtr *coursors;
1344                 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata;
1345                 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures;
1346                 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures;
1347                 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops;
1348                 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata;
1349                 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCoursor2Ctr *coursors2;
1350                 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCoursor3Ctr *coursors3;
1351                 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2;
1352                 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2;
1353                 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02;
1354                 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04;
1355                 [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCoursorCtrEx *coursors05;
1356                 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
1357         } drsuapi_DsReplicaInfo;
1358
1359         WERROR drsuapi_DsReplicaGetInfo(
1360                 [in] policy_handle *bind_handle,
1361                 [in] drsuapi_DsReplicaGetInfoLevel level,
1362                 [in,switch_is(level)] drsuapi_DsReplicaGetInfoRequest req,
1363                 [out] drsuapi_DsReplicaInfoType info_type,
1364                 [out,switch_is(info_type)] drsuapi_DsReplicaInfo info
1365                 );
1366
1367         /*****************/
1368         /* Function 0x14 */
1369         WERROR DRSUAPI_ADD_SID_HISTORY();
1370
1371         /*****************/
1372         /* Function 0x15 */
1373         WERROR DRSUAPI_GET_MEMBERSHIPS2();
1374
1375         /*****************/
1376         /* Function 0x16 */
1377         WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
1378
1379         /*****************/
1380         /* Function 0x17 */
1381         WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
1382
1383         /*****************/
1384         /* Function 0x18 */
1385         WERROR DRSUAPI_QUERY_SITES_BY_COST();
1386 }