diff options
| -rw-r--r-- | librpc/idl/drsuapi.idl (renamed from source3/librpc/idl/drsuapi.idl) | 12 | ||||
| -rw-r--r-- | librpc/ndr/ndr_drsuapi.c (renamed from source4/librpc/ndr/ndr_drsuapi.c) | 8 | ||||
| -rw-r--r-- | librpc/ndr/ndr_drsuapi.h (renamed from source4/librpc/ndr/ndr_drsuapi.h) | 8 | ||||
| -rw-r--r-- | source3/librpc/ndr/ndr_drsuapi.c | 351 | ||||
| -rw-r--r-- | source3/librpc/ndr/ndr_drsuapi.h | 35 | ||||
| -rw-r--r-- | source4/librpc/idl/drsuapi.idl | 1602 | 
6 files changed, 14 insertions, 2002 deletions
diff --git a/source3/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl index 9d7c9d9789..afea8f3efb 100644 --- a/source3/librpc/idl/drsuapi.idl +++ b/librpc/idl/drsuapi.idl @@ -2,7 +2,7 @@  import "security.idl", "misc.idl", "samr.idl"; -[  +[    uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"),    version(4.0),    endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"), @@ -115,11 +115,11 @@ interface drsuapi  	} drsuapi_DsBindInfoCtr;  	/* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work -	 *  +	 *  	 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04  	 */  	const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d"; -	/*  +	/*  	 * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges()  	 * as administrator and this values are also used in the destination_dsa_guid field  	 * of drsuapi_DsGetNCChangesReq5/8 and the source_dsa_guid is zero. @@ -232,7 +232,7 @@ interface drsuapi  		DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED				= 0x01000000,  		DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS	= 0x04000000,  		DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC		= 0x08000000, -		/*  +		/*  		 * the following NOTE applies to DsGetNCChangesRequest5:  		 *  - the data is only compressed when 10 or more objects are replicated  		 *  - but there could also be a size limit of 35 KBytes or something like that @@ -454,7 +454,7 @@ interface drsuapi  		DRSUAPI_ATTRIBUTE_objectCategory		= 0x0009030e,  		DRSUAPI_ATTRIBUTE_gPLink			= 0x0009037b,  		DRSUAPI_ATTRIBUTE_msDS_Behavior_Version		= 0x000905b3, -		DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber		= 0x000906f6,		 +		DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber		= 0x000906f6,  		DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs		= 0x0009071c,  		DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs		= 0x0009072c  	} drsuapi_DsAttributeId; @@ -1144,7 +1144,7 @@ interface drsuapi  	/*  	 * please note the the current idl -	 * for DsAddEntry does only parse  +	 * for DsAddEntry does only parse  	 * what I saw between 2 w2k3 boxes  	 * in my dssync experiments I got some other replies  	 * so all I want to say is that this is very incomplete yet... diff --git a/source4/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c index 064b50a9cd..20674e221d 100644 --- a/source4/librpc/ndr/ndr_drsuapi.c +++ b/librpc/ndr/ndr_drsuapi.c @@ -1,4 +1,4 @@ -/*  +/*     Unix SMB/CIFS implementation.     routines for printing some linked list structs in DRSUAPI @@ -9,12 +9,12 @@     it under the terms of the GNU General Public License as published by     the Free Software Foundation; either version 3 of the License, or     (at your option) any later version. -    +     This program is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     GNU General Public License for more details. -    +     You should have received a copy of the GNU General Public License     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ @@ -26,7 +26,7 @@  #include "../lib/util/asn1.h"  #include "librpc/ndr/ndr_compression.h" -void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name,  +void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name,  					       const struct drsuapi_DsReplicaObjectListItem *r)  {  	ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectListItem"); diff --git a/source4/librpc/ndr/ndr_drsuapi.h b/librpc/ndr/ndr_drsuapi.h index c663eadd7a..12c2c78bde 100644 --- a/source4/librpc/ndr/ndr_drsuapi.h +++ b/librpc/ndr/ndr_drsuapi.h @@ -1,4 +1,4 @@ -/*  +/*     Unix SMB/CIFS implementation.     routines for printing some linked list structs in DRSUAPI @@ -9,12 +9,12 @@     it under the terms of the GNU General Public License as published by     the Free Software Foundation; either version 3 of the License, or     (at your option) any later version. -    +     This program is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     GNU General Public License for more details. -    +     You should have received a copy of the GNU General Public License     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ @@ -22,7 +22,7 @@  #ifndef _LIBRPC_NDR_NDR_DRSUAPI_H  #define _LIBRPC_NDR_NDR_DRSUAPI_H -void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name,  +void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name,  					       const struct drsuapi_DsReplicaObjectListItem *r);  void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const char *name, diff --git a/source3/librpc/ndr/ndr_drsuapi.c b/source3/librpc/ndr/ndr_drsuapi.c deleted file mode 100644 index 8bc44dcc36..0000000000 --- a/source3/librpc/ndr/ndr_drsuapi.c +++ /dev/null @@ -1,351 +0,0 @@ -/* -   Unix SMB/CIFS implementation. - -   routines for printing some linked list structs in DRSUAPI - -   Copyright (C) Stefan (metze) Metzmacher 2005 - -   This program is free software; you can redistribute it and/or modify -   it under the terms of the GNU General Public License as published by -   the Free Software Foundation; either version 3 of the License, or -   (at your option) any later version. - -   This program is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. - -   You should have received a copy of the GNU General Public License -   along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - - -#include "includes.h" -#include "librpc/gen_ndr/ndr_drsuapi.h" -#include "librpc/gen_ndr/ndr_misc.h" -#include "../lib/util/asn1.h" -#include "librpc/ndr/ndr_compression.h" - -void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name, -					       const struct drsuapi_DsReplicaObjectListItem *r) -{ -	ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectListItem"); -	ndr->depth++; -	ndr_print_ptr(ndr, "next_object", r->next_object); -	ndr_print_drsuapi_DsReplicaObject(ndr, "object", &r->object); -	ndr->depth--; -	if (r->next_object) { -		ndr_print_drsuapi_DsReplicaObjectListItem(ndr, "next_object", r->next_object); -	} -} - -void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const char *name, const struct drsuapi_DsReplicaObjectListItemEx *r) -{ -	ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectListItemEx"); -	ndr->depth++; -	ndr_print_ptr(ndr, "next_object", r->next_object); -	ndr_print_drsuapi_DsReplicaObject(ndr, "object", &r->object); -	ndr_print_uint32(ndr, "is_nc_prefix", r->is_nc_prefix); -	ndr_print_ptr(ndr, "parent_object_guid", r->parent_object_guid); -	ndr->depth++; -	if (r->parent_object_guid) { -		ndr_print_GUID(ndr, "parent_object_guid", r->parent_object_guid); -	} -	ndr->depth--; -	ndr_print_ptr(ndr, "meta_data_ctr", r->meta_data_ctr); -	ndr->depth++; -	if (r->meta_data_ctr) { -		ndr_print_drsuapi_DsReplicaMetaDataCtr(ndr, "meta_data_ctr", r->meta_data_ctr); -	} -	ndr->depth--; -	ndr->depth--; -	if (r->next_object) { -		ndr_print_drsuapi_DsReplicaObjectListItemEx(ndr, "next_object", r->next_object); -	} -} - -#define _OID_PUSH_CHECK(call) do { \ -	bool _status; \ -	_status = call; \ -	if (_status != true) { \ -		return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "OID Conversion Error: %s\n", __location__); \ -	} \ -} while (0) - -#define _OID_PULL_CHECK(call) do { \ -	bool _status; \ -	_status = call; \ -	if (_status != true) { \ -		return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "OID Conversion Error: %s\n", __location__); \ -	} \ -} while (0) - -enum ndr_err_code ndr_push_drsuapi_DsReplicaOID(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsReplicaOID *r) -{ -	if (ndr_flags & NDR_SCALARS) { -		NDR_CHECK(ndr_push_align(ndr, 4)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_drsuapi_DsReplicaOID_oid(r->oid, 0))); -		NDR_CHECK(ndr_push_unique_ptr(ndr, r->oid)); -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->oid) { -			DATA_BLOB blob; - -			if (StrnCaseCmp("ff", r->oid, 2) == 0) { -				blob = strhex_to_data_blob(NULL, r->oid); -				if (!blob.data) { -					return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, -							      "HEX String Conversion Error: %s\n", -							      __location__); -				} -			} else { -				_OID_PUSH_CHECK(ber_write_OID_String(&blob, r->oid)); -			} -			talloc_steal(ndr, blob.data); - -			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, blob.length)); -			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, blob.data, blob.length)); -		} -	} -	return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_drsuapi_DsReplicaOID(struct ndr_pull *ndr, int ndr_flags, struct drsuapi_DsReplicaOID *r) -{ -	uint32_t _ptr_oid; -	TALLOC_CTX *_mem_save_oid_0; -	if (ndr_flags & NDR_SCALARS) { -		NDR_CHECK(ndr_pull_align(ndr, 4)); -		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->__ndr_size)); -		if (r->__ndr_size < 0 || r->__ndr_size > 10000) { -			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range"); -		} -		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_oid)); -		if (_ptr_oid) { -			NDR_PULL_ALLOC(ndr, r->oid); -		} else { -			r->oid = NULL; -		} -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->oid) { -			DATA_BLOB _oid_array; -			const char *_oid; - -			_mem_save_oid_0 = NDR_PULL_GET_MEM_CTX(ndr); -			NDR_PULL_SET_MEM_CTX(ndr, ndr, 0); -			NDR_CHECK(ndr_pull_array_size(ndr, &r->oid)); -			_oid_array.length = ndr_get_array_size(ndr, &r->oid); -			NDR_PULL_ALLOC_N(ndr, _oid_array.data, _oid_array.length); -			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, _oid_array.data, _oid_array.length)); -			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_oid_0, 0); - -			if (_oid_array.length && _oid_array.data[0] == 0xFF) { -				_oid = data_blob_hex_string(ndr, &_oid_array); -				NDR_ERR_HAVE_NO_MEMORY(_oid); -			} else { -				_OID_PULL_CHECK(ber_read_OID_String(ndr, _oid_array, &_oid)); -			} -			data_blob_free(&_oid_array); -			talloc_steal(r->oid, _oid); -			r->oid = _oid; -		} -		if (r->oid) { -			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->oid, r->__ndr_size)); -		} -	} -	return NDR_ERR_SUCCESS; -} - -size_t ndr_size_drsuapi_DsReplicaOID_oid(const char *oid, int flags) -{ -	DATA_BLOB _blob; -	size_t ret = 0; - -	if (!oid) return 0; - -	if (StrnCaseCmp("ff", oid, 2) == 0) { -		_blob = strhex_to_data_blob(NULL, oid); -		if (_blob.data) { -			ret = _blob.length; -		} -	} else { -		if (ber_write_OID_String(&_blob, oid)) { -			ret = _blob.length; -		} -	} -	data_blob_free(&_blob); -	return ret; -} - -enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesMSZIPCtr1(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsGetNCChangesMSZIPCtr1 *r) -{ -	if (ndr_flags & NDR_SCALARS) { -		uint32_t decompressed_length = 0; -		uint32_t compressed_length = 0; -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					decompressed_length = _ndr_ts_compressed->offset; -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -				} -				compressed_length = _ndr_ts->offset; -				talloc_free(_ndr_ts); -			} -		} -		NDR_CHECK(ndr_push_align(ndr, 4)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, decompressed_length)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, compressed_length)); -		NDR_CHECK(ndr_push_unique_ptr(ndr, r->ts)); -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -				} -				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_ts, 4, -1)); -			} -		} -	} -	return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesMSZIPCtr6(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsGetNCChangesMSZIPCtr6 *r) -{ -	if (ndr_flags & NDR_SCALARS) { -		uint32_t decompressed_length = 0; -		uint32_t compressed_length = 0; -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					decompressed_length = _ndr_ts_compressed->offset; -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -				} -				compressed_length = _ndr_ts->offset; -				talloc_free(_ndr_ts); -			} -		} -		NDR_CHECK(ndr_push_align(ndr, 4)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, decompressed_length)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, compressed_length)); -		NDR_CHECK(ndr_push_unique_ptr(ndr, r->ts)); -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_MSZIP, -1)); -				} -				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_ts, 4, -1)); -			} -		} -	} -	return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesXPRESSCtr1(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsGetNCChangesXPRESSCtr1 *r) -{ -	if (ndr_flags & NDR_SCALARS) { -		uint32_t decompressed_length = 0; -		uint32_t compressed_length = 0; -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					decompressed_length = _ndr_ts_compressed->offset; -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -				} -				compressed_length = _ndr_ts->offset; -				talloc_free(_ndr_ts); -			} -		} -		NDR_CHECK(ndr_push_align(ndr, 4)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, decompressed_length)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, compressed_length)); -		NDR_CHECK(ndr_push_unique_ptr(ndr, r->ts)); -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr1TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -				} -				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_ts, 4, -1)); -			} -		} -	} -	return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesXPRESSCtr6(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsGetNCChangesXPRESSCtr6 *r) -{ -	if (ndr_flags & NDR_SCALARS) { -		uint32_t decompressed_length = 0; -		uint32_t compressed_length = 0; -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					decompressed_length = _ndr_ts_compressed->offset; -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -				} -				compressed_length = _ndr_ts->offset; -				talloc_free(_ndr_ts); -			} -		} -		NDR_CHECK(ndr_push_align(ndr, 4)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, decompressed_length)); -		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, compressed_length)); -		NDR_CHECK(ndr_push_unique_ptr(ndr, r->ts)); -	} -	if (ndr_flags & NDR_BUFFERS) { -		if (r->ts) { -			{ -				struct ndr_push *_ndr_ts; -				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_ts, 4, -1)); -				{ -					struct ndr_push *_ndr_ts_compressed; -					NDR_CHECK(ndr_push_compression_start(_ndr_ts, &_ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -					NDR_CHECK(ndr_push_drsuapi_DsGetNCChangesCtr6TS(_ndr_ts_compressed, NDR_SCALARS|NDR_BUFFERS, r->ts)); -					NDR_CHECK(ndr_push_compression_end(_ndr_ts, _ndr_ts_compressed, NDR_COMPRESSION_XPRESS, -1)); -				} -				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_ts, 4, -1)); -			} -		} -	} -	return NDR_ERR_SUCCESS; -} diff --git a/source3/librpc/ndr/ndr_drsuapi.h b/source3/librpc/ndr/ndr_drsuapi.h deleted file mode 100644 index c663eadd7a..0000000000 --- a/source3/librpc/ndr/ndr_drsuapi.h +++ /dev/null @@ -1,35 +0,0 @@ -/*  -   Unix SMB/CIFS implementation. - -   routines for printing some linked list structs in DRSUAPI - -   Copyright (C) Stefan (metze) Metzmacher 2005-2006 - -   This program is free software; you can redistribute it and/or modify -   it under the terms of the GNU General Public License as published by -   the Free Software Foundation; either version 3 of the License, or -   (at your option) any later version. -    -   This program is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. -    -   You should have received a copy of the GNU General Public License -   along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef _LIBRPC_NDR_NDR_DRSUAPI_H -#define _LIBRPC_NDR_NDR_DRSUAPI_H - -void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name,  -					       const struct drsuapi_DsReplicaObjectListItem *r); - -void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const char *name, -						 const struct drsuapi_DsReplicaObjectListItemEx *r); - -enum ndr_err_code ndr_push_drsuapi_DsReplicaOID(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsReplicaOID *r); -enum ndr_err_code ndr_pull_drsuapi_DsReplicaOID(struct ndr_pull *ndr, int ndr_flags, struct drsuapi_DsReplicaOID *r); -size_t ndr_size_drsuapi_DsReplicaOID_oid(const char *oid, int flags); - -#endif /* _LIBRPC_NDR_NDR_DRSUAPI_H */ diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl deleted file mode 100644 index 9d7c9d9789..0000000000 --- a/source4/librpc/idl/drsuapi.idl +++ /dev/null @@ -1,1602 +0,0 @@ -#include "idl_types.h" - -import "security.idl", "misc.idl", "samr.idl"; - -[  -  uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"), -  version(4.0), -  endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"), -  authservice("ldap"), -  helpstring("Active Directory Replication"), -  helper("librpc/ndr/ndr_drsuapi.h"), -  pointer_default(unique) -] -interface drsuapi -{ -	typedef bitmap samr_GroupAttrs samr_GroupAttrs; - -	/*****************/ -        /* Function 0x00 */ -        typedef [bitmap32bit] bitmap { -		DRSUAPI_SUPPORTED_EXTENSION_BASE			= 0x00000001, -		DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION		= 0x00000002, -		DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI			= 0x00000004, -		DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2			= 0x00000008, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS		= 0x00000010, -		DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1			= 0x00000020, -		DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION	= 0x00000040, -		DRSUAPI_SUPPORTED_EXTENSION_00000080			= 0x00000080, -		DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE			= 0x00000100, -		DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2			= 0x00000200, -		DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION	= 0x00000400, -		DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2			= 0x00000800, -		DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000, -		DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND			= 0x00002000, -		DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO		= 0x00004000, -		DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION		= 0x00008000, -		DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01			= 0x00010000, -		DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP	= 0x00020000, -		DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY		= 0x00040000, -		DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3			= 0x00080000, -		DRSUAPI_SUPPORTED_EXTENSION_00100000			= 0x00100000, -		DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2		= 0x00200000, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6		= 0x00400000, -		DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS		= 0x00800000, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8		= 0x01000000, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5		= 0x02000000, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6		= 0x04000000, -		/* -		 * the following 3 have the same value -		 * repadmin.exe /bind says that -		 */ -		DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3		= 0x08000000, -		DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7		= 0x08000000, -		DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT		= 0x08000000, -		DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS		= 0x10000000, -		DRSUAPI_SUPPORTED_EXTENSION_20000000			= 0x20000000, -		DRSUAPI_SUPPORTED_EXTENSION_40000000			= 0x40000000, -		DRSUAPI_SUPPORTED_EXTENSION_80000000			= 0x80000000 -	} drsuapi_SupportedExtensions; - -	typedef [bitmap32bit] bitmap { -		DRSUAPI_SUPPORTED_EXTENSION_ADAM			= 0x00000001, -		DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2			= 0x00000002 -	} drsuapi_SupportedExtensionsExt; - -	/* this is used by w2k */ -	typedef struct { -		drsuapi_SupportedExtensions supported_extensions; -		GUID site_guid; -		uint32 pid; -	} drsuapi_DsBindInfo24; - -	/* this is used by w2k3 */ -	typedef struct { -		drsuapi_SupportedExtensions supported_extensions; -		GUID site_guid; -		uint32 pid; -		uint32 repl_epoch; -	} drsuapi_DsBindInfo28; - -	/* this is used by w2k8 */ -	typedef struct { -		drsuapi_SupportedExtensions supported_extensions; -		GUID site_guid; -		uint32 pid; -		uint32 repl_epoch; -		drsuapi_SupportedExtensionsExt supported_extensions_ext; -		GUID config_dn_guid; -	} drsuapi_DsBindInfo48; - -	typedef struct { -		[flag(NDR_REMAINING)] DATA_BLOB info; -	} drsuapi_DsBindInfoFallBack; - -	typedef [nodiscriminant] union { -		[case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24; -		[case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28; -		[case(48)][subcontext(4)] drsuapi_DsBindInfo48 info48; -		[default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack; -	} drsuapi_DsBindInfo; - -	/* the drsuapi_DsBindInfoCtr was this before -	 * typedef [flag(NDR_PAHEX)] struct { -	 *	[range(1,10000)] uint32 length; -	 *	[size_is(length)] uint8 data[]; -	 * } drsuapi_DsBindInfo; -	 * -	 * but we don't want the caller to manually decode this blob, -	 * so we're doing it here -	 */ - -	typedef struct { -		[range(1,10000)] uint32 length; -		[switch_is(length)] drsuapi_DsBindInfo info; -	} drsuapi_DsBindInfoCtr; - -	/* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work -	 *  -	 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04 -	 */ -	const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d"; -	/*  -	 * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges() -	 * as administrator and this values are also used in the destination_dsa_guid field -	 * of drsuapi_DsGetNCChangesReq5/8 and the source_dsa_guid is zero. -	 */ -	const char *DRSUAPI_DS_BIND_GUID_W2K	= "6abec3d1-3054-41c8-a362-5a0c5b7d5d71"; -	const char *DRSUAPI_DS_BIND_GUID_W2K3	= "6afab99c-6e26-464a-975f-f58f105218bc"; - -	[public] WERROR drsuapi_DsBind( -		[in,unique]	    GUID *bind_guid, -		[in,out,unique]    drsuapi_DsBindInfoCtr *bind_info, -		[out]   policy_handle *bind_handle -		); - -	/*****************/ -        /* Function 0x01 */ -	WERROR drsuapi_DsUnbind( -		[in,out] policy_handle *bind_handle -		); - -	/*****************/ -	/* Function 0x02 */ -	typedef [public,gensize] struct { -		[value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size; -		[value(ndr_size_dom_sid28(&sid, ndr->flags))]  uint32 __ndr_size_sid; -		GUID guid; -		dom_sid28 sid; -		[value(strlen_m(dn))] uint32 __ndr_size_dn; -		[charset(UTF16),size_is(__ndr_size_dn+1)] uint16 dn[]; -	} drsuapi_DsReplicaObjectIdentifier; - -	typedef [public] bitmap { -		DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION	= 0x00000001, -		DRSUAPI_DS_REPLICA_SYNC_WRITEABLE		= 0x00000002, -		DRSUAPI_DS_REPLICA_SYNC_PERIODIC		= 0x00000004, -		DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING	= 0x00000008, -		DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES		= 0x00000010, -		DRSUAPI_DS_REPLICA_SYNC_FULL			= 0x00000020, -		DRSUAPI_DS_REPLICA_SYNC_URGENT			= 0x00000040, -		DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD		= 0x00000080, -		DRSUAPI_DS_REPLICA_SYNC_FORCE			= 0x00000100, -		DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE		= 0x00000200, -		DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED		= 0x00000400, -		DRSUAPI_DS_REPLICA_SYNC_TWO_WAY			= 0x00000800, -		DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY		= 0x00001000, -		DRSUAPI_DS_REPLICA_SYNC_INITIAL			= 0x00002000, -		DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION		= 0x00004000, -		DRSUAPI_DS_REPLICA_SYNC_ABANDONED		= 0x00008000, -		DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS	= 0x00010000, -		DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET	= 0x00020000, -		DRSUAPI_DS_REPLICA_SYNC_REQUEUE			= 0x00040000, -		DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION		= 0x00080000, -		DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA	= 0x00100000, -		DRSUAPI_DS_REPLICA_SYNC_CRITICAL		= 0x00200000, -		DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS	= 0x00400000, -		DRSUAPI_DS_REPLICA_SYNC_PREEMPTED		= 0x00800000 -	} drsuapi_DsReplicaSyncOptions; - -	typedef struct { -		drsuapi_DsReplicaObjectIdentifier *naming_context; -		GUID source_dsa_guid; -		astring *other_info; /* I assume this is related to the repsFromTo1OtherInfo dns_name */ -		drsuapi_DsReplicaSyncOptions options; -	} drsuapi_DsReplicaSyncRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsReplicaSyncRequest1 req1; -	} drsuapi_DsReplicaSyncRequest; - -	WERROR drsuapi_DsReplicaSync( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,switch_is(level)] drsuapi_DsReplicaSyncRequest req -		); - -	/*****************/ -	/* Function 0x03 */ -	typedef [public] struct { -		hyper tmp_highest_usn; /* updated after each object update */ -		hyper reserved_usn; -		hyper highest_usn; /* updated after a full replication cycle */ -	} drsuapi_DsReplicaHighWaterMark; - -	typedef [public] struct { -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		hyper highest_usn;  /* updated after a full replication cycle */ -	} drsuapi_DsReplicaCursor; - -	typedef struct { -		[value(1)] uint32 version; -		[value(0)] uint32 reserved1; -		[range(0,0x100000)] uint32 count; -		[value(0)] uint32 reserved2; -		[size_is(count)] drsuapi_DsReplicaCursor cursors[]; -	} drsuapi_DsReplicaCursorCtrEx; - -	typedef [public] bitmap { -		/* the _WRITEABLE flag indicates a replication with all attributes -		 * -		 * --metze -		 */ -		DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE				= 0x00000010, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP			= 0x00000020, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS			= 0x00000040, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT	= 0x00000080, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC			= 0x00000200, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS		= 0x00000800, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS			= 0x00001000, /* was 0x00010000, */ -		DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET			= 0x00002000, /* was 0x00020000, */ -		DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED			= 0x00200000, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED				= 0x01000000, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS	= 0x04000000, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC		= 0x08000000, -		/*  -		 * the following NOTE applies to DsGetNCChangesRequest5: -		 *  - the data is only compressed when 10 or more objects are replicated -		 *  - but there could also be a size limit of 35 KBytes or something like that -		 *  - the reply is DsGetNCChangesCtr2 -		 *  - maybe the same applies to DsGetNCChangesRequest8... -		 * -		 *  --metze -		 */ -		DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES			= 0x10000000, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_NO_CHANGE_NOTIFICATIONS		= 0x20000000, -		DRSUAPI_DS_REPLICA_NEIGHBOUR_PARTIAL_ATTRIBUTE_SET		= 0x40000000 -	} drsuapi_DsReplicaNeighbourFlags; - -	typedef [flag(NDR_PAHEX),v1_enum] enum { -		DRSUAPI_EXOP_NONE				= 0x00000000, -		DRSUAPI_EXOP_FSMO_REQ_ROLE			= 0x00000001, -		DRSUAPI_EXOP_FSMO_RID_ALLOC			= 0x00000002, -		DRSUAPI_EXOP_FSMO_RID_REQ_ROLE			= 0x00000003, -		DRSUAPI_EXOP_FSMO_REQ_PDC			= 0x00000004, -		DRSUAPI_EXOP_FSMO_ABANDON_ROLE			= 0x00000005, -		DRSUAPI_EXOP_REPL_OBJ				= 0x00000006, -		DRSUAPI_EXOP_REPL_SECRET			= 0x00000007 -	} drsuapi_DsExtendedOperation; - -	typedef [flag(NDR_PAHEX),v1_enum] enum { -		DRSUAPI_EXOP_ERR_NONE				= 0x00000000, -		DRSUAPI_EXOP_ERR_SUCCESS			= 0x00000001, -		DRSUAPI_EXOP_ERR_UNKNOWN_OP			= 0x00000002, -		DRSUAPI_EXOP_ERR_FSMO_NOT_OWNER			= 0x00000003, -		DRSUAPI_EXOP_ERR_UPDATE_ERR			= 0x00000004, -		DRSUAPI_EXOP_ERR_EXCEPTION			= 0x00000005, -		DRSUAPI_EXOP_ERR_UNKNOWN_CALLER			= 0x00000006, -		DRSUAPI_EXOP_ERR_RID_ALLOC			= 0x00000007, -		DRSUAPI_EXOP_ERR_FSMO_OWNER_DELETED		= 0x00000008, -		DRSUAPI_EXOP_ERR_FMSO_PENDING_OP		= 0x00000009, -		DRSUAPI_EXOP_ERR_MISMATCH			= 0x0000000A, -		DRSUAPI_EXOP_ERR_COULDNT_CONTACT		= 0x0000000B, -		DRSUAPI_EXOP_ERR_FSMO_REFUSING_ROLES		= 0x0000000C, -		DRSUAPI_EXOP_ERR_DIR_ERROR			= 0x0000000D, -		DRSUAPI_EXOP_ERR_FSMO_MISSING_SETTINGS		= 0x0000000E, -		DRSUAPI_EXOP_ERR_ACCESS_DENIED			= 0x0000000F, -		DRSUAPI_EXOP_ERR_PARAM_ERROR			= 0x00000010 -	} drsuapi_DsExtendedError; - -	typedef struct { -		GUID destination_dsa_guid; -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		[ref] drsuapi_DsReplicaObjectIdentifier *naming_context; -		drsuapi_DsReplicaHighWaterMark highwatermark; -		drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; -		drsuapi_DsReplicaNeighbourFlags replica_flags; -		uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */ -		uint32 max_ndr_size; /* w2k3 seems to ignore this */ -		drsuapi_DsExtendedOperation extended_op; -		hyper fsmo_info; -	} drsuapi_DsGetNCChangesRequest5; - -	/* -	 * In DRSUAPI all attributes with syntax 2.5.5.2 -	 * are identified by uint32 values -	 * -	 * the following table shows the mapping used between the two representations -	 * e.g. - objectClass 'nTDSDSA' has governsID: 1.2.840.113556.1.5.7000.47 -	 *        and a UINT32-ID of '0x0017002F'. -	 *      - so the OID 1.2.840.113556.1.5.7000.47 is splitted into a -	 *        OID-prefix: 1.2.840.113556.1.5.7000 -	 *	  and a value: 47 => 0x2F -	 *      - the mapping table gives a UINT32-prefix: 0x00170000 -	 *      - and the UINT32-ID is 0x0017002F = 0x00170000 | 0x2F -	 * -	 * This prefix mapping table is replied in the drsuapi_DsReplicaOIDMapping_Ctr -	 * array. The following are the default mappings of w2k3 -	 * -	 * OID-prefix			=> UINT32-Id prefix -	 * -	 * 2.5.4.*			=> 0x00000000 (standard attributes RFC2256 core.schema) -	 * 2.5.6.*			=> 0x00010000 (standard object classes RFC2256 core.schema) -	 * 1.2.840.113556.1.2.*   	=> 0x00020000 -	 * 1.2.840.113556.1.3.*		=> 0x00030000 -	 * 2.5.5.*			=> 0x00080000 (attributeSyntax OID's) -	 * 1.2.840.113556.1.4.*		=> 0x00090000 -	 * 1.2.840.113556.1.5.*		=> 0x000A0000 -	 * 2.16.840.1.113730.3.*	=> 0x00140000 -	 * 0.9.2342.19200300.100.1.*	=> 0x00150000 -	 * 2.16.840.1.113730.3.1.*	=> 0x00160000 -	 * 1.2.840.113556.1.5.7000.*	=> 0x00170000 -	 * 2.5.21.*			=> 0x00180000 (attrs for SubSchema) -	 * 2.5.18.*			=> 0x00190000 (createTimeStamp,modifyTimeStamp, SubSchema) -	 * 2.5.20.*			=> 0x001A0000 -	 * 1.3.6.1.4.1.1466.101.119.*	=> 0x001B0000 (dynamicObject, entryTTL) -	 * 2.16.840.1.113730.3.2.*	=> 0x001C0000 -	 * 1.3.6.1.4.1.250.1.*		=> 0x001D0000 -	 * 1.2.840.113549.1.9.*   	=> 0x001E0000 (unstructuredAddress,unstructuredName) -	 * 0.9.2342.19200300.100.4.*	=> 0x001F0000 -	 * -	 * Here's a list of used 'attributeSyntax' OID's -	 * -	 * 2.5.5.1	=> Object(DS-DN) string -	 *		   struct drsuapi_DsObjectIdentifier3 -	 * -	 * 2.5.5.2	=> OID-string -	 *		=> all values are represented as uint32 values in drsuapi -	 *		=> governsID, attributeID and attributeSyntax returned as OID-Strings in LDAP -	 *		=> mayContain, mustContain and all other attributes with 2.5.5.2 syntax -	 *		   are returned as attribute names -	 * -	 * 2.5.5.4	=> String(Teletex) case-insensitive string with teletex charset -	 * -	 * 2.5.5.5	=> String(IA5) case-sensitive string -	 * -	 * 2.5.5.6	=> String(Numeric) -	 *		=> eg. internationalISDNNumber -	 * -	 * 2.5.5.7	=> Object(DN-Binary) B:<byte count>:<bytes>:<object DN> -	 *		=> e.g. wellKnownObjects -	 * -	 * 2.5.5.8	=> BOOL -	 * -	 * 2.5.5.9	=> int32 -	 * -	 * 2.5.5.10	=> DATA_BLOB -	 *		=> struct GUID -	 * -	 * 2.5.5.11	=> LDAP timestring -	 *		=> NTTIME_1sec -	 * -	 * 2.5.5.12	=> String(Unicode) case-insensitive string -	 *		=> 'standard strings' -	 * -	 * 2.5.5.13	=> Object(Presentation-Address) string -	 *		=> used in objectClass applicationEntity -	 * -	 * 2.5.5.14	=> Object(DN-String) S:<char count>:<string>:<object DN> -	 *		=> not used -	 * -	 * 2.5.5.15	=> ntSecurityDescriptor -	 * -	 * 2.5.5.16	=> int64 -	 * -	 * 2.5.5.17	=> dom_sid -	 */ -	typedef [nopush,nopull] struct { -		[range(0,10000),value(ndr_size_drsuapi_DsReplicaOID_oid(oid, 0))] uint32 __ndr_size; -		[size_is(__ndr_size),charset(DOS)] uint8 *oid; /* it's encoded with asn1_write_OID_String() */ -	} drsuapi_DsReplicaOID; - -	typedef struct { -		uint32 id_prefix; -		drsuapi_DsReplicaOID oid; -	} drsuapi_DsReplicaOIDMapping; - -	typedef [public] struct { -		[range(0,0x100000)] uint32 num_mappings; -		[size_is(num_mappings)] drsuapi_DsReplicaOIDMapping *mappings; -	} drsuapi_DsReplicaOIDMapping_Ctr; - -	typedef [flag(NDR_PAHEX),v1_enum] enum { -		DRSUAPI_OBJECTCLASS_top			= 0x00010000, -		DRSUAPI_OBJECTCLASS_classSchema		= 0x0003000d, -		DRSUAPI_OBJECTCLASS_attributeSchema	= 0x0003000e -	} drsuapi_DsObjectClassId; - -	typedef [flag(NDR_PAHEX),v1_enum,public] enum { -		DRSUAPI_ATTRIBUTE_objectClass			= 0x00000000, -		DRSUAPI_ATTRIBUTE_description			= 0x0000000d, -		DRSUAPI_ATTRIBUTE_member			= 0x0000001f, -		DRSUAPI_ATTRIBUTE_instanceType			= 0x00020001, -		DRSUAPI_ATTRIBUTE_whenCreated			= 0x00020002, -		DRSUAPI_ATTRIBUTE_hasMasterNCs			= 0x0002000e, -		DRSUAPI_ATTRIBUTE_governsID			= 0x00020016, -		DRSUAPI_ATTRIBUTE_attributeID			= 0x0002001e, -		DRSUAPI_ATTRIBUTE_attributeSyntax		= 0x00020020, -		DRSUAPI_ATTRIBUTE_isSingleValued		= 0x00020021, -		DRSUAPI_ATTRIBUTE_rangeLower			= 0x00020022, -		DRSUAPI_ATTRIBUTE_rangeUpper			= 0x00020023, -		DRSUAPI_ATTRIBUTE_dMDLocation			= 0x00020024, -		DRSUAPI_ATTRIBUTE_objectVersion			= 0x0002004c, -		DRSUAPI_ATTRIBUTE_invocationId			= 0x00020073, -		DRSUAPI_ATTRIBUTE_showInAdvancedViewOnly	= 0x000200a9, -		DRSUAPI_ATTRIBUTE_adminDisplayName		= 0x000200c2, -		DRSUAPI_ATTRIBUTE_adminDescription		= 0x000200e2, -		DRSUAPI_ATTRIBUTE_oMSyntax			= 0x000200e7, -		DRSUAPI_ATTRIBUTE_ntSecurityDescriptor		= 0x00020119, -		DRSUAPI_ATTRIBUTE_searchFlags			= 0x0002014e, -		DRSUAPI_ATTRIBUTE_lDAPDisplayName		= 0x000201cc, -		DRSUAPI_ATTRIBUTE_name				= 0x00090001, -		DRSUAPI_ATTRIBUTE_userAccountControl		= 0x00090008, -		DRSUAPI_ATTRIBUTE_currentValue			= 0x0009001b, -		DRSUAPI_ATTRIBUTE_homeDirectory			= 0x0009002c, -		DRSUAPI_ATTRIBUTE_homeDrive			= 0x0009002d, -		DRSUAPI_ATTRIBUTE_scriptPath			= 0x0009003e, -		DRSUAPI_ATTRIBUTE_profilePath			= 0x0009008b, -		DRSUAPI_ATTRIBUTE_objectSid			= 0x00090092, -		DRSUAPI_ATTRIBUTE_schemaIDGUID			= 0x00090094, -		DRSUAPI_ATTRIBUTE_dBCSPwd			= 0x00090037,/* lmPwdHash */ -		DRSUAPI_ATTRIBUTE_logonHours			= 0x00090040, -		DRSUAPI_ATTRIBUTE_userWorkstations		= 0x00090056, -		DRSUAPI_ATTRIBUTE_unicodePwd			= 0x0009005a,/* ntPwdHash */ -		DRSUAPI_ATTRIBUTE_ntPwdHistory			= 0x0009005e, -		DRSUAPI_ATTRIBUTE_priorValue			= 0x00090064, -		DRSUAPI_ATTRIBUTE_supplementalCredentials	= 0x0009007d, -		DRSUAPI_ATTRIBUTE_trustAuthIncoming		= 0x00090081, -		DRSUAPI_ATTRIBUTE_trustAuthOutgoing		= 0x00090087, -		DRSUAPI_ATTRIBUTE_lmPwdHistory			= 0x000900a0, -		DRSUAPI_ATTRIBUTE_sAMAccountName		= 0x000900dd, -		DRSUAPI_ATTRIBUTE_sAMAccountType		= 0x0009012e, -		DRSUAPI_ATTRIBUTE_fSMORoleOwner			= 0x00090171, -		DRSUAPI_ATTRIBUTE_systemFlags			= 0x00090177, -		DRSUAPI_ATTRIBUTE_serverReference		= 0x00090203, -		DRSUAPI_ATTRIBUTE_serverReferenceBL		= 0x00090204, -		DRSUAPI_ATTRIBUTE_initialAuthIncoming		= 0x0009021b, -		DRSUAPI_ATTRIBUTE_initialAuthOutgoing		= 0x0009021c, -		DRSUAPI_ATTRIBUTE_wellKnownObjects		= 0x0009026a, -		DRSUAPI_ATTRIBUTE_dNSHostName			= 0x0009026b, -		DRSUAPI_ATTRIBUTE_isMemberOfPartialAttributeSet	= 0x0009027f, -		DRSUAPI_ATTRIBUTE_userPrincipalName		= 0x00090290, -		DRSUAPI_ATTRIBUTE_groupType			= 0x000902ee, -		DRSUAPI_ATTRIBUTE_servicePrincipalName		= 0x00090303, -		DRSUAPI_ATTRIBUTE_objectCategory		= 0x0009030e, -		DRSUAPI_ATTRIBUTE_gPLink			= 0x0009037b, -		DRSUAPI_ATTRIBUTE_msDS_Behavior_Version		= 0x000905b3, -		DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber		= 0x000906f6,		 -		DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs		= 0x0009071c, -		DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs		= 0x0009072c -	} drsuapi_DsAttributeId; - -	typedef struct { -		[value(1)] uint32 version; -		[value(0)] uint32 reserved1; -		[range(1,0x100000)] uint32 num_attids; -		[size_is(num_attids)] drsuapi_DsAttributeId attids[]; -	} drsuapi_DsPartialAttributeSet; - -	typedef struct { -		GUID destination_dsa_guid; -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		[ref] drsuapi_DsReplicaObjectIdentifier *naming_context; -		drsuapi_DsReplicaHighWaterMark highwatermark; -		drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; -		drsuapi_DsReplicaNeighbourFlags replica_flags; -		uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */ -		uint32 max_ndr_size; /* w2k3 seems to ignore this */ -		drsuapi_DsExtendedOperation extended_op; -		hyper fsmo_info; -		drsuapi_DsPartialAttributeSet *partial_attribute_set; -		drsuapi_DsPartialAttributeSet *partial_attribute_set_ex; -		drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; -	} drsuapi_DsGetNCChangesRequest8; - -	typedef [switch_type(int32)] union { -		[case(5)] drsuapi_DsGetNCChangesRequest5 req5; -		[case(8)] drsuapi_DsGetNCChangesRequest8 req8; -	} drsuapi_DsGetNCChangesRequest; - -	typedef [public] struct { -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		hyper highest_usn;  /* updated after a full replication cycle */ -		NTTIME last_sync_success; -	} drsuapi_DsReplicaCursor2; - -	typedef struct { -		[value(2)] uint32 version; -		[value(0)] uint32 reserved1; -		[range(0,0x100000)] uint32 count; -		[value(0)] uint32 reserved2; -		[size_is(count)] drsuapi_DsReplicaCursor2 cursors[]; -	} drsuapi_DsReplicaCursor2CtrEx; - -	/* Generic DATA_BLOB values */ -	typedef struct { -		[range(0,10485760),value(ndr_size_DATA_BLOB(0,blob,0))] uint32 __ndr_size; -		DATA_BLOB *blob; -	} drsuapi_DsAttributeValue; - -	typedef struct { -		[range(0,10485760)] uint32 num_values; -		[size_is(num_values)] drsuapi_DsAttributeValue *values; -	} drsuapi_DsAttributeValueCtr; - -	/* DN String values */ -	typedef [public,gensize] struct { -		[value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size; -		[value(ndr_size_dom_sid28(&sid,ndr->flags))]  uint32 __ndr_size_sid; -		GUID guid; -		dom_sid28 sid; -		[value(strlen_m(dn))] uint32 __ndr_size_dn; -		[charset(UTF16)] uint16 dn[__ndr_size_dn+1]; -	} drsuapi_DsReplicaObjectIdentifier3; - -	typedef [public,gensize] struct { -		[value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary(r, ndr->flags))] uint32 __ndr_size; -		[value(ndr_size_dom_sid28(&sid,ndr->flags))]  uint32 __ndr_size_sid; -		GUID guid; -		dom_sid28 sid; -		[value(strlen_m(dn))] uint32 __ndr_size_dn; -		[charset(UTF16)] uint16 dn[__ndr_size_dn+1]; -		[value(binary.length + 4)] uint32 __ndr_size_binary; -		[flag(NDR_REMAINING)] DATA_BLOB binary; -	} drsuapi_DsReplicaObjectIdentifier3Binary; - -	typedef [public] struct { -		drsuapi_DsAttributeId attid; -		drsuapi_DsAttributeValueCtr value_ctr; -	} drsuapi_DsReplicaAttribute; - -	typedef struct { -		[range(0,1048576)] uint32 num_attributes; -		[size_is(num_attributes)]  drsuapi_DsReplicaAttribute *attributes; -	} drsuapi_DsReplicaAttributeCtr; - -	typedef [public] bitmap { -		DRSUAPI_DS_REPLICA_OBJECT_FROM_MASTER	= 0x00000001, -		DRSUAPI_DS_REPLICA_OBJECT_DYNAMIC	= 0x00000002, -		DRSUAPI_DS_REPLICA_OBJECT_REMOTE_MODIFY	= 0x00010000 -	} drsuapi_DsReplicaObjectFlags; - -	typedef [public] struct { -		drsuapi_DsReplicaObjectIdentifier *identifier; -		drsuapi_DsReplicaObjectFlags flags; -		drsuapi_DsReplicaAttributeCtr attribute_ctr; -	} drsuapi_DsReplicaObject; - -	typedef struct { -		uint32 version; -		NTTIME_1sec originating_change_time; -		GUID originating_invocation_id; -		hyper originating_usn; -	} drsuapi_DsReplicaMetaData; - -	typedef [public] struct { -		[range(0,1048576)] uint32 count; -		[size_is(count)] drsuapi_DsReplicaMetaData meta_data[]; -	} drsuapi_DsReplicaMetaDataCtr; - -	typedef [public,noprint] struct { -		drsuapi_DsReplicaObjectListItemEx *next_object; -		drsuapi_DsReplicaObject object; -		boolean32 is_nc_prefix; -		GUID *parent_object_guid; -		drsuapi_DsReplicaMetaDataCtr *meta_data_ctr; -	} drsuapi_DsReplicaObjectListItemEx; - -	typedef [public,gensize] struct { -		GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */ -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		drsuapi_DsReplicaObjectIdentifier *naming_context; -		drsuapi_DsReplicaHighWaterMark old_highwatermark; -		drsuapi_DsReplicaHighWaterMark new_highwatermark; -		drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; -		drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; -		drsuapi_DsExtendedError extended_ret; /* w2k sends the nc_object_count value here */ -		uint32 object_count; -		/* this +55 is sometimes +56, so I don't know where this comes from... --metze */ -		[value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->flags)+55)] uint32 __ndr_size; -		drsuapi_DsReplicaObjectListItemEx *first_object; -		boolean32 more_data; -	} drsuapi_DsGetNCChangesCtr1; - -	/* -	 * if the DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE flag -	 * isn't there it means the value is deleted -	 */ -	typedef [public] bitmap { -		DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE	= 0x00000001 -	} drsuapi_DsLinkedAttributeFlags; - -	typedef [public] struct { -		drsuapi_DsReplicaObjectIdentifier *identifier; -		drsuapi_DsAttributeId attid; -		drsuapi_DsAttributeValue value; -		drsuapi_DsLinkedAttributeFlags flags; -		NTTIME_1sec originating_add_time; -		drsuapi_DsReplicaMetaData meta_data; -	} drsuapi_DsReplicaLinkedAttribute; - -	typedef [public,gensize] struct { -		GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */ -		GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ -		drsuapi_DsReplicaObjectIdentifier *naming_context; -		drsuapi_DsReplicaHighWaterMark old_highwatermark; -		drsuapi_DsReplicaHighWaterMark new_highwatermark; -		drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector; -		drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; -		drsuapi_DsExtendedError extended_ret; -		uint32 object_count; -		/* this +55 is sometimes +56, so I don't know where this comes from... --metze */ -		[value(ndr_size_drsuapi_DsGetNCChangesCtr6(r,ndr->flags)+55)] uint32 __ndr_size; -		drsuapi_DsReplicaObjectListItemEx *first_object; -		boolean32 more_data; -		uint32 nc_object_count; /* estimated amount of objects in the whole NC */ -		uint32 nc_linked_attributes_count;  /* estimated amount of linked values in the whole NC */ -		[range(0,1048576)] uint32 linked_attributes_count; -		[size_is(linked_attributes_count)] drsuapi_DsReplicaLinkedAttribute *linked_attributes; -		WERROR drs_error; -	} drsuapi_DsGetNCChangesCtr6; - -	typedef [public] struct { -		[subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr1 ctr1; -	} drsuapi_DsGetNCChangesCtr1TS; - -	typedef [public] struct { -		[subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr6 ctr6; -	} drsuapi_DsGetNCChangesCtr6TS; - -	typedef [nopush] struct { -		uint32 decompressed_length; -		uint32 compressed_length; -		[subcontext(4),subcontext_size(compressed_length), -		 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)] -		 drsuapi_DsGetNCChangesCtr1TS *ts; -	} drsuapi_DsGetNCChangesMSZIPCtr1; - -	typedef [nopush] struct { -		uint32 decompressed_length; -		uint32 compressed_length; -		[subcontext(4),subcontext_size(compressed_length), -		 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)] -		 drsuapi_DsGetNCChangesCtr6TS *ts; -	} drsuapi_DsGetNCChangesMSZIPCtr6; - -	typedef [nopush] struct { -		uint32 decompressed_length; -		uint32 compressed_length; -		[subcontext(4),subcontext_size(compressed_length), -		 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)] -		 drsuapi_DsGetNCChangesCtr1TS *ts; -	} drsuapi_DsGetNCChangesXPRESSCtr1; - -	typedef [nopush] struct { -		uint32 decompressed_length; -		uint32 compressed_length; -		[subcontext(4),subcontext_size(compressed_length), -		 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)] -		 drsuapi_DsGetNCChangesCtr6TS *ts; -	} drsuapi_DsGetNCChangesXPRESSCtr6; - -	typedef [enum16bit] enum { -		DRSUAPI_COMPRESSION_TYPE_MSZIP	= 2, -		DRSUAPI_COMPRESSION_TYPE_XPRESS	= 3 -	} drsuapi_DsGetNCChangesCompressionType; - -	typedef [nodiscriminant,flag(NDR_PAHEX)] union { -		[case(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))]	drsuapi_DsGetNCChangesMSZIPCtr1 mszip1; -		[case(6|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))]	drsuapi_DsGetNCChangesMSZIPCtr6 mszip6; -		[case(1|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))]	drsuapi_DsGetNCChangesXPRESSCtr1 xpress1; -		[case(6|(DRSUAPI_COMPRESSION_TYPE_XPRESS<<16))]	drsuapi_DsGetNCChangesXPRESSCtr6 xpress6; -	} drsuapi_DsGetNCChangesCompressedCtr; - -	typedef struct { -		drsuapi_DsGetNCChangesMSZIPCtr1 mszip1; -	} drsuapi_DsGetNCChangesCtr2; - -	typedef struct { -		[range(0,6)] int32 level; -		[range(2,3)] drsuapi_DsGetNCChangesCompressionType type; -		[switch_is(level | (type<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr; -	} drsuapi_DsGetNCChangesCtr7; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetNCChangesCtr1 ctr1; -		[case(2)] drsuapi_DsGetNCChangesCtr2 ctr2; -		[case(6)] drsuapi_DsGetNCChangesCtr6 ctr6; -		[case(7)] drsuapi_DsGetNCChangesCtr7 ctr7; -	} drsuapi_DsGetNCChangesCtr; - -	WERROR drsuapi_DsGetNCChanges( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr -		); - -	/*****************/ -        /* Function 0x04 */ -	typedef bitmap { -		DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION	= 0x00000001, -		DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE			= 0x00000002, -		DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE			= 0x00000004, -		DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE		= 0x00000008, -		DRSUAPI_DS_REPLICA_UPDATE_0x00000010			= 0x00000010 -	} drsuapi_DsReplicaUpdateRefsOptions; - -	typedef struct { -		[ref] drsuapi_DsReplicaObjectIdentifier *naming_context; -		[ref,charset(DOS),string] uint8 *dest_dsa_dns_name; -		GUID dest_dsa_guid; -		drsuapi_DsReplicaUpdateRefsOptions options; -	} drsuapi_DsReplicaUpdateRefsRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1; -	} drsuapi_DsReplicaUpdateRefsRequest; - -	WERROR drsuapi_DsReplicaUpdateRefs( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req -		); - -	/*****************/ -        /* Function 0x05 */ -	typedef bitmap { -		DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION	= 0x00000001, -		DRSUAPI_DS_REPLICA_ADD_WRITEABLE		= 0x00000002 -		/* TODO ... */ -	} drsuapi_DsReplicaAddOptions; - -	[todo] WERROR DRSUAPI_REPLICA_ADD(); - -	/*****************/ -        /* Function 0x06 */ -	typedef bitmap { -		DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION	= 0x00000001, -		DRSUAPI_DS_REPLICA_DELETE_WRITEABLE			= 0x00000002 -		/* TODO ... */ -	} drsuapi_DsReplicaDeleteOptions; - -	[todo] WERROR DRSUAPI_REPLICA_DEL(); - -	/*****************/ -        /* Function 0x07 */ -	typedef bitmap { -		DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION	= 0x00000001, -		DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE			= 0x00000002 -	} drsuapi_DsReplicaModifyOptions; - -	[todo] WERROR DRSUAPI_REPLICA_MODIFY(); - -	/*****************/ -        /* Function 0x08 */ -	[todo] WERROR DRSUAPI_VERIFY_NAMES(); - -	/*****************/ -        /* Function 0x09 */ - -	/* how are type 4 and 7 different from 2 and 3 ? */ -	typedef [v1_enum] enum { -		DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_AND_DOMAIN_GROUPS = 1, -		DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS 	= 2, -		DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS	= 3, -		DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS2	= 4, -		DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_GROUPS	= 5, -		DRSUAPI_DS_MEMBERSHIP_TYPE_GROUPMEMBERS		= 6, -		DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS2	= 7 -	} drsuapi_DsMembershipType; - -	typedef struct { -		NTSTATUS status; -		[range(0,10000)] uint32 num_memberships; -		[range(0,10000)] uint32 num_sids; -		[size_is(num_memberships)] drsuapi_DsReplicaObjectIdentifier **info_array; -		[size_is(num_memberships)] samr_GroupAttrs *group_attrs; -		[size_is(num_sids)] dom_sid28 **sids; -	} drsuapi_DsGetMembershipsCtr1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetMembershipsCtr1 ctr1; -	} drsuapi_DsGetMembershipsCtr; - -	const int DRSUAPI_DS_MEMBERSHIP_FLAG_GROUP_ATTR	= 0x1; - -	typedef struct { -		[range(1,10000)] uint32 count; -		[size_is(count)] drsuapi_DsReplicaObjectIdentifier **info_array; -		uint32 flags; -		drsuapi_DsMembershipType type; -		drsuapi_DsReplicaObjectIdentifier *domain; -	} drsuapi_DsGetMembershipsRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetMembershipsRequest1 req1; -	} drsuapi_DsGetMembershipsRequest; - -	[todo] WERROR drsuapi_DsGetMemberships( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref] [switch_is(level)] drsuapi_DsGetMembershipsRequest *req, -		[out,ref] int32 *level_out, -		[out,ref] [switch_is(*level_out)] drsuapi_DsGetMembershipsCtr *ctr -		); - -	/*****************/ -        /* Function 0x0a */ -	[todo] WERROR DRSUAPI_INTER_DOMAIN_MOVE(); - -	/*****************/ -        /* Function 0x0b */ -	typedef struct { -		uint32 unknown1; -		uint32 unknown2; -		[range(0,0x00A00000)] uint32 length; -		[size_is(length)] uint8 *data; -	} drsuapi_DsGetNT4ChangeLogRequest1; - -	typedef [switch_type(uint32)] union { -		[case(1)] drsuapi_DsGetNT4ChangeLogRequest1 req1; -	} drsuapi_DsGetNT4ChangeLogRequest; - -	typedef struct { -		[range(0,0x00A00000)] uint32 length1; -		[range(0,0x00A00000)] uint32 length2; -		hyper unknown1; -		NTTIME time2; -		hyper unknown3; -		NTTIME time4; -		hyper unknown5; -		NTTIME time6; -		NTSTATUS status; -		[size_is(length1)] uint8 *data1; -		[size_is(length2)] uint8 *data2; -	} drsuapi_DsGetNT4ChangeLogInfo1; - -	typedef [switch_type(uint32)] union { -		[case(1)] drsuapi_DsGetNT4ChangeLogInfo1 info1; -	} drsuapi_DsGetNT4ChangeLogInfo; - -	[todo] WERROR drsuapi_DsGetNT4ChangeLog( -		[in] policy_handle *bind_handle, -		[in] uint32 level, -		[in,ref] [switch_is(level)] drsuapi_DsGetNT4ChangeLogRequest *req, -		[out,ref] uint32 *level_out, -		[out,ref] [switch_is(*level_out)] drsuapi_DsGetNT4ChangeLogInfo *info -		); - -	/*****************/ -	/* Function 0x0c */ -	typedef [v1_enum] enum { -		DRSUAPI_DS_NAME_STATUS_OK			= 0, -		DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR		= 1, -		DRSUAPI_DS_NAME_STATUS_NOT_FOUND		= 2, -		DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE		= 3, -		DRSUAPI_DS_NAME_STATUS_NO_MAPPING		= 4, -		DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY		= 5, -		DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING	= 6, -		DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL		= 7 -	} drsuapi_DsNameStatus; - -	typedef [v1_enum] enum { -		DRSUAPI_DS_NAME_FLAG_NO_FLAGS			= 0x0, -		DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY		= 0x1, -		DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC			= 0x2, -		DRSUAPI_DS_NAME_FLAG_GCVERIFY			= 0x4, -		DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL		= 0x8 -	} drsuapi_DsNameFlags; - -	typedef [v1_enum] enum { -		DRSUAPI_DS_NAME_FORMAT_UNKNOWN			= 0, -		DRSUAPI_DS_NAME_FORMAT_FQDN_1779		= 1, -		DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT		= 2, -		DRSUAPI_DS_NAME_FORMAT_DISPLAY			= 3, -		DRSUAPI_DS_NAME_FORMAT_GUID 			= 6, -		DRSUAPI_DS_NAME_FORMAT_CANONICAL		= 7, -		DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL		= 8, -		DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX		= 9, -		DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL	= 10, -		DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY	= 11, -		DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN		= 12 -	} drsuapi_DsNameFormat; - -	typedef struct { -		[string,charset(UTF16)] uint16 *str; -	} drsuapi_DsNameString; - -	typedef struct { -		uint32 codepage; /* 0x000004e4 - 1252 is german codepage*/ -		uint32 language; /* 0x00000407 - german language ID*/ -		drsuapi_DsNameFlags format_flags; -		drsuapi_DsNameFormat format_offered; -		drsuapi_DsNameFormat format_desired; -		[range(1,10000)] uint32 count; -		[size_is(count)] drsuapi_DsNameString *names; -	} drsuapi_DsNameRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsNameRequest1 req1; -	} drsuapi_DsNameRequest; - -	typedef struct { -		drsuapi_DsNameStatus status; -		[charset(UTF16),string] uint16 *dns_domain_name; -		[charset(UTF16),string] uint16 *result_name; -	} drsuapi_DsNameInfo1; - -	typedef struct { -		uint32 count; -		[size_is(count)] drsuapi_DsNameInfo1 *array; -	} drsuapi_DsNameCtr1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsNameCtr1 *ctr1; -	} drsuapi_DsNameCtr; - -	WERROR drsuapi_DsCrackNames( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsNameRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsNameCtr *ctr -		); - -	/*****************/ -	/* Function 0x0d */ -	typedef [v1_enum] enum { -		DRSUAPI_DS_SPN_OPERATION_ADD	= 0, -		DRSUAPI_DS_SPN_OPERATION_REPLACE= 1, -		DRSUAPI_DS_SPN_OPERATION_DELETE	= 2 -	} drsuapi_DsSpnOperation; - -	typedef struct { -		drsuapi_DsSpnOperation operation; -		uint32 unknown1; -		[charset(UTF16),string] uint16 *object_dn; -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsNameString *spn_names; -	} drsuapi_DsWriteAccountSpnRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsWriteAccountSpnRequest1 req1; -	} drsuapi_DsWriteAccountSpnRequest; - -	typedef struct { -		WERROR status; -	} drsuapi_DsWriteAccountSpnResult1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsWriteAccountSpnResult1 res1; -	} drsuapi_DsWriteAccountSpnResult; - -	WERROR drsuapi_DsWriteAccountSpn( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsWriteAccountSpnRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsWriteAccountSpnResult *res -		); - -	/*****************/ -        /* Function 0x0e */ -	typedef struct { -		[charset(UTF16),string] uint16 *server_dn; -		[charset(UTF16),string] uint16 *domain_dn; -		boolean32 commit; -	} drsuapi_DsRemoveDSServerRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsRemoveDSServerRequest1 req1; -	} drsuapi_DsRemoveDSServerRequest; - -	typedef struct { -		boolean32 last_dc_in_domain; -	} drsuapi_DsRemoveDSServerResult1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsRemoveDSServerResult1 res1; -	} drsuapi_DsRemoveDSServerResult; - -	WERROR drsuapi_DsRemoveDSServer( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsRemoveDSServerRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsRemoveDSServerResult *res -		); - -	/*****************/ -        /* Function 0x0f */ -	[todo] WERROR DRSUAPI_REMOVE_DS_DOMAIN(); - -	/*****************/ -        /* Function 0x10 */ -	typedef struct { -		[charset(UTF16),string] uint16 *domain_name; /* netbios or dns */ -		int32 level; /* specifies the switch level for the request */ -	} drsuapi_DsGetDCInfoRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetDCInfoRequest1 req1; -	} drsuapi_DsGetDCInfoRequest; - -	typedef struct { -		[charset(UTF16),string] uint16 *netbios_name; -		[charset(UTF16),string] uint16 *dns_name; -		[charset(UTF16),string] uint16 *site_name; -		[charset(UTF16),string] uint16 *computer_dn; -		[charset(UTF16),string] uint16 *server_dn; -		uint32 is_pdc; -		uint32 is_enabled; -	} drsuapi_DsGetDCInfo1; - -	typedef struct { -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsGetDCInfo1 *array; -	} drsuapi_DsGetDCInfoCtr1; - -	typedef struct { -		[charset(UTF16),string] uint16 *netbios_name; -		[charset(UTF16),string] uint16 *dns_name; -		[charset(UTF16),string] uint16 *site_name; -		[charset(UTF16),string] uint16 *site_dn; -		[charset(UTF16),string] uint16 *computer_dn; -		[charset(UTF16),string] uint16 *server_dn; -		[charset(UTF16),string] uint16 *ntds_dn; -		uint32 is_pdc; -		uint32 is_enabled; -		uint32 is_gc; -		GUID site_guid; -		GUID computer_guid; -		GUID server_guid; -		GUID ntds_guid; -	} drsuapi_DsGetDCInfo2; - -	typedef struct { -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsGetDCInfo2 *array; -	} drsuapi_DsGetDCInfoCtr2; - -	typedef struct { -		[charset(UTF16),string] uint16 *netbios_name; -		[charset(UTF16),string] uint16 *dns_name; -		[charset(UTF16),string] uint16 *site_name; -		[charset(UTF16),string] uint16 *site_dn; -		[charset(UTF16),string] uint16 *computer_dn; -		[charset(UTF16),string] uint16 *server_dn; -		[charset(UTF16),string] uint16 *ntds_dn; -		uint32 is_pdc; -		uint32 is_enabled; -		uint32 is_gc; -		uint32 is_rodc; -		GUID site_guid; -		GUID computer_guid; -		GUID server_guid; -		GUID ntds_guid; -	} drsuapi_DsGetDCInfo3; - -	typedef struct { -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsGetDCInfo3 *array; -	} drsuapi_DsGetDCInfoCtr3; - -	/* -	 * this represents an active connection to the -	 * Directory System Agent (DSA) -	 * this can be via LDAP or DRSUAPI -	 */ -	typedef struct { -		[flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address; -		uint32 unknown2; -		uint32 connection_time; /* in seconds */ -		uint32 unknown4; -		uint32 unknown5; -		uint32 unknown6; -		/* -		 * client_account can be the following: -		 * "W2K3\Administrator" -		 * "Administrator@W2K3" -		 * "cn=Administrator,cn=Users,DC=w2k3,DC=vmnet1,DC=vm,DC=base" -		 * "" -		 * or NULL -		 */ -		[charset(UTF16),string] uint16 *client_account; -	} drsuapi_DsGetDCConnection01; - -	typedef struct { -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsGetDCConnection01 *array; -	} drsuapi_DsGetDCConnectionCtr01; - -	typedef [v1_enum] enum { -		DRSUAPI_DC_INFO_CTR_1  = 1, -		DRSUAPI_DC_INFO_CTR_2  = 2, -		DRSUAPI_DC_INFO_CTR_3  = 3, -		DRSUAPI_DC_CONNECTION_CTR_01 = -1 -	} drsuapi_DsGetDCInfoCtrLevels; - -        typedef [switch_type(int32)] union { -		[case(DRSUAPI_DC_INFO_CTR_1)]  drsuapi_DsGetDCInfoCtr1  ctr1; -		[case(DRSUAPI_DC_INFO_CTR_2)]  drsuapi_DsGetDCInfoCtr2  ctr2; -		[case(DRSUAPI_DC_INFO_CTR_3)]  drsuapi_DsGetDCInfoCtr3  ctr3; -		[case(DRSUAPI_DC_CONNECTION_CTR_01)] drsuapi_DsGetDCConnectionCtr01 ctr01; -	} drsuapi_DsGetDCInfoCtr; - -	WERROR drsuapi_DsGetDomainControllerInfo( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr -		); - -	/*****************/ -        /* Function 0x11 */ -	typedef [public,noprint] struct { -		drsuapi_DsReplicaObjectListItem *next_object; -		drsuapi_DsReplicaObject object; -	} drsuapi_DsReplicaObjectListItem; - -	/* -	 * The DsAddEntry() call which creates a nTDSDSA object, -	 * also adds a servicePrincipalName in the following form -	 * to the computer account of the new domain controller -	 * referenced by the "serverReferenece" attribute. -	 * -	 * E3514235-4B06-11D1-AB04-00C04FC2DCD2/<new-ntdsdsa-object-guid-as-string>/<domain-dns-name> -	 * -	 * also note that the "serverReference" isn't added to the new object! -	 */ -	const char *DRSUAPI_NTDSDSA_KRB5_SERVICE_GUID = "E3514235-4B06-11D1-AB04-00C04FC2DCD2"; - -	/* -	 * please note the the current idl -	 * for DsAddEntry does only parse  -	 * what I saw between 2 w2k3 boxes -	 * in my dssync experiments I got some other replies -	 * so all I want to say is that this is very incomplete yet... -	 * --metze -	 */ -	typedef struct { -		drsuapi_DsReplicaObjectListItem first_object; -	} drsuapi_DsAddEntryRequest2; - -	typedef [switch_type(int32)] union { -		[case(2)] drsuapi_DsAddEntryRequest2 req2; -	} drsuapi_DsAddEntryRequest; - -	typedef struct { -		uint32 unknown1; -		WERROR status; -		uint32 unknown2; -		uint16 unknown3; -	} drsuapi_DsAddEntryErrorInfoX; - -	typedef struct { -		[range(0,10485760)] uint32 size; -		[size_is(size)] uint8 *data; -	} drsuapi_DsAddEntryExtraErrorBuffer; - -	typedef struct { -		drsuapi_DsAddEntryErrorInfoX error; -		drsuapi_DsAttributeId attid; -		uint32 unknown2; -		drsuapi_DsAddEntryExtraErrorBuffer buffer; -	} drsuapi_DsAddEntryExtraError1; - -	typedef /*[noprint]*/ struct { -		drsuapi_DsAddEntryErrorListItem1 *next; -		drsuapi_DsAddEntryExtraError1 error; -	} drsuapi_DsAddEntryErrorListItem1; - -	typedef struct { -		drsuapi_DsReplicaObjectIdentifier *id; -		WERROR status; -		drsuapi_DsAddEntryErrorListItem1 first; -	} drsuapi_DsAddEntryErrorInfo1; - -	typedef [switch_type(uint32)] union { -		[case(1)] drsuapi_DsAddEntryErrorInfo1 error1; -/*		[case(2)] drsuapi_DsAddEntryErrorInfo2 error2; -		[case(3)] drsuapi_DsAddEntryErrorInfo3 error3; -*/		[case(4)] drsuapi_DsAddEntryErrorInfoX errorX; -		[case(5)] drsuapi_DsAddEntryErrorInfoX errorX; -		[case(6)] drsuapi_DsAddEntryErrorInfoX errorX; -		[case(7)] drsuapi_DsAddEntryErrorInfoX errorX; -	} drsuapi_DsAddEntryErrorInfo; - -	typedef struct { -		WERROR status; -		uint32 level; -		[switch_is(level)] drsuapi_DsAddEntryErrorInfo *info; -	} drsuapi_DsAddEntryError1; - -	typedef [switch_type(uint32)] union { -		[case(1)] drsuapi_DsAddEntryError1 info1; -	} drsuapi_DsAddEntryError; - -	typedef struct { -		GUID guid; -		dom_sid28 sid; -	} drsuapi_DsReplicaObjectIdentifier2; - -	typedef struct { -		drsuapi_DsReplicaObjectIdentifier *id; -		uint32 unknown1; -		drsuapi_DsAddEntryErrorInfoX error; -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects; -	} drsuapi_DsAddEntryCtr2; - -	typedef struct { -		drsuapi_DsReplicaObjectIdentifier *id; -		uint32 level; -		[switch_is(level)] drsuapi_DsAddEntryError *error; -		[range(0,10000)] uint32 count; -		[size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects; -	} drsuapi_DsAddEntryCtr3; - -	typedef [switch_type(int32)] union { -		[case(2)] drsuapi_DsAddEntryCtr2 ctr2; -		[case(3)] drsuapi_DsAddEntryCtr3 ctr3; -	} drsuapi_DsAddEntryCtr; - -	[public] WERROR drsuapi_DsAddEntry( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref,switch_is(level)] drsuapi_DsAddEntryRequest *req, -		[out,ref] int32 *level_out, -		[out,ref,switch_is(*level_out)] drsuapi_DsAddEntryCtr *ctr -		); - -	/*****************/ -        /* Function 0x12 */ -	[todo] WERROR DRSUAPI_EXECUTE_KCC(); - -	/*****************/ -	/* Function 0x13 */ -	typedef [v1_enum] enum { -		DRSUAPI_DS_REPLICA_GET_INFO				= 1, -		DRSUAPI_DS_REPLICA_GET_INFO2				= 2 -	} drsuapi_DsReplicaGetInfoLevel; - -	typedef [v1_enum] enum { -		DRSUAPI_DS_REPLICA_INFO_NEIGHBORS			= 0, -		DRSUAPI_DS_REPLICA_INFO_CURSORS				= 1, -		DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA			= 2, -		DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES	= 3, -		DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES 		= 4, -		DRSUAPI_DS_REPLICA_INFO_PENDING_OPS 			= 5, -		DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA	= 6, -		DRSUAPI_DS_REPLICA_INFO_CURSORS2			= 7, -		DRSUAPI_DS_REPLICA_INFO_CURSORS3			= 8, -		DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2			= 9, -		DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2	= 10, -		DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02			= -2, -		DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04			= -4, -		DRSUAPI_DS_REPLICA_INFO_CURSORS05			= -5, -		DRSUAPI_DS_REPLICA_INFO_06				= -6 -	} drsuapi_DsReplicaInfoType; - -	typedef struct { -		drsuapi_DsReplicaInfoType info_type; -		[charset(UTF16),string] uint16 *object_dn; -		GUID guid1; -	} drsuapi_DsReplicaGetInfoRequest1; - -	typedef struct { -		drsuapi_DsReplicaInfoType info_type; -		[charset(UTF16),string] uint16 *object_dn; -		GUID guid1; -		uint32 unknown1; -		[charset(UTF16),string] uint16 *string1; -		[charset(UTF16),string] uint16 *string2; -		uint32 unknown2; -	} drsuapi_DsReplicaGetInfoRequest2; - -	typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union { -		[case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1; -		[case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2; -	} drsuapi_DsReplicaGetInfoRequest; - -	typedef struct { -		[charset(UTF16),string] uint16 *naming_context_dn; -		[charset(UTF16),string] uint16 *source_dsa_obj_dn; -		[charset(UTF16),string] uint16 *source_dsa_address; -		[charset(UTF16),string] uint16 *transport_obj_dn; -		drsuapi_DsReplicaNeighbourFlags replica_flags; -		uint32 reserved; -		GUID naming_context_obj_guid; -		GUID source_dsa_obj_guid; -		GUID source_dsa_invocation_id; -		GUID transport_obj_guid; -		hyper tmp_highest_usn; -		hyper highest_usn; -		NTTIME last_success; -		NTTIME last_attempt; -		WERROR result_last_attempt; -		uint32 consecutive_sync_failures; -	} drsuapi_DsReplicaNeighbour; - -	typedef struct { -		uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplicaNeighbour array[]; -	} drsuapi_DsReplicaNeighbourCtr; - -	typedef struct { -		uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplicaCursor array[]; -	} drsuapi_DsReplicaCursorCtr; - -	typedef struct { -		[charset(UTF16),string] uint16 *attribute_name; -		uint32 version; -		NTTIME originating_change_time; -		GUID originating_invocation_id; -		hyper originating_usn; -		hyper local_usn; -	} drsuapi_DsReplicaObjMetaData; - -	typedef struct { -		uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplicaObjMetaData array[]; -	} drsuapi_DsReplicaObjMetaDataCtr; - -	typedef struct { -		[charset(UTF16),string] uint16 *dsa_obj_dn; -		GUID dsa_obj_guid; -		NTTIME first_failure; -		uint32 num_failures; -		WERROR last_result; -	} drsuapi_DsReplicaKccDsaFailure; - -	typedef struct { -		uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplicaKccDsaFailure array[]; -	} drsuapi_DsReplicaKccDsaFailuresCtr; - -	typedef enum { -		DRSUAPI_DS_REPLICA_OP_TYPE_SYNC		= 0, -		DRSUAPI_DS_REPLICA_OP_TYPE_ADD		= 1, -		DRSUAPI_DS_REPLICA_OP_TYPE_DELETE	= 2, -		DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY	= 3, -		DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS	= 4 -	} drsuapi_DsReplicaOpType; - -	typedef [switch_type(drsuapi_DsReplicaOpType)] union { -		[case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)]		drsuapi_DsReplicaSyncOptions sync; -		[case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)]		drsuapi_DsReplicaAddOptions add; -		[case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)]	drsuapi_DsReplicaDeleteOptions op_delete; -		[case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)]	drsuapi_DsReplicaModifyOptions modify; -		[case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)]	drsuapi_DsReplicaUpdateRefsOptions update_refs; -		[default] uint32 unknown; -	} drsuapi_DsRplicaOpOptions; - -	typedef struct { -		NTTIME operation_start; -		uint32 serial_num; /* unique till reboot */ -		uint32 priority; -		drsuapi_DsReplicaOpType operation_type; -		[switch_is(operation_type)] drsuapi_DsRplicaOpOptions options; -		[charset(UTF16),string] uint16 *nc_dn; -		[charset(UTF16),string] uint16 *remote_dsa_obj_dn; -		[charset(UTF16),string] uint16 *remote_dsa_address; -		GUID nc_obj_guid; -		GUID remote_dsa_obj_guid; -	} drsuapi_DsReplicaOp; - -	typedef struct { -		NTTIME time; -		uint32 count; -		[size_is(count)] drsuapi_DsReplicaOp array[]; -	} drsuapi_DsReplicaOpCtr; - -	typedef struct { -		[charset(UTF16),string] uint16 *attribute_name; -		[charset(UTF16),string] uint16 *object_dn; -		[value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary; -		DATA_BLOB *binary; -		NTTIME deleted; -		NTTIME created; -		uint32 version; -		NTTIME originating_change_time; -		GUID originating_invocation_id; -		hyper originating_usn; -		hyper local_usn; -	} drsuapi_DsReplicaAttrValMetaData; - -	typedef struct { -		uint32 count; -		int32 enumeration_context; -		[size_is(count)] drsuapi_DsReplicaAttrValMetaData array[]; -	} drsuapi_DsReplicaAttrValMetaDataCtr; - -	typedef struct { -		uint32 count; -		int32 enumeration_context; -		[size_is(count)] drsuapi_DsReplicaCursor2 array[]; -	} drsuapi_DsReplicaCursor2Ctr; - -	typedef struct { -		GUID source_dsa_invocation_id; -		hyper highest_usn; -		NTTIME last_sync_success; -		[charset(UTF16),string] uint16 *source_dsa_obj_dn; -	} drsuapi_DsReplicaCursor3; - -	typedef struct { -		uint32 count; -		int32 enumeration_context; -		[size_is(count)] drsuapi_DsReplicaCursor3 array[]; -	} drsuapi_DsReplicaCursor3Ctr; - -	typedef struct { -		[charset(UTF16),string] uint16 *attribute_name; -		uint32 version; -		NTTIME originating_change_time; -		GUID originating_invocation_id; -		hyper originating_usn; -		hyper local_usn; -		[charset(UTF16),string] uint16 *originating_dsa_dn; -	} drsuapi_DsReplicaObjMetaData2; - -	typedef struct { -		uint32 count; -		int32 enumeration_context; -		[size_is(count)] drsuapi_DsReplicaObjMetaData2 array[]; -	} drsuapi_DsReplicaObjMetaData2Ctr; - -	typedef struct { -		[charset(UTF16),string] uint16 *attribute_name; -		[charset(UTF16),string] uint16 *object_dn; -		[value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary; -		DATA_BLOB *binary; -		NTTIME deleted; -		NTTIME created; -		uint32 version; -		NTTIME originating_change_time; -		GUID originating_invocation_id; -		hyper originating_usn; -		hyper local_usn; -		[charset(UTF16),string] uint16 *originating_dsa_dn; -	} drsuapi_DsReplicaAttrValMetaData2; - -	typedef struct { -		uint32 count; -		int32 enumeration_context; -		[size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[]; -	} drsuapi_DsReplicaAttrValMetaData2Ctr; - -	typedef struct { -		hyper u1; /* session number? */ -		uint32 u2; -		uint32 u3; -		GUID bind_guid; -		NTTIME_1sec bind_time; -		[flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address; -		uint32 u5; /* this is the same value the client used as pid in the DsBindInfoX struct */ -	} drsuapi_DsReplicaConnection04; - -	typedef struct { -		[range(0,10000)] uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplicaConnection04 array[]; -	} drsuapi_DsReplicaConnection04Ctr; - -	typedef struct { -		[charset(UTF16),string] uint16 *str1; -		uint32 u1; -		uint32 u2; -		uint32 u3; -		uint32 u4; -		uint32 u5; -		hyper u6; -		uint32 u7; -	} drsuapi_DsReplica06; - -	typedef struct { -		[range(0,256)] uint32 count; -		uint32 reserved; -		[size_is(count)] drsuapi_DsReplica06 array[]; -	} drsuapi_DsReplica06Ctr; - -	typedef [switch_type(drsuapi_DsReplicaInfoType)] union { -		[case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours; -		[case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCursorCtr *cursors; -		[case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata; -		[case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures; -		[case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures; -		[case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops; -		[case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata; -		[case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCursor2Ctr *cursors2; -		[case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCursor3Ctr *cursors3; -		[case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2; -		[case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2; -		[case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02; -		[case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04; -		[case(DRSUAPI_DS_REPLICA_INFO_CURSORS05)] drsuapi_DsReplicaCursorCtrEx *cursors05; -		[case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06; -	} drsuapi_DsReplicaInfo; - -	WERROR drsuapi_DsReplicaGetInfo( -		[in] policy_handle *bind_handle, -		[in] drsuapi_DsReplicaGetInfoLevel level, -		[in,ref,switch_is(level)] drsuapi_DsReplicaGetInfoRequest *req, -		[out,ref] drsuapi_DsReplicaInfoType *info_type, -		[out,ref,switch_is(*info_type)] drsuapi_DsReplicaInfo *info -		); - -	/*****************/ -        /* Function 0x14 */ -	[todo] WERROR DRSUAPI_ADD_SID_HISTORY(); - -	/*****************/ -        /* Function 0x15 */ - -	typedef struct { -		[range(0,10000)] uint32 num_entries; -		[size_is(num_entries)] drsuapi_DsGetMembershipsCtr1 **ctrl_array; -	} drsuapi_DsGetMemberships2Ctr1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetMembershipsCtr1 ctr1; -	} drsuapi_DsGetMemberships2Ctr; - -	typedef struct { -		[range(1,10000)] uint32 num_req; -		[size_is(num_req)] drsuapi_DsGetMembershipsRequest1 **req_array; -	} drsuapi_DsGetMemberships2Request1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_DsGetMemberships2Request1 req1; -	} drsuapi_DsGetMemberships2Request; - -	WERROR drsuapi_DsGetMemberships2( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref] [switch_is(level)] drsuapi_DsGetMemberships2Request *req, -		[out,ref] int32 *level_out, -		[out,ref] [switch_is(*level_out)] drsuapi_DsGetMemberships2Ctr *ctr -		); - -	/*****************/ -        /* Function 0x16 */ -	[todo] WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(); - -	/*****************/ -        /* Function 0x17 */ -	[todo] WERROR DRSUAPI_GET_OBJECT_EXISTENCE(); - -	/*****************/ -        /* Function 0x18 */ -	typedef struct { -		WERROR error_code; -		uint32 site_cost; -	} drsuapi_DsSiteCostInfo; - -	typedef struct { -		[range(0,10000)] uint32 num_info; -		[size_is(num_info)] drsuapi_DsSiteCostInfo *info; -		uint32 unknown; -	} drsuapi_QuerySitesByCostCtr1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_QuerySitesByCostCtr1 ctr1; -	} drsuapi_QuerySitesByCostCtr; - -	typedef struct { -		[charset(UTF16),string] uint16 *site_from; -		[range(1,10000)] uint32 num_req; -		[size_is(num_req)] [charset(UTF16),string] uint16 **site_to; -		uint32 flags; -	} drsuapi_QuerySitesByCostRequest1; - -	typedef [switch_type(int32)] union { -		[case(1)] drsuapi_QuerySitesByCostRequest1 req1; -	} drsuapi_QuerySitesByCostRequest; - -	WERROR drsuapi_QuerySitesByCost( -		[in] policy_handle *bind_handle, -		[in] int32 level, -		[in,ref] [switch_is(level)] drsuapi_QuerySitesByCostRequest *req, -		[out,ref] int32 *level_out, -		[out,ref] [switch_is(*level_out)] drsuapi_QuerySitesByCostCtr *ctr -	); -}  | 
