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