mirror of
https://github.com/samba-team/samba.git
synced 2025-01-10 01:18:15 +03:00
9727b061f3
in having pointers for outgoing data when you can already modify the top-level
element.
This can be overridden (temporarily) by specifying the new "keepref"
attribute. Once we've removed keepref from all IDL files, I'll remove this
attribute as well.
(This used to be commit bdc6dd3750
)
1387 lines
45 KiB
Plaintext
1387 lines
45 KiB
Plaintext
#include "idl_types.h"
|
|
|
|
[
|
|
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"),
|
|
pointer_default(unique),
|
|
depends(security,misc),
|
|
keepref
|
|
]
|
|
interface drsuapi
|
|
{
|
|
/*****************/
|
|
/* 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;
|
|
|
|
/* this is used by w2k */
|
|
typedef struct {
|
|
drsuapi_SupportedExtensions supported_extensions;
|
|
GUID site_guid;
|
|
uint32 u1;
|
|
} drsuapi_DsBindInfo24;
|
|
|
|
/* this is used by w2k3 */
|
|
typedef struct {
|
|
drsuapi_SupportedExtensions supported_extensions;
|
|
GUID site_guid;
|
|
uint32 u1;
|
|
uint32 repl_epoch;
|
|
} drsuapi_DsBindInfo28;
|
|
|
|
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;
|
|
[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()
|
|
*/
|
|
const char *DRSUAPI_DS_BIND_GUID_W2K = "6abec3d1-3054-41c8-a362-5a0c5b7d5d71";
|
|
const char *DRSUAPI_DS_BIND_GUID_W2K3 = "6afab99c-6e26-464a-975f-f58f105218bc";
|
|
|
|
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_sid(&r->sid, ndr->flags))] uint32 __ndr_size_sid;
|
|
GUID guid;
|
|
dom_sid28 sid;
|
|
[flag(STR_SIZE4|STR_CHARLEN|STR_CONFORMANT)] string 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 guid1;
|
|
astring *string1;
|
|
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_DsReplicaCoursor;
|
|
|
|
typedef struct {
|
|
uint32 u1;
|
|
uint32 u2;
|
|
[range(0,0x100000)] uint32 count;
|
|
uint32 u3;
|
|
[size_is(count)] drsuapi_DsReplicaCoursor coursors[];
|
|
} drsuapi_DsReplicaCoursorCtrEx;
|
|
|
|
typedef [public] bitmap {
|
|
/* the _WRITEABLE flag seems to indicate a replication with all attributes,
|
|
* and I'm currently always on error when it's set, but w2k and w2k3 uses it
|
|
* in the dc join
|
|
* --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 = 0x00010000,
|
|
DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET = 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 struct {
|
|
GUID destination_dsa_guid;
|
|
GUID source_dsa_guid;
|
|
[ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
|
|
drsuapi_DsReplicaHighWaterMark highwatermark;
|
|
drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
|
|
drsuapi_DsReplicaNeighbourFlags replica_flags;
|
|
uint32 unknown2;
|
|
uint32 unknown3;
|
|
uint32 unknown4;
|
|
hyper h1;
|
|
} drsuapi_DsGetNCChangesRequest5;
|
|
|
|
typedef [flag(NDR_PAHEX)] struct {
|
|
[range(0,10000)] uint32 length;
|
|
[size_is(length)] uint8 *byte_array;
|
|
} drsuapi_DsGetNCChangesRequest_Ctr14;
|
|
|
|
typedef struct {
|
|
uint32 unknown1;
|
|
drsuapi_DsGetNCChangesRequest_Ctr14 data;
|
|
} drsuapi_DsGetNCChangesRequest_Ctr13;
|
|
|
|
typedef struct {
|
|
[range(0,0x100000)] uint32 count;
|
|
[size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array;
|
|
} drsuapi_DsGetNCChangesRequest_Ctr12;
|
|
|
|
typedef struct {
|
|
GUID destination_dsa_guid;
|
|
GUID source_dsa_guid;
|
|
[ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
|
|
drsuapi_DsReplicaHighWaterMark highwatermark;
|
|
drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
|
|
drsuapi_DsReplicaNeighbourFlags replica_flags;
|
|
uint32 unknown2;
|
|
uint32 unknown3;
|
|
uint32 unknown4;
|
|
hyper h1;
|
|
uint32 unique_ptr1;
|
|
uint32 unique_ptr2;
|
|
drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
|
|
} 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_DsReplicaCoursor2;
|
|
|
|
typedef struct {
|
|
uint32 u1;
|
|
uint32 u2;
|
|
[range(0,0x100000)] uint32 count;
|
|
uint32 u3;
|
|
[size_is(count)] drsuapi_DsReplicaCoursor2 coursors[];
|
|
} drsuapi_DsReplicaCoursor2CtrEx;
|
|
|
|
/*
|
|
* In DRSUAPI the objectClasses and attributes
|
|
* are identified by uint32 values, but in the schema
|
|
* they are identified by the governsID (objectClasses)
|
|
* and attributeID (attributes)
|
|
*
|
|
* 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
|
|
*
|
|
* 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
|
|
* 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.20.* => 0x001A0000
|
|
* 2.16.840.1.113730.3.2.* => 0x001C0000
|
|
* 1.3.6.1.4.1.250.1.* => 0x001D0000
|
|
* 0.9.2342.19200300.100.4.* => 0x001F0000
|
|
*
|
|
* 1.2.840.113549.1.9.* (unstructuredAddress,unstructuredName)
|
|
* 1.3.6.1.4.1.1466.101.119.2 (dynamicObject)
|
|
* 1.3.6.1.4.1.1466.101.119.3 (entryTTL)
|
|
* 2.5.18.* (createTimeStamp,modifyTimeStamp, SubSchema)
|
|
* 2.5.21.* (attrs for SubSchema)
|
|
*
|
|
* 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
|
|
* => mayContain, mustContain... also have this syntax but have string values
|
|
*
|
|
* 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 [flag(NDR_PAHEX),v1_enum] enum {
|
|
DRSUAPI_OBJECTCLASS_top = 0x00010000
|
|
} drsuapi_DsObjectClassId;
|
|
|
|
typedef [flag(NDR_PAHEX),v1_enum,public] enum {
|
|
DRSUAPI_ATTRIBUTE_objectClass = 0x00000000,
|
|
DRSUAPI_ATTRIBUTE_description = 0x0000000d,
|
|
DRSUAPI_ATTRIBUTE_member = 0x0000001f,
|
|
DRSUAPI_ATTRIBUTE_hasMasterNCs = 0x0002000e,
|
|
DRSUAPI_ATTRIBUTE_invocationId = 0x00020073,
|
|
DRSUAPI_ATTRIBUTE_dMDLocation = 0x00020024,
|
|
DRSUAPI_ATTRIBUTE_ntSecurityDescriptor = 0x00020119,
|
|
DRSUAPI_ATTRIBUTE_objectSid = 0x00090092,
|
|
DRSUAPI_ATTRIBUTE_dBCSPwd = 0x00090037,/* lmPwdHash */
|
|
DRSUAPI_ATTRIBUTE_unicodePwd = 0x0009005a,/* ntPwdHash */
|
|
DRSUAPI_ATTRIBUTE_ntPwdHistory = 0x0009005e,
|
|
DRSUAPI_ATTRIBUTE_lmPwdHistory = 0x000900a0,
|
|
DRSUAPI_ATTRIBUTE_supplementalCredentials = 0x0009007d,
|
|
DRSUAPI_ATTRIBUTE_systemFlags = 0x00090177,
|
|
DRSUAPI_ATTRIBUTE_serverReference = 0x00090203,
|
|
DRSUAPI_ATTRIBUTE_objectCategory = 0x0009030e,
|
|
DRSUAPI_ATTRIBUTE_msDS_Behavior_Version = 0x000905b3,
|
|
DRSUAPI_ATTRIBUTE_msDS_KeyVersionNumber = 0x000906f6,
|
|
DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs = 0x0009071c,
|
|
DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs = 0x0009072c
|
|
} drsuapi_DsAttributeId;
|
|
|
|
/* Generic DATA_BLOB values */
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 length;
|
|
DATA_BLOB *data;
|
|
} drsuapi_DsAttributeValueDataBlob;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueDataBlob *values;
|
|
} drsuapi_DsAttributeValueCtrDataBlob;
|
|
|
|
/* objectClass values */
|
|
typedef struct {
|
|
[range(0,10485760),value(4)] uint32 __ndr_size;
|
|
[subcontext(4)] drsuapi_DsObjectClassId *objectClassId;
|
|
} drsuapi_DsAttributeValueObjectClassId;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueObjectClassId *values;
|
|
} drsuapi_DsAttributeValueCtrObjectClassId;
|
|
|
|
/* uint32 values */
|
|
typedef struct {
|
|
[range(0,10485760),value(4)] uint32 __ndr_size;
|
|
[subcontext(4)] uint32 *value;
|
|
} drsuapi_DsAttributeValueUINT32;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueUINT32 *values;
|
|
} drsuapi_DsAttributeValueCtrUINT32;
|
|
|
|
/* UnicodeString values */
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 length;
|
|
[subcontext(4)] nstring *string;
|
|
} drsuapi_DsAttributeValueUnicodeString;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueUnicodeString *values;
|
|
} drsuapi_DsAttributeValueCtrUnicodeString;
|
|
|
|
/* DN String values */
|
|
typedef [public,gensize] struct {
|
|
[value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size;
|
|
[value(ndr_size_dom_sid(&r->sid,ndr->flags))] uint32 __ndr_size_sid;
|
|
GUID guid;
|
|
dom_sid28 sid;
|
|
[flag(STR_SIZE4|STR_CHARLEN)] string dn;
|
|
} drsuapi_DsReplicaObjectIdentifier3;
|
|
|
|
typedef struct {
|
|
[range(0,10485760),value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(object, ndr->flags))] uint32 __ndr_size;
|
|
[subcontext(4),subcontext_size(__ndr_size)] drsuapi_DsReplicaObjectIdentifier3 *object;
|
|
} drsuapi_DsAttributeValueDNString;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueDNString *values;
|
|
} drsuapi_DsAttributeValueCtrDNString;
|
|
|
|
/* GUID values */
|
|
typedef struct {
|
|
[range(0,10485760),value(ndr_size_GUID(guid, ndr->flags))] uint32 __ndr_size;
|
|
[subcontext(4)] GUID *guid;
|
|
} drsuapi_DsAttributeValueGUID;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueGUID *values;
|
|
} drsuapi_DsAttributeValueCtrGUID;
|
|
|
|
/* SID values */
|
|
typedef struct {
|
|
[range(0,10485760),value(ndr_size_dom_sid(sid,ndr->flags))] uint32 __ndr_size;
|
|
[subcontext(4)] dom_sid *sid;
|
|
} drsuapi_DsAttributeValueSID;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueSID *values;
|
|
} drsuapi_DsAttributeValueCtrSID;
|
|
|
|
/* SecurityDescriptor values */
|
|
typedef struct {
|
|
[range(0,10485760),value(ndr_size_security_descriptor(sd,ndr->flags))] uint32 __ndr_size;
|
|
[subcontext(4)] security_descriptor *sd;
|
|
} drsuapi_DsAttributeValueSecurityDescriptor;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueSecurityDescriptor *values;
|
|
} drsuapi_DsAttributeValueCtrSecurityDescriptor;
|
|
|
|
/* NTTIME_1sec values */
|
|
typedef struct {
|
|
[range(0,10485760),value(8)] uint32 __ndr_size;
|
|
[subcontext(4)] NTTIME_1sec *time;
|
|
} drsuapi_DsAttributeValueNTTIME_1sec;
|
|
|
|
typedef struct {
|
|
[range(0,10485760)] uint32 num_values;
|
|
[size_is(num_values)] drsuapi_DsAttributeValueNTTIME_1sec *values;
|
|
} drsuapi_DsAttributeValueCtrNTTIME_1sec;
|
|
|
|
typedef [nodiscriminant] union {
|
|
[case(DRSUAPI_ATTRIBUTE_objectClass)] drsuapi_DsAttributeValueCtrObjectClassId object_class_id;
|
|
|
|
/* UINT32 */
|
|
[case(0x00020001)] drsuapi_DsAttributeValueCtrUINT32 uint32;
|
|
[case(0x0002004c)] drsuapi_DsAttributeValueCtrUINT32 uint32;
|
|
[case(0x000200a9)] drsuapi_DsAttributeValueCtrUINT32 uint32;
|
|
[case(0x00090177)] drsuapi_DsAttributeValueCtrUINT32 uint32;
|
|
[case(0x000905b3)] drsuapi_DsAttributeValueCtrUINT32 uint32;
|
|
|
|
/* GUID */
|
|
[case(DRSUAPI_ATTRIBUTE_invocationId)] drsuapi_DsAttributeValueCtrGUID guid;
|
|
|
|
/* SID */
|
|
[case(DRSUAPI_ATTRIBUTE_objectSid)] drsuapi_DsAttributeValueCtrSID sid;
|
|
|
|
/* SecurityDescriptor */
|
|
[case(DRSUAPI_ATTRIBUTE_ntSecurityDescriptor)] drsuapi_DsAttributeValueCtrSecurityDescriptor security_descriptor;
|
|
|
|
/* UnicodeString */
|
|
[case(DRSUAPI_ATTRIBUTE_description)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
|
|
[case(0x00090001)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
|
|
[case(0x000900dd)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
|
|
[case(0x0009037b)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
|
|
|
|
/* DN String */
|
|
[case(DRSUAPI_ATTRIBUTE_member)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(DRSUAPI_ATTRIBUTE_objectCategory)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x0002000e)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x00020024)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x00090171)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x0009071c)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x0009072c)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x0009026a)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
[case(0x00090203)] drsuapi_DsAttributeValueCtrDNString dn_string;
|
|
|
|
/* NTTIME_1sec */
|
|
[case(0x00020002)] drsuapi_DsAttributeValueCtrNTTIME_1sec nttime_1sec;
|
|
|
|
/* the default is the DATA_BLOB */
|
|
[default] drsuapi_DsAttributeValueCtrDataBlob data_blob;
|
|
} drsuapi_DsReplicaAttributeValueCtr;
|
|
|
|
typedef struct {
|
|
drsuapi_DsAttributeId attid;
|
|
[switch_is(attid)] drsuapi_DsReplicaAttributeValueCtr value_ctr;
|
|
} drsuapi_DsReplicaAttribute;
|
|
|
|
typedef struct {
|
|
[range(0,1048576)] uint32 num_attributes;
|
|
[size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes;
|
|
} drsuapi_DsReplicaAttributeCtr;
|
|
|
|
typedef [public] struct {
|
|
drsuapi_DsReplicaObjectIdentifier *identifier;
|
|
uint32 unknown1;
|
|
drsuapi_DsReplicaAttributeCtr attribute_ctr;
|
|
} drsuapi_DsReplicaObject;
|
|
|
|
typedef struct {
|
|
uint32 version;
|
|
NTTIME_1sec orginating_time;
|
|
GUID orginating_invocation_id;
|
|
hyper orginating_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;
|
|
uint32 unknown1;
|
|
GUID *parent_object_guid;
|
|
drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
|
|
} drsuapi_DsReplicaObjectListItemEx;
|
|
|
|
typedef [public,gensize] struct {
|
|
GUID guid1;
|
|
GUID guid2;
|
|
drsuapi_DsReplicaObjectIdentifier *naming_context;
|
|
drsuapi_DsReplicaHighWaterMark old_highwatermark;
|
|
drsuapi_DsReplicaHighWaterMark new_highwatermark;
|
|
drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
|
|
drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
|
|
uint32 unknown1;
|
|
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;
|
|
uint32 unknown4;
|
|
} drsuapi_DsGetNCChangesCtr1;
|
|
|
|
typedef struct {
|
|
drsuapi_DsReplicaObjectIdentifier *dn;
|
|
drsuapi_DsAttributeId attid;
|
|
/* this dn_string, depends on the attid, maybe could be another
|
|
* attribute syntax
|
|
*/
|
|
drsuapi_DsAttributeValueDNString dn_string;
|
|
uint32 u1;
|
|
NTTIME_1sec time1;
|
|
drsuapi_DsReplicaMetaData meta_data;
|
|
} drsuapi_DsReplicaLinkedAttribute;
|
|
|
|
typedef struct {
|
|
GUID guid1;
|
|
GUID guid2;
|
|
drsuapi_DsReplicaObjectIdentifier *naming_context;
|
|
drsuapi_DsReplicaHighWaterMark old_highwatermark;
|
|
drsuapi_DsReplicaHighWaterMark new_highwatermark;
|
|
drsuapi_DsReplicaCoursor2CtrEx *uptodateness_vector;
|
|
drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
|
|
uint32 unknown1;
|
|
uint32 unknown2;
|
|
uint32 unknown3;
|
|
drsuapi_DsReplicaObjectListItemEx *first_object;
|
|
uint32 unknown4;
|
|
uint32 unknown5;
|
|
uint32 unknown6;
|
|
[range(0,1048576)] uint32 linked_attributes_count;
|
|
[size_is(linked_attributes_count)] drsuapi_DsReplicaLinkedAttribute *linked_attributes;
|
|
uint32 unknown7;
|
|
} drsuapi_DsGetNCChangesCtr6;
|
|
|
|
typedef struct {
|
|
uint32 decompressed_length;
|
|
uint32 compressed_length;
|
|
[subcontext(4),subcontext_size(r->compressed_length),
|
|
compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
|
|
drsuapi_DsGetNCChangesCtr1 *ctr1;
|
|
} drsuapi_DsGetNCChangesMSZIPCtr1;
|
|
|
|
typedef struct {
|
|
uint32 decompressed_length;
|
|
uint32 compressed_length;
|
|
[subcontext(4),subcontext_size(r->compressed_length),
|
|
compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
|
|
drsuapi_DsGetNCChangesCtr6 *ctr6;
|
|
} drsuapi_DsGetNCChangesMSZIPCtr6;
|
|
|
|
typedef struct {
|
|
uint32 decompressed_length;
|
|
uint32 compressed_length;
|
|
[subcontext(4),subcontext_size(r->compressed_length),
|
|
compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length),
|
|
flag(NDR_REMAINING)] DATA_BLOB *decompressed;
|
|
} drsuapi_DsGetNCChangesXPRESSCtr1;
|
|
|
|
typedef struct {
|
|
uint32 decompressed_length;
|
|
uint32 compressed_length;
|
|
[subcontext(4),subcontext_size(r->compressed_length),
|
|
compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length),
|
|
flag(NDR_REMAINING)] DATA_BLOB *decompressed;
|
|
} 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 {
|
|
/*
|
|
* this is a bit ugly, as the compression depends on the flags
|
|
* in the DsBind(), but only w2k uses DsGetNCChangesReq5
|
|
* and will get DsGetNCChangesCtr2 replies, and w2k only knowns
|
|
* about MSZIP and level 1 replies
|
|
*/
|
|
[switch_is(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr;
|
|
} 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,out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsGetNCChangesRequest req,
|
|
[out,switch_is(level)] 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;
|
|
|
|
WERROR DRSUAPI_REPLICA_ADD();
|
|
|
|
/*****************/
|
|
/* Function 0x06 */
|
|
typedef bitmap {
|
|
DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = 0x00000001,
|
|
DRSUAPI_DS_REPLICA_DELETE_WRITEABLE = 0x00000002
|
|
/* TODO ... */
|
|
} drsuapi_DsReplicaDeleteOptions;
|
|
|
|
WERROR DRSUAPI_REPLICA_DEL();
|
|
|
|
/*****************/
|
|
/* Function 0x07 */
|
|
typedef bitmap {
|
|
DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION = 0x00000001,
|
|
DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE = 0x00000002
|
|
} drsuapi_DsReplicaModifyOptions;
|
|
|
|
WERROR DRSUAPI_REPLICA_MODIFY();
|
|
|
|
/*****************/
|
|
/* Function 0x08 */
|
|
WERROR DRSUAPI_VERIFY_NAMES();
|
|
|
|
/*****************/
|
|
/* Function 0x09 */
|
|
WERROR DRSUAPI_GET_MEMBERSHIPS();
|
|
|
|
/*****************/
|
|
/* Function 0x0a */
|
|
WERROR DRSUAPI_INTER_DOMAIN_MOVE();
|
|
|
|
/*****************/
|
|
/* Function 0x0b */
|
|
WERROR DRSUAPI_GET_NT4_CHANGELOG();
|
|
|
|
/*****************/
|
|
/* 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_UKNOWN = 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 unknown1; /* 0x000004e4 */
|
|
uint32 unknown2; /* 0x00000407 */
|
|
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, out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsNameRequest req,
|
|
[out,switch_is(level)] 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,out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsWriteAccountSpnRequest req,
|
|
[out,switch_is(level)] drsuapi_DsWriteAccountSpnResult res
|
|
);
|
|
|
|
/*****************/
|
|
/* Function 0x0e */
|
|
WERROR DRSUAPI_REMOVE_DS_SERVER();
|
|
|
|
/*****************/
|
|
/* Function 0x0f */
|
|
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 {
|
|
uint32 unknown1;
|
|
uint32 unknown2;
|
|
uint32 unknown3;
|
|
uint32 unknown4;
|
|
uint32 unknown5;
|
|
uint32 unknown6;
|
|
[charset(UTF16),string] uint16 *server_nt4_account;
|
|
} drsuapi_DsGetDCInfo01;
|
|
|
|
typedef struct {
|
|
[range(0,10000)] uint32 count;
|
|
[size_is(count)] drsuapi_DsGetDCInfo01 *array;
|
|
} drsuapi_DsGetDCInfoCtr01;
|
|
|
|
typedef [v1_enum] enum {
|
|
DRSUAPI_DC_INFO_CTR_1 = 1,
|
|
DRSUAPI_DC_INFO_CTR_2 = 2,
|
|
DRSUAPI_DC_INFO_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_01)] drsuapi_DsGetDCInfoCtr01 ctr01;
|
|
} drsuapi_DsGetDCInfoCtr;
|
|
|
|
WERROR drsuapi_DsGetDomainControllerInfo(
|
|
[in] policy_handle *bind_handle,
|
|
[in, out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
|
|
[out,switch_is(level)] drsuapi_DsGetDCInfoCtr ctr
|
|
);
|
|
|
|
/*****************/
|
|
/* Function 0x11 */
|
|
typedef [public,noprint] struct {
|
|
drsuapi_DsReplicaObjectListItem *next_object;
|
|
drsuapi_DsReplicaObject object;
|
|
} drsuapi_DsReplicaObjectListItem;
|
|
|
|
/*
|
|
* 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 error4;
|
|
[case(5)] drsuapi_DsAddEntryErrorInfoX error5;
|
|
[case(6)] drsuapi_DsAddEntryErrorInfoX error6;
|
|
[case(7)] drsuapi_DsAddEntryErrorInfoX error7;
|
|
} 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;
|
|
|
|
WERROR drsuapi_DsAddEntry(
|
|
[in] policy_handle *bind_handle,
|
|
[in,out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsAddEntryRequest req,
|
|
[out,switch_is(level)] drsuapi_DsAddEntryCtr ctr
|
|
);
|
|
|
|
/*****************/
|
|
/* Function 0x12 */
|
|
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_CURSURS05 = -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_DsReplicaCoursor array[];
|
|
} drsuapi_DsReplicaCoursorCtr;
|
|
|
|
typedef struct {
|
|
[charset(UTF16),string] uint16 *attribute_name;
|
|
uint32 version;
|
|
NTTIME originating_last_changed;
|
|
GUID originating_dsa_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 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;
|
|
uint32 value_length;
|
|
[size_is(value_length)] uint8 *value;
|
|
NTTIME deleted;
|
|
NTTIME created;
|
|
uint32 version;
|
|
NTTIME originating_last_changed;
|
|
GUID originating_dsa_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_DsReplicaCoursor2 array[];
|
|
} drsuapi_DsReplicaCoursor2Ctr;
|
|
|
|
typedef struct {
|
|
GUID source_dsa_invocation_id;
|
|
hyper highest_usn;
|
|
NTTIME last_sync_success;
|
|
[charset(UTF16),string] uint16 *source_dsa_obj_dn;
|
|
} drsuapi_DsReplicaCoursor3;
|
|
|
|
typedef struct {
|
|
uint32 count;
|
|
int32 enumeration_context;
|
|
[size_is(count)] drsuapi_DsReplicaCoursor3 array[];
|
|
} drsuapi_DsReplicaCoursor3Ctr;
|
|
|
|
typedef struct {
|
|
[charset(UTF16),string] uint16 *attribute_name;
|
|
uint32 version;
|
|
NTTIME originating_last_changed;
|
|
GUID originating_dsa_invocation_id;
|
|
hyper originating_usn;
|
|
hyper local_usn;
|
|
[charset(UTF16),string] uint16 *originating_dsa_obj_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;
|
|
uint32 value_length;
|
|
[size_is(value_length)] uint8 *value;
|
|
NTTIME deleted;
|
|
NTTIME created;
|
|
uint32 version;
|
|
NTTIME originating_last_changed;
|
|
GUID originating_dsa_invocation_id;
|
|
hyper originating_usn;
|
|
hyper local_usn;
|
|
[charset(UTF16),string] uint16 *originating_dsa_obj_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;
|
|
uint32 u4; /* flags? */
|
|
uint32 u5;
|
|
} 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_DsReplicaCoursorCtr *coursors;
|
|
[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_DsReplicaCoursor2Ctr *coursors2;
|
|
[case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCoursor3Ctr *coursors3;
|
|
[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_CURSURS05)] drsuapi_DsReplicaCoursorCtrEx *coursors05;
|
|
[case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06;
|
|
} drsuapi_DsReplicaInfo;
|
|
|
|
WERROR drsuapi_DsReplicaGetInfo(
|
|
[in] policy_handle *bind_handle,
|
|
[in] drsuapi_DsReplicaGetInfoLevel level,
|
|
[in,switch_is(level)] drsuapi_DsReplicaGetInfoRequest req,
|
|
[out] drsuapi_DsReplicaInfoType info_type,
|
|
[out,switch_is(info_type)] drsuapi_DsReplicaInfo info
|
|
);
|
|
|
|
/*****************/
|
|
/* Function 0x14 */
|
|
WERROR DRSUAPI_ADD_SID_HISTORY();
|
|
|
|
/*****************/
|
|
/* Function 0x15 */
|
|
WERROR DRSUAPI_GET_MEMBERSHIPS2();
|
|
|
|
/*****************/
|
|
/* Function 0x16 */
|
|
WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
|
|
|
|
/*****************/
|
|
/* Function 0x17 */
|
|
WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
|
|
|
|
/*****************/
|
|
/* Function 0x18 */
|
|
WERROR DRSUAPI_QUERY_SITES_BY_COST();
|
|
}
|