mirror of
https://github.com/samba-team/samba.git
synced 2025-01-15 23:24:37 +03:00
0410300810
as w2k3 doesn't return it when you ask for we don't know the exact format, but we assume that it starts with a uint32 version and as this attribute is not replicated we can chosse our own version... metze (This used to be commit cf546b7c182f6a9b636023377b5260d155bc15dd)
1450 lines
48 KiB
Plaintext
1450 lines
48 KiB
Plaintext
#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
|
|
{
|
|
declare bitmap 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;
|
|
|
|
/* 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()
|
|
* 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";
|
|
|
|
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;
|
|
[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_DsReplicaCursor;
|
|
|
|
typedef struct {
|
|
uint32 u1;
|
|
uint32 u2;
|
|
[range(0,0x100000)] uint32 count;
|
|
uint32 u3;
|
|
[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 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 */
|
|
uint32 unknown4;
|
|
hyper h1;
|
|
} 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_currentValue = 0x0009001b,
|
|
DRSUAPI_ATTRIBUTE_objectSid = 0x00090092,
|
|
DRSUAPI_ATTRIBUTE_schemaIDGUID = 0x00090094,
|
|
DRSUAPI_ATTRIBUTE_dBCSPwd = 0x00090037,/* lmPwdHash */
|
|
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_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_isMemberOfPartialAttributeSet = 0x0009027f,
|
|
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 {
|
|
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 */
|
|
uint32 unknown4;
|
|
hyper h1;
|
|
uint32 unique_ptr1;
|
|
uint32 unique_ptr2;
|
|
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 {
|
|
uint32 u1;
|
|
uint32 u2;
|
|
[range(0,0x100000)] uint32 count;
|
|
uint32 u3;
|
|
[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;
|
|
[flag(STR_SIZE4|STR_CHARLEN)] string dn;
|
|
} 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;
|
|
[flag(STR_SIZE4|STR_CHARLEN)] string dn;
|
|
[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] 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 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;
|
|
uint32 total_object_count;
|
|
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;
|
|
|
|
/*
|
|
* 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 orginating_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;
|
|
uint32 total_object_count;
|
|
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;
|
|
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(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(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(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(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,ref] 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 */
|
|
|
|
/* 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;
|
|
|
|
WERROR drsuapi_DsGetMemberships(
|
|
[in] policy_handle *bind_handle,
|
|
[in,out] int32 level,
|
|
[in] [switch_is(level)] drsuapi_DsGetMembershipsRequest req,
|
|
[out] [switch_is(level)] drsuapi_DsGetMembershipsCtr ctr
|
|
);
|
|
|
|
/*****************/
|
|
/* Function 0x0a */
|
|
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;
|
|
|
|
WERROR drsuapi_DsGetNT4ChangeLog(
|
|
[in] policy_handle *bind_handle,
|
|
[in,out] uint32 level,
|
|
[in] [switch_is(level)] drsuapi_DsGetNT4ChangeLogRequest req,
|
|
[out] [switch_is(level)] 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_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 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, 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 */
|
|
typedef struct {
|
|
[charset(UTF16),string] uint16 *server_dn;
|
|
[charset(UTF16),string] uint16 *domain_dn;
|
|
uint32 unknown; /* 0x000000001 */
|
|
} drsuapi_DsRemoveDSServerRequest1;
|
|
|
|
typedef [switch_type(int32)] union {
|
|
[case(1)] drsuapi_DsRemoveDSServerRequest1 req1;
|
|
} drsuapi_DsRemoveDSServerRequest;
|
|
|
|
typedef struct {
|
|
WERROR status;
|
|
} drsuapi_DsRemoveDSServerResult1;
|
|
|
|
typedef [switch_type(int32)] union {
|
|
[case(1)] drsuapi_DsRemoveDSServerResult1 res1;
|
|
} drsuapi_DsRemoveDSServerResult;
|
|
|
|
WERROR drsuapi_DsRemoveDSServer(
|
|
[in] policy_handle *bind_handle,
|
|
[in,out] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsRemoveDSServerRequest req,
|
|
[out,switch_is(level)] drsuapi_DsRemoveDSServerResult res
|
|
);
|
|
|
|
/*****************/
|
|
/* 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;
|
|
|
|
/*
|
|
* 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_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_CONNECTION_CTR_01)] drsuapi_DsGetDCConnectionCtr01 ctr01;
|
|
} drsuapi_DsGetDCInfoCtr;
|
|
|
|
WERROR drsuapi_DsGetDomainControllerInfo(
|
|
[in] policy_handle *bind_handle,
|
|
[in] int32 level,
|
|
[in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
|
|
[out] int32 level_out,
|
|
[out,switch_is(level_out)] 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 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;
|
|
|
|
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_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_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;
|
|
[value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary;
|
|
DATA_BLOB *binary;
|
|
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_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_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;
|
|
[value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary;
|
|
DATA_BLOB *binary;
|
|
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;
|
|
[flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address;
|
|
uint32 u5; /* this is the same value the client used as u1 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,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 */
|
|
|
|
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,out] int32 level,
|
|
[in] [switch_is(level)] drsuapi_DsGetMemberships2Request req,
|
|
[out] [switch_is(level)] drsuapi_DsGetMemberships2Ctr ctr
|
|
);
|
|
|
|
|
|
/*****************/
|
|
/* Function 0x16 */
|
|
WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
|
|
|
|
/*****************/
|
|
/* Function 0x17 */
|
|
WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
|
|
|
|
/*****************/
|
|
/* Function 0x18 */
|
|
WERROR DRSUAPI_QUERY_SITES_BY_COST();
|
|
}
|