7 Appendix A: Full IDL

For ease of implementation, the full IDL is provided below, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A.

 import "ms-dtyp.idl";
 [
     uuid (e3514235-4b06-11d1-ab04-00c04fc2dcd2), version(4.0),
     pointer_default (unique)
 ]
 interface drsuapi
 {
  
 typedef LONGLONG DSTIME;
  
 typedef [context_handle] void * DRS_HANDLE;
  
 typedef struct {
     char Data[28];
 } NT4SID;
  
 typedef struct {
     unsigned long structLen;
     unsigned long SidLen;
     GUID Guid;
     NT4SID Sid;
     unsigned long NameLen;
     [range(0, 10485761)] [size_is(NameLen + 1)] WCHAR StringName[];
 } DSNAME;
  
 typedef LONGLONG USN;
  
 typedef struct {
     USN usnHighObjUpdate;
     USN usnReserved;
     USN usnHighPropUpdate;
 } USN_VECTOR;
  
 typedef struct {
     UUID uuidDsa;
     USN usnHighPropUpdate;
 } UPTODATE_CURSOR_V1;
  
 typedef struct {
     DWORD dwVersion;
     DWORD dwReserved1;
     [range(0,1048576)] DWORD cNumCursors;
     DWORD dwReserved2;
     [size_is(cNumCursors)] UPTODATE_CURSOR_V1 rgCursors[];
 } UPTODATE_VECTOR_V1_EXT;
  
 typedef struct {
     [range(0,10000)] unsigned int length;
     [size_is(length)] BYTE *elements;
 } OID_t;
  
 typedef struct {
     unsigned long ndx;
     OID_t prefix;
 } PrefixTableEntry;
  
 typedef struct {
     [range(0,1048576)] DWORD PrefixCount;
     [size_is(PrefixCount)] PrefixTableEntry *pPrefixEntry;
 } SCHEMA_PREFIX_TABLE;
  
 typedef ULONG ATTRTYP;
  
 typedef struct {
     DWORD dwVersion;
     DWORD dwReserved1;
     [range(1,1048576)] DWORD cAttrs;
     [size_is(cAttrs)] ATTRTYP rgPartialAttr[];
 } PARTIAL_ATTR_VECTOR_V1_EXT;
  
 typedef struct {
     [range(1,256)] unsigned long  mtx_namelen;
     [size_is(mtx_namelen)] char mtx_name[];
 } MTX_ADDR;
  
 typedef struct {
     [range(0,26214400)] ULONG valLen;
     [size_is(valLen)] UCHAR *pVal;
 } ATTRVAL;
  
 typedef struct {
     [range(0, 10485760)] ULONG valCount;
     [size_is(valCount)] ATTRVAL *pAVal;
 } ATTRVALBLOCK;
  
 typedef struct {
     ATTRTYP attrTyp;
     ATTRVALBLOCK AttrVal;
 } ATTR;
  
 typedef struct {
     [range(0, 1048576)] ULONG attrCount;
     [size_is(attrCount)] ATTR *pAttr;
 } ATTRBLOCK;
  
 typedef struct {
     DSNAME *pName;
     unsigned long ulFlags;
     ATTRBLOCK AttrBlock;
 } ENTINF;
  
 typedef struct {
     DWORD dwVersion;
     DSTIME timeChanged;
     UUID uuidDsaOriginating;
     USN usnOriginating;
 } PROPERTY_META_DATA_EXT;
  
 typedef struct {
     [range(0,1048576)] DWORD cNumProps;
     [size_is(cNumProps)] PROPERTY_META_DATA_EXT rgMetaData[];
 } PROPERTY_META_DATA_EXT_VECTOR;
  
 typedef struct REPLENTINFLIST {
     struct REPLENTINFLIST * pNextEntInf;
     ENTINF Entinf;
     BOOL fIsNCPrefix;
     UUID* pParentGuid;
     PROPERTY_META_DATA_EXT_VECTOR* pMetaDataExt;
 } REPLENTINFLIST;
  
 typedef struct {
     UUID uuidDsa;
     USN usnHighPropUpdate;
     DSTIME timeLastSyncSuccess;
 } UPTODATE_CURSOR_V2;
  
 typedef struct {
     DWORD dwVersion;
     DWORD dwReserved1;
     [range(0,1048576)] DWORD cNumCursors;
     DWORD dwReserved2;
     [size_is(cNumCursors)] UPTODATE_CURSOR_V2 rgCursors[];
 } UPTODATE_VECTOR_V2_EXT;
  
 typedef struct {
     DSTIME timeCreated;
     PROPERTY_META_DATA_EXT MetaData;
 } VALUE_META_DATA_EXT_V1;
  
 typedef struct {
     DSTIME timeCreated;
     PROPERTY_META_DATA_EXT MetaData;
     DWORD unused1;
     DWORD unused2;
     DWORD unused3;
     DSTIME timeExpired;
 } VALUE_META_DATA_EXT_V3;
  
 typedef struct {
     DSNAME *pObject;
     ATTRTYP attrTyp;
     ATTRVAL Aval;
     BOOL fIsPresent;
     VALUE_META_DATA_EXT_V1 MetaData;
 } REPLVALINF_V1;
  
 typedef struct {
     DSNAME *pObject;
     ATTRTYP attrTyp;
     ATTRVAL Aval;
     BOOL fIsPresent;
     VALUE_META_DATA_EXT_V3 MetaData;
 } REPLVALINF_V3;
  
 typedef struct {
     UCHAR rgTimes[84];
 } REPLTIMES;
  
 typedef struct {
     DWORD status;
     [string,unique] WCHAR *pDomain;
     [string,unique] WCHAR *pName;
 } DS_NAME_RESULT_ITEMW, *PDS_NAME_RESULT_ITEMW;
  
 typedef struct {
     DWORD cItems;
     [size_is(cItems)] PDS_NAME_RESULT_ITEMW rItems;
 } DS_NAME_RESULTW, *PDS_NAME_RESULTW;
  
 typedef struct {
     [string,unique] WCHAR *NetbiosName;
     [string,unique] WCHAR *DnsHostName;
     [string,unique] WCHAR *SiteName;
     [string,unique] WCHAR *ComputerObjectName;
     [string,unique] WCHAR *ServerObjectName;
     BOOL fIsPdc;
     BOOL fDsEnabled;
 } DS_DOMAIN_CONTROLLER_INFO_1W;
  
 typedef struct {
     [string,unique] WCHAR *NetbiosName;
     [string,unique] WCHAR *DnsHostName;
     [string,unique] WCHAR *SiteName;
     [string,unique] WCHAR *SiteObjectName;
     [string,unique] WCHAR *ComputerObjectName;
     [string,unique] WCHAR *ServerObjectName;
     [string,unique] WCHAR *NtdsDsaObjectName;
     BOOL fIsPdc;
     BOOL fDsEnabled;
     BOOL fIsGc;
     GUID SiteObjectGuid;
     GUID ComputerObjectGuid;
     GUID ServerObjectGuid;
     GUID NtdsDsaObjectGuid;
 } DS_DOMAIN_CONTROLLER_INFO_2W;
  
 typedef struct {
   [string, unique] WCHAR* NetbiosName;
   [string, unique] WCHAR* DnsHostName;
   [string, unique] WCHAR* SiteName;
   [string, unique] WCHAR* SiteObjectName;
   [string, unique] WCHAR* ComputerObjectName;
   [string, unique] WCHAR* ServerObjectName;
   [string, unique] WCHAR* NtdsDsaObjectName;
   BOOL fIsPdc;
   BOOL fDsEnabled;
   BOOL fIsGc;
   BOOL fIsRodc;
   GUID SiteObjectGuid;
   GUID ComputerObjectGuid;
   GUID ServerObjectGuid;
   GUID NtdsDsaObjectGuid;
 } DS_DOMAIN_CONTROLLER_INFO_3W;
  
 typedef struct {
     DWORD IPAddress;
     DWORD NotificationCount;
     DWORD secTimeConnected;
     DWORD Flags;
     DWORD TotalRequests;
     DWORD Reserved1;
     [string,unique] WCHAR *UserName;
 } DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW;
  
 typedef struct ENTINFLIST {
     struct ENTINFLIST *pNextEntInf;
     ENTINF Entinf;
 } ENTINFLIST;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
     ATTRTYP type;
     BOOL valReturned;
     ATTRVAL Val;
 } INTFORMPROB_DRS_WIRE_V1;
  
 typedef struct _PROBLEMLIST_DRS_WIRE_V1 {
     struct _PROBLEMLIST_DRS_WIRE_V1 *pNextProblem;
     INTFORMPROB_DRS_WIRE_V1 intprob;
 } PROBLEMLIST_DRS_WIRE_V1;
  
 typedef struct {
     DSNAME *pObject;
     ULONG count;
     PROBLEMLIST_DRS_WIRE_V1 FirstProblem;
 } ATRERR_DRS_WIRE_V1;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
     DSNAME *pMatched;
 } NAMERR_DRS_WIRE_V1;
  
 typedef struct {
     UCHAR nameRes;
     UCHAR unusedPad;
     USHORT nextRDN;
 } NAMERESOP_DRS_WIRE_V1;
  
 typedef struct _DSA_ADDRESS_LIST_DRS_WIRE_V1 {
     struct _DSA_ADDRESS_LIST_DRS_WIRE_V1 *pNextAddress;
     RPC_UNICODE_STRING *pAddress;
 } DSA_ADDRESS_LIST_DRS_WIRE_V1;
  
 typedef struct CONTREF_DRS_WIRE_V1 {
     DSNAME *pTarget;
     NAMERESOP_DRS_WIRE_V1 OpState;
     USHORT aliasRDN;
     USHORT RDNsInternal;
     USHORT refType;
     USHORT count;
     DSA_ADDRESS_LIST_DRS_WIRE_V1 *pDAL;
     struct CONTREF_DRS_WIRE_V1 *pNextContRef;
     BOOL bNewChoice;
     UCHAR choice;
 } CONTREF_DRS_WIRE_V1;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     CONTREF_DRS_WIRE_V1 Refer;
 } REFERR_DRS_WIRE_V1;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
 } SECERR_DRS_WIRE_V1;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
 } SVCERR_DRS_WIRE_V1;
  
 typedef struct {
     DWORD      dsid;
     DWORD      extendedErr;
     DWORD      extendedData;
     USHORT     problem;
 } UPDERR_DRS_WIRE_V1;
  
 typedef struct {
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
 } SYSERR_DRS_WIRE_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] ATRERR_DRS_WIRE_V1 AtrErr;
     [case(2)] NAMERR_DRS_WIRE_V1 NamErr;
     [case(3)] REFERR_DRS_WIRE_V1 RefErr;
     [case(4)] SECERR_DRS_WIRE_V1 SecErr;
     [case(5)] SVCERR_DRS_WIRE_V1 SvcErr;
     [case(6)] UPDERR_DRS_WIRE_V1 UpdErr;
     [case(7)] SYSERR_DRS_WIRE_V1 SysErr;
 } DIRERR_DRS_WIRE_V1;
  
 typedef struct {
     [string] LPWSTR pszNamingContext;
     [string] LPWSTR pszSourceDsaDN;
     [string] LPWSTR pszSourceDsaAddress;
     [string] LPWSTR pszAsyncIntersiteTransportDN;
     DWORD dwReplicaFlags;
     DWORD dwReserved;
     UUID uuidNamingContextObjGuid;
     UUID uuidSourceDsaObjGuid;
     UUID uuidSourceDsaInvocationID;
     UUID uuidAsyncIntersiteTransportObjGuid;
     USN usnLastObjChangeSynced;
     USN usnAttributeFilter;
     FILETIME ftimeLastSyncSuccess;
     FILETIME ftimeLastSyncAttempt;
     DWORD dwLastSyncResult;
     DWORD cNumConsecutiveSyncFailures;
 } DS_REPL_NEIGHBORW;
  
 typedef struct {
     DWORD cNumNeighbors;
     DWORD dwReserved;
     [size_is(cNumNeighbors)] DS_REPL_NEIGHBORW rgNeighbor[];
 } DS_REPL_NEIGHBORSW;
  
 typedef struct {
     UUID uuidSourceDsaInvocationID;
     USN usnAttributeFilter;
 } DS_REPL_CURSOR;
  
 typedef struct {
     DWORD       cNumCursors;
     DWORD       dwReserved;
     [size_is(cNumCursors)] DS_REPL_CURSOR rgCursor[];
 } DS_REPL_CURSORS;
  
 typedef struct {
     [string] LPWSTR pszAttributeName;
     DWORD dwVersion;
     FILETIME ftimeLastOriginatingChange;
     UUID uuidLastOriginatingDsaInvocationID;
     USN usnOriginatingChange;
     USN usnLocalChange;
 } DS_REPL_ATTR_META_DATA;
  
 typedef struct {
     [string] LPWSTR pszDsaDN;
     UUID uuidDsaObjGuid;
     FILETIME ftimeFirstFailure;
     DWORD cNumFailures;
     DWORD dwLastResult;
 } DS_REPL_KCC_DSA_FAILUREW;
  
 typedef struct {
     DWORD cNumEntries;
     DWORD dwReserved;
     [size_is(cNumEntries)] DS_REPL_KCC_DSA_FAILUREW rgDsaFailure[];
 } DS_REPL_KCC_DSA_FAILURESW;
  
 typedef struct {
     DWORD cNumEntries;
     DWORD dwReserved;
     [size_is(cNumEntries)] DS_REPL_ATTR_META_DATA rgMetaData[];
 } DS_REPL_OBJ_META_DATA;
  
 typedef enum {
     DS_REPL_OP_TYPE_SYNC = 0,
     DS_REPL_OP_TYPE_ADD,
     DS_REPL_OP_TYPE_DELETE,
     DS_REPL_OP_TYPE_MODIFY,
     DS_REPL_OP_TYPE_UPDATE_REFS
 } DS_REPL_OP_TYPE;
  
 typedef struct {
     FILETIME ftimeEnqueued;
     ULONG ulSerialNumber;
     ULONG ulPriority;
     DS_REPL_OP_TYPE OpType;
     ULONG ulOptions;
     [string] LPWSTR pszNamingContext;
     [string] LPWSTR pszDsaDN;
     [string] LPWSTR pszDsaAddress;
     UUID uuidNamingContextObjGuid;
     UUID uuidDsaObjGuid;
 } DS_REPL_OPW;
  
 typedef struct {
     FILETIME ftimeCurrentOpStarted;
     DWORD cNumPendingOps;
     [size_is(cNumPendingOps)] DS_REPL_OPW rgPendingOp[];
 } DS_REPL_PENDING_OPSW;
  
 typedef struct {
     [string] LPWSTR pszAttributeName;
     [string] LPWSTR pszObjectDn;
     DWORD cbData;
     [size_is(cbData), ptr] BYTE *pbData;
     FILETIME ftimeDeleted;
     FILETIME ftimeCreated;
     DWORD dwVersion;
     FILETIME ftimeLastOriginatingChange;
     UUID uuidLastOriginatingDsaInvocationID;
     USN usnOriginatingChange;
     USN usnLocalChange;
 } DS_REPL_VALUE_META_DATA;
  
 typedef struct {
     DWORD cNumEntries;
     DWORD dwEnumerationContext;
     [size_is(cNumEntries)] DS_REPL_VALUE_META_DATA rgMetaData[];
 } DS_REPL_ATTR_VALUE_META_DATA;
  
 typedef struct {
     UUID uuidSourceDsaInvocationID;
     USN usnAttributeFilter;
     FILETIME ftimeLastSyncSuccess;
 } DS_REPL_CURSOR_2;
  
 typedef struct {
     DWORD cNumCursors;
     DWORD dwEnumerationContext;
     [size_is(cNumCursors)] DS_REPL_CURSOR_2 rgCursor[];
 } DS_REPL_CURSORS_2;
  
 typedef struct {
     UUID uuidSourceDsaInvocationID;
     USN usnAttributeFilter;
     FILETIME ftimeLastSyncSuccess;
     [string] LPWSTR pszSourceDsaDN;
 } DS_REPL_CURSOR_3W;
  
 typedef struct {
     DWORD cNumCursors;
     DWORD dwEnumerationContext;
     [size_is(cNumCursors)] DS_REPL_CURSOR_3W rgCursor[];
 } DS_REPL_CURSORS_3W;
  
 typedef struct {
     [string] LPWSTR pszAttributeName;
     DWORD dwVersion;
     FILETIME ftimeLastOriginatingChange;
     UUID uuidLastOriginatingDsaInvocationID;
     USN usnOriginatingChange;
     USN usnLocalChange;
     [string] LPWSTR pszLastOriginatingDsaDN;
 } DS_REPL_ATTR_META_DATA_2;
  
 typedef struct {
     DWORD cNumEntries;
     DWORD dwReserved;
     [size_is(cNumEntries)] DS_REPL_ATTR_META_DATA_2 rgMetaData[];
 } DS_REPL_OBJ_META_DATA_2;
  
 typedef struct {
     [string] LPWSTR pszAttributeName;
     [string] LPWSTR pszObjectDn;
     DWORD cbData;
     [size_is(cbData), ptr] BYTE *pbData;
     FILETIME ftimeDeleted;
     FILETIME ftimeCreated;
     DWORD dwVersion;
     FILETIME ftimeLastOriginatingChange;
     UUID uuidLastOriginatingDsaInvocationID;
     USN usnOriginatingChange;
     USN usnLocalChange;
     [string] LPWSTR pszLastOriginatingDsaDN;
 } DS_REPL_VALUE_META_DATA_2;
  
 typedef struct {
     DWORD cNumEntries;
     DWORD dwEnumerationContext;
     [size_is(cNumEntries)] DS_REPL_VALUE_META_DATA_2 rgMetaData[];
 } DS_REPL_ATTR_VALUE_META_DATA_2;
  
 typedef struct {
     [range(1,10000)] DWORD cb;
     [size_is(cb)] BYTE rgb[];
 } DRS_EXTENSIONS;
  
 typedef struct {
     UUID uuidDsaObjDest;
     UUID uuidInvocIdSrc;
     [ref] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecDestV1;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrVecDestV1;
     SCHEMA_PREFIX_TABLE PrefixTableDest;
     ULONG ulFlags;
     ULONG cMaxObjects;
     ULONG cMaxBytes;
     ULONG ulExtendedOp;
 } DRS_MSG_GETCHGREQ_V3;
  
 typedef struct {
     UUID uuidTransportObj;
     [ref] MTX_ADDR *pmtxReturnAddress;
     DRS_MSG_GETCHGREQ_V3 V3;
 } DRS_MSG_GETCHGREQ_V4;
  
 typedef struct {
     UUID uuidTransportObj;
     [ref] MTX_ADDR *pmtxReturnAddress;
     DRS_MSG_GETCHGREQ_V3 V3;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx;
     SCHEMA_PREFIX_TABLE PrefixTableDest;
 } DRS_MSG_GETCHGREQ_V7;
  
 typedef struct {
     UUID uuidDsaObjSrc;
     UUID uuidInvocIdSrc;
     [unique] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     USN_VECTOR usnvecTo;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecSrcV1;
     SCHEMA_PREFIX_TABLE PrefixTableSrc;
     ULONG ulExtendedRet;
     ULONG cNumObjects;
     ULONG cNumBytes;
     [unique] REPLENTINFLIST* pObjects;
     BOOL fMoreData;
 } DRS_MSG_GETCHGREPLY_V1;
  
 typedef struct {
     UUID uuidDsaObjSrc;
     UUID uuidInvocIdSrc;
     [unique] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     USN_VECTOR usnvecTo;
     [unique] UPTODATE_VECTOR_V2_EXT *pUpToDateVecSrc;
     SCHEMA_PREFIX_TABLE PrefixTableSrc;
     ULONG ulExtendedRet;
     ULONG cNumObjects;
     ULONG cNumBytes;
     [unique] REPLENTINFLIST *pObjects;
     BOOL fMoreData;
     ULONG cNumNcSizeObjects;
     ULONG cNumNcSizeValues;
     [range(0,1048576)] DWORD cNumValues;
     [size_is(cNumValues)] REPLVALINF_V1 *rgValues;
     DWORD dwDRSError;
 } DRS_MSG_GETCHGREPLY_V6;
  
 typedef struct {
     UUID uuidDsaObjSrc;
     UUID uuidInvocIdSrc;
     [unique] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     USN_VECTOR usnvecTo;
     [unique] UPTODATE_VECTOR_V2_EXT *pUpToDateVecSrc;
     SCHEMA_PREFIX_TABLE PrefixTableSrc;
     ULONG ulExtendedRet;
     ULONG cNumObjects;
     ULONG cNumBytes;
     [unique] REPLENTINFLIST *pObjects;
     BOOL fMoreData;
     ULONG cNumNcSizeObjects;
     ULONG cNumNcSizeValues;
     [range(0,1048576)] DWORD cNumValues;
     [size_is(cNumValues)] REPLVALINF_V3 *rgValues;
     DWORD dwDRSError;
 } DRS_MSG_GETCHGREPLY_V9;
  
 typedef struct {
     DWORD cbUncompressedSize;
     DWORD cbCompressedSize;
     [size_is(cbCompressedSize)] BYTE *pbCompressedData;
 } DRS_COMPRESSED_BLOB;
  
 typedef struct {
     UUID uuidDsaObjDest;
     UUID uuidInvocIdSrc;
     [ref] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecDestV1;
     ULONG ulFlags;
     ULONG cMaxObjects;
     ULONG cMaxBytes;
     ULONG ulExtendedOp;
     ULARGE_INTEGER liFsmoInfo;
 } DRS_MSG_GETCHGREQ_V5;
  
 typedef struct {
     UUID uuidDsaObjDest;
     UUID uuidInvocIdSrc;
     [ref] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecDest;
     ULONG ulFlags;
     ULONG cMaxObjects;
     ULONG cMaxBytes;
     ULONG ulExtendedOp;
     ULARGE_INTEGER liFsmoInfo;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx;
     SCHEMA_PREFIX_TABLE PrefixTableDest;
 } DRS_MSG_GETCHGREQ_V8;
  
 typedef struct {
     UUID uuidDsaObjDest;
     UUID uuidInvocIdSrc;
     [ref] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecDest;
     ULONG ulFlags;
     ULONG cMaxObjects;
     ULONG cMaxBytes;
     ULONG ulExtendedOp;
     ULARGE_INTEGER liFsmoInfo;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx;
     SCHEMA_PREFIX_TABLE PrefixTableDest;
     ULONG ulMoreFlags;
 } DRS_MSG_GETCHGREQ_V10;
  
 typedef struct {
     ULONG ulVersion;
     ULONG cbByteBuffer;                            
     ULONGLONG ullPadding;                            
     [size_is(cbByteBuffer)] BYTE rgbBuffer[];        
 } VAR_SIZE_BUFFER_WITH_VERSION;
  
 typedef struct {
     UUID uuidDsaObjDest;
     UUID uuidInvocIdSrc;
     [ref] DSNAME *pNC;
     USN_VECTOR usnvecFrom;
     [unique] UPTODATE_VECTOR_V1_EXT *pUpToDateVecDest;
     ULONG ulFlags;
     ULONG cMaxObjects;
     ULONG cMaxBytes;
     ULONG ulExtendedOp;
     ULARGE_INTEGER liFsmoInfo;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet;
     [unique] PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx;
     SCHEMA_PREFIX_TABLE PrefixTableDest;
     ULONG ulMoreFlags;
     GUID correlationID;
     [unique] VAR_SIZE_BUFFER_WITH_VERSION *pReservedBuffer;
 } DRS_MSG_GETCHGREQ_V11;
  
 typedef [switch_type(DWORD)] union {
     [case(4)] DRS_MSG_GETCHGREQ_V4 V4;
     [case(5)] DRS_MSG_GETCHGREQ_V5 V5;
     [case(7)] DRS_MSG_GETCHGREQ_V7 V7;
     [case(8)] DRS_MSG_GETCHGREQ_V8 V8;
     [case(10)] DRS_MSG_GETCHGREQ_V10 V10;
     [case(11)] DRS_MSG_GETCHGREQ_V11 V11;
 } DRS_MSG_GETCHGREQ;
  
 typedef struct {
     DRS_COMPRESSED_BLOB CompressedV1;
 } DRS_MSG_GETCHGREPLY_V2;
  
 typedef enum {
     DRS_COMP_ALG_NONE = 0,
     DRS_COMP_ALG_UNUSED = 1,
     DRS_COMP_ALG_MSZIP = 2,
     DRS_COMP_ALG_WIN2K3 = 3
 } DRS_COMP_ALG_TYPE;
  
 typedef struct {
     DWORD               dwCompressedVersion;
     DRS_COMP_ALG_TYPE   CompressionAlg;
     DRS_COMPRESSED_BLOB CompressedAny;
 } DRS_MSG_GETCHGREPLY_V7;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_GETCHGREPLY_V1 V1;
     [case(2)] DRS_MSG_GETCHGREPLY_V2 V2;
     [case(6)] DRS_MSG_GETCHGREPLY_V6 V6;
     [case(7)] DRS_MSG_GETCHGREPLY_V7 V7;
     [case(9)] DRS_MSG_GETCHGREPLY_V9 V9;
 } DRS_MSG_GETCHGREPLY;
  
 typedef struct {
     [ref] DSNAME *pNC;
     UUID uuidDsaSrc;
     [unique] [string] char *pszDsaSrc;
     ULONG ulOptions;
 } DRS_MSG_REPSYNC_V1;
  
 typedef struct {
     [ref] DSNAME *pNC;
     UUID uuidDsaSrc;
     [unique] [string] char *pszDsaSrc;
     ULONG ulOptions;
     GUID correlationID;
     [unique] VAR_SIZE_BUFFER_WITH_VERSION *pReservedBuffer;
 } DRS_MSG_REPSYNC_V2;
  
 typedef [switch_type(DWORD)] union
 {
     [case(1)] DRS_MSG_REPSYNC_V1 V1;
     [case(2)] DRS_MSG_REPSYNC_V2 V2;
 } DRS_MSG_REPSYNC;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [ref] [string] char *pszDsaDest;
     UUID uuidDsaObjDest;
     ULONG ulOptions;
 } DRS_MSG_UPDREFS_V1;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [ref] [string] char *pszDsaDest;
     UUID uuidDsaObjDest;
     ULONG ulOptions;
     GUID correlationID;
     [unique] VAR_SIZE_BUFFER_WITH_VERSION* pReservedBuffer;
 } DRS_MSG_UPDREFS_V2;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_UPDREFS_V1 V1;
     [case(2)] DRS_MSG_UPDREFS_V2 V2;
 } DRS_MSG_UPDREFS;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [ref] [string] char *pszDsaSrc;
     REPLTIMES rtSchedule;
     ULONG ulOptions;
 } DRS_MSG_REPADD_V1;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [unique] DSNAME *pSourceDsaDN;
     [unique] DSNAME *pTransportDN;
     [ref] [string] char *pszSourceDsaAddress;
     REPLTIMES rtSchedule;
     ULONG ulOptions;
 } DRS_MSG_REPADD_V2;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [unique] DSNAME *pSourceDsaDN;
     [unique] DSNAME *pTransportDN;
     [ref] [string] char *pszSourceDsaAddress;
     REPLTIMES rtSchedule;
     ULONG ulOptions;
     GUID correlationID;
     [unique] VAR_SIZE_BUFFER_WITH_VERSION* pReservedBuffer;
 } DRS_MSG_REPADD_V3;
  
 typedef  [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPADD_V1 V1;
     [case(2)] DRS_MSG_REPADD_V2 V2;
     [case(3)] DRS_MSG_REPADD_V3 V3;
 } DRS_MSG_REPADD;
  
 typedef struct {
     [ref] DSNAME *pNC;
     [string] char *pszDsaSrc;
     ULONG ulOptions;
 } DRS_MSG_REPDEL_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPDEL_V1 V1;
 } DRS_MSG_REPDEL;
  
 typedef struct {
     [ref] DSNAME *pNC;
     UUID uuidSourceDRA;
     [unique, string] char *pszSourceDRA;
     REPLTIMES rtSchedule;
     ULONG ulReplicaFlags;
     ULONG ulModifyFields;
     ULONG ulOptions;
 } DRS_MSG_REPMOD_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPMOD_V1 V1;
 } DRS_MSG_REPMOD;
  
 typedef struct {
     DWORD dwFlags;
     [range(1,10000)] DWORD cNames;
     [size_is(cNames)] DSNAME **rpNames;
     ATTRBLOCK RequiredAttrs;
     SCHEMA_PREFIX_TABLE PrefixTable;
 } DRS_MSG_VERIFYREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_VERIFYREQ_V1 V1;
 } DRS_MSG_VERIFYREQ;
  
 typedef struct {
     DWORD error;
     [range(0,10000)] DWORD cNames;
     [size_is(cNames)] ENTINF *rpEntInf;
     SCHEMA_PREFIX_TABLE PrefixTable;
 } DRS_MSG_VERIFYREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_VERIFYREPLY_V1  V1;
 } DRS_MSG_VERIFYREPLY;
  
 typedef enum {
     RevMembGetGroupsForUser=1,
     RevMembGetAliasMembership,
     RevMembGetAccountGroups,
     RevMembGetResourceGroups,
     RevMembGetUniversalGroups,
     GroupMembersTransitive,
     RevMembGlobalGroupsNonTransitive
 } REVERSE_MEMBERSHIP_OPERATION_TYPE;
  
 typedef struct {
     [range(1,10000)] ULONG cDsNames;
     [size_is(cDsNames,)] DSNAME **ppDsNames;
     DWORD dwFlags;
     [range(1,7)] REVERSE_MEMBERSHIP_OPERATION_TYPE OperationType;
     DSNAME *pLimitingDomain;
 } DRS_MSG_REVMEMB_REQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REVMEMB_REQ_V1 V1;
 } DRS_MSG_REVMEMB_REQ;
  
 typedef struct {
     ULONG errCode;
     [range(0,10000)] ULONG cDsNames;
     [range(0,10000)] ULONG cSidHistory;
     [size_is(cDsNames,)] DSNAME **ppDsNames;
     [size_is(cDsNames)] DWORD *pAttributes;
     [size_is(cSidHistory,)] NT4SID **ppSidHistory;
 } DRS_MSG_REVMEMB_REPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REVMEMB_REPLY_V1 V1;
 } DRS_MSG_REVMEMB_REPLY;
  
 typedef struct {
     char *pSourceDSA;
     ENTINF *pObject;
     UUID *pParentUUID;
     SCHEMA_PREFIX_TABLE PrefixTable;
     ULONG ulFlags;
 } DRS_MSG_MOVEREQ_V1;
  
 typedef struct {
     [range(0,10000)] unsigned long cbBuffer;
     unsigned long BufferType;
     [size_is(cbBuffer)] BYTE *pvBuffer;
 } DRS_SecBuffer;
  
 typedef struct {
     unsigned long ulVersion;
     [range(0,10000)] unsigned long cBuffers;
     [size_is(cBuffers)] DRS_SecBuffer *Buffers;
 } DRS_SecBufferDesc;
  
 typedef struct {
     DSNAME *pSrcDSA;
     ENTINF *pSrcObject;
     DSNAME *pDstName;
     DSNAME *pExpectedTargetNC;
     DRS_SecBufferDesc *pClientCreds;
     SCHEMA_PREFIX_TABLE PrefixTable;
     ULONG ulFlags;
 } DRS_MSG_MOVEREQ_V2;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_MOVEREQ_V1 V1;
     [case(2)] DRS_MSG_MOVEREQ_V2 V2;
 } DRS_MSG_MOVEREQ;
  
 typedef struct {
     ENTINF **ppResult;
     SCHEMA_PREFIX_TABLE PrefixTable;
     ULONG *pError;
 } DRS_MSG_MOVEREPLY_V1;
  
 typedef struct {
     ULONG win32Error;
     [unique] DSNAME *pAddedName;
 } DRS_MSG_MOVEREPLY_V2;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_MOVEREPLY_V1 V1;
     [case(2)] DRS_MSG_MOVEREPLY_V2 V2;
 } DRS_MSG_MOVEREPLY;
  
 typedef struct {
     ULONG CodePage;
     ULONG LocaleId;
     DWORD dwFlags;
     DWORD formatOffered;
     DWORD formatDesired;
     [range(1,10000)] DWORD cNames;
     [string, size_is(cNames)] WCHAR **rpNames;
 } DRS_MSG_CRACKREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_CRACKREQ_V1 V1;
 } DRS_MSG_CRACKREQ;
  
 typedef struct {
     DS_NAME_RESULTW *pResult;
 } DRS_MSG_CRACKREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_CRACKREPLY_V1 V1;
 } DRS_MSG_CRACKREPLY;
  
 typedef struct {
     DWORD dwFlags;
     DWORD PreferredMaximumLength;
     [range(0,10485760)] DWORD cbRestart;
     [size_is(cbRestart)] BYTE *pRestart;
 } DRS_MSG_NT4_CHGLOG_REQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_NT4_CHGLOG_REQ_V1 V1;
 } DRS_MSG_NT4_CHGLOG_REQ;
  
 typedef struct {
     LARGE_INTEGER SamSerialNumber;
     LARGE_INTEGER SamCreationTime;
     LARGE_INTEGER BuiltinSerialNumber;
     LARGE_INTEGER BuiltinCreationTime;
     LARGE_INTEGER LsaSerialNumber;
     LARGE_INTEGER LsaCreationTime;
 } NT4_REPLICATION_STATE;
  
 typedef struct {
     [range(0,10485760)] DWORD cbRestart;
     [range(0,10485760)] DWORD cbLog;
     NT4_REPLICATION_STATE ReplicationState;
     DWORD ActualNtStatus;
     [size_is(cbRestart)] BYTE *pRestart;
     [size_is(cbLog)] BYTE *pLog;
 } DRS_MSG_NT4_CHGLOG_REPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_NT4_CHGLOG_REPLY_V1 V1;
 } DRS_MSG_NT4_CHGLOG_REPLY;
  
 typedef struct {
     DWORD operation;
     DWORD flags;
     [string] const WCHAR *pwszAccount;
     [range(0,10000)] DWORD cSPN;
     [string, size_is(cSPN)] const WCHAR **rpwszSPN;
 } DRS_MSG_SPNREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_SPNREQ_V1 V1;
 } DRS_MSG_SPNREQ;
  
 typedef struct {
     DWORD retVal;
 } DRS_MSG_SPNREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_SPNREPLY_V1 V1;
 } DRS_MSG_SPNREPLY;
  
 typedef struct {
     [string] LPWSTR ServerDN;
     [string] LPWSTR DomainDN;
     BOOL fCommit;
 } DRS_MSG_RMSVRREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_RMSVRREQ_V1 V1;
 } DRS_MSG_RMSVRREQ;
  
 typedef struct {
     BOOL fLastDcInDomain;
 } DRS_MSG_RMSVRREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_RMSVRREPLY_V1 V1;
 } DRS_MSG_RMSVRREPLY;
  
 typedef struct {
     [string] LPWSTR DomainDN;
 } DRS_MSG_RMDMNREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_RMDMNREQ_V1 V1;
 } DRS_MSG_RMDMNREQ;
  
 typedef struct {
     DWORD Reserved;
 } DRS_MSG_RMDMNREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_RMDMNREPLY_V1 V1;
 } DRS_MSG_RMDMNREPLY;
  
 typedef struct {
     [string] WCHAR *Domain;
     DWORD InfoLevel;
 } DRS_MSG_DCINFOREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_DCINFOREQ_V1 V1;
 } DRS_MSG_DCINFOREQ, *PDRS_MSG_DCINFOREQ;
  
 typedef struct {
     [range(0,10000)] DWORD cItems;
     [size_is(cItems)] DS_DOMAIN_CONTROLLER_INFO_1W *rItems;
 } DRS_MSG_DCINFOREPLY_V1;
  
 typedef struct {
     [range(0,10000)] DWORD cItems;
     [size_is(cItems)] DS_DOMAIN_CONTROLLER_INFO_2W *rItems;
 } DRS_MSG_DCINFOREPLY_V2;
  
 typedef struct {
   [range(0,10000)] DWORD cItems;
   [size_is(cItems)] DS_DOMAIN_CONTROLLER_INFO_3W* rItems;
 } DRS_MSG_DCINFOREPLY_V3;
  
 typedef struct {
     [range(0,10000)] DWORD cItems;
     [size_is(cItems)] DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW *rItems;
 } DRS_MSG_DCINFOREPLY_VFFFFFFFF;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_DCINFOREPLY_V1 V1;
     [case(2)] DRS_MSG_DCINFOREPLY_V2 V2;
     [case(3)] DRS_MSG_DCINFOREPLY_V3 V3;
     [case(0xFFFFFFFF)] DRS_MSG_DCINFOREPLY_VFFFFFFFF VFFFFFFFF;
 } DRS_MSG_DCINFOREPLY;
  
 typedef struct {
     [ref] DSNAME *pObject;
     ATTRBLOCK AttrBlock;
 } DRS_MSG_ADDENTRYREQ_V1;
  
 typedef struct {
     ENTINFLIST EntInfList;
 } DRS_MSG_ADDENTRYREQ_V2;
  
 typedef struct {
     ENTINFLIST EntInfList;
     DRS_SecBufferDesc *pClientCreds;
 } DRS_MSG_ADDENTRYREQ_V3;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDENTRYREQ_V1 V1;
     [case(2)] DRS_MSG_ADDENTRYREQ_V2 V2;
     [case(3)] DRS_MSG_ADDENTRYREQ_V3 V3;
 } DRS_MSG_ADDENTRYREQ;
  
 typedef struct {
     GUID Guid;
     NT4SID Sid;
     DWORD errCode;
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
 } DRS_MSG_ADDENTRYREPLY_V1;
  
 typedef struct {
     GUID objGuid;
     NT4SID objSid;
 } ADDENTRY_REPLY_INFO;
  
 typedef struct {
     [unique] DSNAME *pErrorObject;
     DWORD errCode;
     DWORD dsid;
     DWORD extendedErr;
     DWORD extendedData;
     USHORT problem;
     [range(0,10000)] ULONG cObjectsAdded;
     [size_is(cObjectsAdded)] ADDENTRY_REPLY_INFO *infoList;
 } DRS_MSG_ADDENTRYREPLY_V2;
  
 typedef struct {
     DWORD dwRepError;
     DWORD errCode;
     [switch_is(errCode)] DIRERR_DRS_WIRE_V1 *pErrInfo;
 } DRS_ERROR_DATA_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_ERROR_DATA_V1 V1;
 } DRS_ERROR_DATA;
  
 typedef struct {
     DSNAME *pdsErrObject;
     DWORD dwErrVer;
     [switch_is(dwErrVer)] DRS_ERROR_DATA *pErrData;
     [range(0,10000)] ULONG cObjectsAdded;
     [size_is(cObjectsAdded)] ADDENTRY_REPLY_INFO *infoList;
 } DRS_MSG_ADDENTRYREPLY_V3;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDENTRYREPLY_V1 V1;
     [case(2)] DRS_MSG_ADDENTRYREPLY_V2 V2;
     [case(3)] DRS_MSG_ADDENTRYREPLY_V3 V3;
 } DRS_MSG_ADDENTRYREPLY;
  
 typedef struct {
     DWORD dwTaskID;
     DWORD dwFlags;
 } DRS_MSG_KCC_EXECUTE_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_KCC_EXECUTE_V1 V1;
 } DRS_MSG_KCC_EXECUTE;
  
 typedef struct {
     ULONGLONG hCtx;
     LONG lReferenceCount;
     BOOL fIsBound;
     UUID uuidClient;
     DSTIME timeLastUsed;
     ULONG IPAddr;
     int pid;
 } DS_REPL_CLIENT_CONTEXT;
  
 typedef struct {
     [range(0,10000)] DWORD cNumContexts;
     DWORD dwReserved;
     [size_is(cNumContexts)] DS_REPL_CLIENT_CONTEXT rgContext[];
 } DS_REPL_CLIENT_CONTEXTS;
  
 typedef struct {
     [string] LPWSTR pszServerName;
     BOOL fIsHandleBound;
     BOOL fIsHandleFromCache;
     BOOL fIsHandleInCache;
     DWORD dwThreadId;
     DWORD dwBindingTimeoutMins;
     DSTIME dstimeCreated;
     DWORD dwCallType;
 } DS_REPL_SERVER_OUTGOING_CALL;
  
 typedef struct {
     [range(0, 256)] DWORD cNumCalls;
     DWORD dwReserved;
     [size_is(cNumCalls)] DS_REPL_SERVER_OUTGOING_CALL rgCall[];
 } DS_REPL_SERVER_OUTGOING_CALLS;
  
 typedef struct {
     DWORD InfoType;
     [string] LPWSTR pszObjectDN;
     UUID uuidSourceDsaObjGuid;
 } DRS_MSG_GETREPLINFO_REQ_V1;
  
 typedef struct {
     DWORD InfoType;
     [string] LPWSTR pszObjectDN;
     UUID uuidSourceDsaObjGuid;
     DWORD ulFlags;
     [string] LPWSTR pszAttributeName;
     [string] LPWSTR pszValueDN;
     DWORD dwEnumerationContext;
 } DRS_MSG_GETREPLINFO_REQ_V2;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_GETREPLINFO_REQ_V1 V1;
     [case(2)] DRS_MSG_GETREPLINFO_REQ_V2 V2;
 } DRS_MSG_GETREPLINFO_REQ;
  
 typedef [switch_type(DWORD)] union {
     [case(0)] DS_REPL_NEIGHBORSW *pNeighbors;
     [case(1)] DS_REPL_CURSORS *pCursors;
     [case(2)] DS_REPL_OBJ_META_DATA *pObjMetaData;
     [case(3)] DS_REPL_KCC_DSA_FAILURESW *pConnectFailures;
     [case(4)] DS_REPL_KCC_DSA_FAILURESW *pLinkFailures;
     [case(5)] DS_REPL_PENDING_OPSW *pPendingOps;
     [case(6)] DS_REPL_ATTR_VALUE_META_DATA *pAttrValueMetaData;
     [case(7)] DS_REPL_CURSORS_2 *pCursors2;
     [case(8)] DS_REPL_CURSORS_3W *pCursors3;
     [case(9)] DS_REPL_OBJ_META_DATA_2 *pObjMetaData2;
     [case(10)] DS_REPL_ATTR_VALUE_META_DATA_2 *pAttrValueMetaData2;
     [case(0xFFFFFFFA)]
         DS_REPL_SERVER_OUTGOING_CALLS *pServerOutgoingCalls;
     [case(0xFFFFFFFB)] UPTODATE_VECTOR_V1_EXT *pUpToDateVec;
     [case(0xFFFFFFFC)] DS_REPL_CLIENT_CONTEXTS *pClientContexts;
     [case(0xFFFFFFFE)] DS_REPL_NEIGHBORSW *pRepsTo;
 } DRS_MSG_GETREPLINFO_REPLY;
  
 typedef struct {
     DWORD Flags;
     [string] WCHAR *SrcDomain;
     [string] WCHAR *SrcPrincipal;
     [string, ptr] WCHAR *SrcDomainController;
     [range(0,256)] DWORD SrcCredsUserLength;
     [size_is(SrcCredsUserLength)] WCHAR *SrcCredsUser;
     [range(0,256)] DWORD SrcCredsDomainLength;
     [size_is(SrcCredsDomainLength)] WCHAR *SrcCredsDomain;
     [range(0,256)] DWORD SrcCredsPasswordLength;
     [size_is(SrcCredsPasswordLength)] WCHAR *SrcCredsPassword;
     [string] WCHAR *DstDomain;
     [string] WCHAR *DstPrincipal;
 } DRS_MSG_ADDSIDREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDSIDREQ_V1 V1;
 } DRS_MSG_ADDSIDREQ;
  
 typedef struct {
     DWORD dwWin32Error;
 } DRS_MSG_ADDSIDREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDSIDREPLY_V1 V1;
 } DRS_MSG_ADDSIDREPLY;
  
 typedef struct {
     [range(1, 10000)] ULONG Count;
     [size_is(Count)] DRS_MSG_REVMEMB_REQ_V1 *Requests;
 } DRS_MSG_GETMEMBERSHIPS2_REQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_GETMEMBERSHIPS2_REQ_V1 V1;
 } DRS_MSG_GETMEMBERSHIPS2_REQ;
  
 typedef struct {
     [range(0, 10000)] ULONG Count;
     [size_is(Count)] DRS_MSG_REVMEMB_REPLY_V1 *Replies;
 } DRS_MSG_GETMEMBERSHIPS2_REPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_GETMEMBERSHIPS2_REPLY_V1 V1;
 } DRS_MSG_GETMEMBERSHIPS2_REPLY;
  
 typedef struct {
     [ref] DSNAME *pNC;
     UUID uuidDsaSrc;
     ULONG ulOptions;
 } DRS_MSG_REPVERIFYOBJ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPVERIFYOBJ_V1 V1;
 } DRS_MSG_REPVERIFYOBJ;
  
 typedef struct {
     UUID guidStart;
     DWORD cGuids;
     DSNAME *pNC;
     UPTODATE_VECTOR_V1_EXT *pUpToDateVecCommonV1;
     UCHAR Md5Digest[16];
 } DRS_MSG_EXISTREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_EXISTREQ_V1 V1;
 } DRS_MSG_EXISTREQ;
  
 typedef struct {
     DWORD dwStatusFlags;
     [range(0,10485760)] DWORD cNumGuids;
     [size_is(cNumGuids)] UUID *rgGuids;
 } DRS_MSG_EXISTREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_EXISTREPLY_V1 V1;
 } DRS_MSG_EXISTREPLY;
  
 typedef struct {
     [string] const WCHAR *pwszFromSite;
     [range(1,10000)] DWORD cToSites;
     [string, size_is(cToSites)] WCHAR **rgszToSites;
     DWORD dwFlags;
 } DRS_MSG_QUERYSITESREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_QUERYSITESREQ_V1 V1;
 } DRS_MSG_QUERYSITESREQ;
  
 typedef struct {
     DWORD dwErrorCode;
     DWORD dwCost;
 } DRS_MSG_QUERYSITESREPLYELEMENT_V1;
  
 typedef struct {
     [range(0,10000)] DWORD cToSites;
     [size_is(cToSites)] DRS_MSG_QUERYSITESREPLYELEMENT_V1 *rgCostInfo;
     DWORD dwFlags;
 } DRS_MSG_QUERYSITESREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_QUERYSITESREPLY_V1 V1;
 } DRS_MSG_QUERYSITESREPLY;
  
 typedef struct {
     DWORD dwReserved;
 } DRS_MSG_INIT_DEMOTIONREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_INIT_DEMOTIONREQ_V1 V1;
 } DRS_MSG_INIT_DEMOTIONREQ;
  
 typedef struct {
     DWORD dwOpError;
 } DRS_MSG_INIT_DEMOTIONREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_INIT_DEMOTIONREPLY_V1 V1;
 } DRS_MSG_INIT_DEMOTIONREPLY;
  
 typedef struct {
     DWORD dwFlags;
     UUID uuidHelperDest;
     [ref] DSNAME* pNC;
 } DRS_MSG_REPLICA_DEMOTIONREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPLICA_DEMOTIONREQ_V1 V1;
 } DRS_MSG_REPLICA_DEMOTIONREQ;
  
 typedef struct {
     DWORD dwOpError;
 } DRS_MSG_REPLICA_DEMOTIONREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_REPLICA_DEMOTIONREPLY_V1 V1;
 } DRS_MSG_REPLICA_DEMOTIONREPLY;
  
 typedef struct {
     DWORD dwOperations;
     UUID uuidHelperDest;
     [string] LPWSTR szScriptBase;
 } DRS_MSG_FINISH_DEMOTIONREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_FINISH_DEMOTIONREQ_V1 V1;
 } DRS_MSG_FINISH_DEMOTIONREQ;
  
 typedef struct {
     DWORD dwOperationsDone;
     DWORD dwOpFailed;
     DWORD dwOpError;
 } DRS_MSG_FINISH_DEMOTIONREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_FINISH_DEMOTIONREPLY_V1 V1;
 } DRS_MSG_FINISH_DEMOTIONREPLY;
  
 typedef struct {
     [string] const WCHAR *pwszCloneDCName;
     [string] const WCHAR *pwszSite; 
 } DRS_MSG_ADDCLONEDCREQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDCLONEDCREQ_V1 V1;
 } DRS_MSG_ADDCLONEDCREQ;
  
 typedef struct {
     [string] WCHAR *pwszCloneDCName;
     [string] WCHAR *pwszSite;
     [range(0,1024)] DWORD cPasswordLength;
     [size_is(cPasswordLength)] WCHAR *pwsNewDCAccountPassword;
 } DRS_MSG_ADDCLONEDCREPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DRS_MSG_ADDCLONEDCREPLY_V1 V1;
 } DRS_MSG_ADDCLONEDCREPLY;
 
 typedef struct _DRS_MSG_WRITENGCKEYREQ_V1{
   [string] const WCHAR* pwszAccount;
   [range(0,0xFFFF)] DWORD cNgcKey;
   [size_is(cNgcKey)] UCHAR * pNgcKey;
 } DRS_MSG_WRITENGCKEYREQ_V1;
  
 typedef 
 [switch_type(DWORD)] 
 union {
   [case(1)] 
     DRS_MSG_WRITENGCKEYREQ_V1 V1;
 } DRS_MSG_WRITENGCKEYREQ;
  
 typedef struct _DRS_MSG_WRITENGCKEYREPLY_V1{
   DWORD retVal;
 } DRS_MSG_WRITENGCKEYREPLY_V1;
  
 typedef 
 [switch_type(DWORD)] 
 union {
   [case(1)] 
     DRS_MSG_WRITENGCKEYREPLY_V1 V1;
 } DRS_MSG_WRITENGCKEYREPLY;
  
 typedef struct _DRS_MSG_READNGCKEYREQ_V1{
   [string] const WCHAR* pwszAccount;
 } DRS_MSG_READNGCKEYREQ_V1;
  
 typedef 
 [switch_type(DWORD)] 
 union {
   [case(1)] 
     DRS_MSG_READNGCKEYREQ_V1 V1;
 } DRS_MSG_READNGCKEYREQ;
  
 typedef struct _DRS_MSG_READNGCKEYREPLY_V1{
   DWORD retVal;
   [range(0,0xFFFF)] DWORD cNgcKey;
   [size_is(cNgcKey)] UCHAR * pNgcKey;
 } DRS_MSG_READNGCKEYREPLY_V1;
  
 typedef 
 [switch_type(DWORD)] 
 union {
   [case(1)] 
     DRS_MSG_READNGCKEYREPLY_V1 V1;
 } DRS_MSG_READNGCKEYREPLY;
  
 
 // opnum 0
 ULONG
 IDL_DRSBind(
     [in] handle_t rpc_handle,
     [in, unique] UUID *puuidClientDsa,
     [in, unique] DRS_EXTENSIONS *pextClient,
     [out] DRS_EXTENSIONS **ppextServer,
     [out, ref] DRS_HANDLE *phDrs);
  
 // opnum 1
 ULONG
 IDL_DRSUnbind(
     [in, out, ref] DRS_HANDLE *phDrs);
  
 // opnum 2
 ULONG
 IDL_DRSReplicaSync(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_REPSYNC *pmsgSync);
  
 // opnum 3
 ULONG
 IDL_DRSGetNCChanges(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_GETCHGREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_GETCHGREPLY *pmsgOut);
  
 // opnum 4
 ULONG
 IDL_DRSUpdateRefs(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_UPDREFS *pmsgUpdRefs);
  
 // opnum 5
 ULONG
 IDL_DRSReplicaAdd(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_REPADD *pmsgAdd);
  
 // opnum 6
 ULONG
 IDL_DRSReplicaDel(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_REPDEL *pmsgDel);
  
 // opnum 7
 ULONG
 IDL_DRSReplicaModify(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_REPMOD *pmsgMod);
  
 // opnum 8
 ULONG
 IDL_DRSVerifyNames(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_VERIFYREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_VERIFYREPLY *pmsgOut);
  
 // opnum 9
 ULONG
 IDL_DRSGetMemberships(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_REVMEMB_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
          DRS_MSG_REVMEMB_REPLY *pmsgOut);
  
 // opnum 10
 ULONG
 IDL_DRSInterDomainMove(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_MOVEREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)] DRS_MSG_MOVEREPLY *pmsgOut);
  
 // opnum 11
 ULONG
 IDL_DRSGetNT4ChangeLog(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_NT4_CHGLOG_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_NT4_CHGLOG_REPLY *pmsgOut);
  
 // opnum 12
 ULONG
 IDL_DRSCrackNames(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_CRACKREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_CRACKREPLY *pmsgOut);
  
 // opnum 13
 ULONG
 IDL_DRSWriteSPN(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_SPNREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)] DRS_MSG_SPNREPLY *pmsgOut);
  
 // opnum 14
 ULONG
 IDL_DRSRemoveDsServer(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_RMSVRREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_RMSVRREPLY *pmsgOut);
  
 // opnum 15
 ULONG
 IDL_DRSRemoveDsDomain(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_RMDMNREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_RMDMNREPLY *pmsgOut);
  
 // opnum 16
 ULONG
 IDL_DRSDomainControllerInfo(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_DCINFOREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_DCINFOREPLY *pmsgOut);
  
 // opnum 17
 ULONG
 IDL_DRSAddEntry(
     [in, ref]  DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]  DRS_MSG_ADDENTRYREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_ADDENTRYREPLY *pmsgOut);
  
 // opnum 18
 ULONG
 IDL_DRSExecuteKCC(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_KCC_EXECUTE *pmsgIn);
  
 // opnum 19
 ULONG
 IDL_DRSGetReplInfo(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_GETREPLINFO_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_GETREPLINFO_REPLY *pmsgOut);
  
 // opnum 20
 ULONG
 IDL_DRSAddSidHistory(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_ADDSIDREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_ADDSIDREPLY *pmsgOut);
  
 // opnum 21
 ULONG
 IDL_DRSGetMemberships2(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]
         DRS_MSG_GETMEMBERSHIPS2_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_GETMEMBERSHIPS2_REPLY *pmsgOut);
  
 // opnum 22
 ULONG
 IDL_DRSReplicaVerifyObjects(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwVersion,
     [in, ref, switch_is(dwVersion)] DRS_MSG_REPVERIFYOBJ *pmsgVerify);
  
 // opnum 23
 ULONG
 IDL_DRSGetObjectExistence (
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_EXISTREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_EXISTREPLY *pmsgOut);
  
 // opnum 24
 ULONG
 IDL_DRSQuerySitesByCost(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_QUERYSITESREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_QUERYSITESREPLY *pmsgOut);
  
 // opnum 25
 ULONG
 IDL_DRSInitDemotion(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]
         DRS_MSG_INIT_DEMOTIONREQ* pmsgIn,
     [out, ref] DWORD* pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_INIT_DEMOTIONREPLY* pmsgOut);
  
 // opnum 26
 ULONG
 IDL_DRSReplicaDemotion(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] 
         DRS_MSG_REPLICA_DEMOTIONREQ* pmsgIn,
     [out, ref] DWORD* pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)] 
         DRS_MSG_REPLICA_DEMOTIONREPLY* pmsgOut);
  
 // opnum 27
 ULONG
 IDL_DRSFinishDemotion(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] 
         DRS_MSG_FINISH_DEMOTIONREQ* pmsgIn,
     [out, ref] DWORD* pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)] 
         DRS_MSG_FINISH_DEMOTIONREPLY* pmsgOut);
  
  
 // opnum 28
 ULONG
 IDL_DRSAddCloneDC (
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]
         DRS_MSG_ADDCLONEDCREQ* pmsgIn,
     [out, ref] DWORD * pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_ADDCLONEDCREPLY* pmsgOut
  );
  
  // opnum 29
  ULONG
  IDL_DRSWriteNgcKey(
    [in, ref] DRS_HANDLE hDrs,
    [in] DWORD dwInVersion,
    [in, ref, switch_is(dwInVersion)] 
      DRS_MSG_WRITENGCKEYREQ* pmsgIn,
    [out, ref] DWORD* pdwOutVersion,
    [out, ref, switch_is(*pdwOutVersion)] 
      DRS_MSG_WRITENGCKEYREPLY* pmsgOut
  );
  
  // opnum 30
  ULONG
  IDL_DRSReadNgcKey(
    [in, ref] DRS_HANDLE hDrs,
    [in] DWORD dwInVersion,
    [in, ref, switch_is(dwInVersion)] 
      DRS_MSG_READNGCKEYREQ* pmsgIn,
    [out, ref] DWORD* pdwOutVersion,
    [out, ref, switch_is(*pdwOutVersion)] 
      DRS_MSG_READNGCKEYREPLY* pmsgOut
  );
  
 }
  
  
 // This is the "real" ntdscript interface.
 [
     uuid(7c44d7d4-31d5-424c-bd5e-2b3e1f323d22), version(1.0),
     pointer_default (unique)
 ]
 interface dsaop
 {
  
 typedef struct {
     DWORD Flags;
     [range(1,1024)] DWORD cbPassword;
     [size_is(cbPassword)] BYTE *pbPassword;
 } DSA_MSG_EXECUTE_SCRIPT_REQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DSA_MSG_EXECUTE_SCRIPT_REQ_V1 V1;
 } DSA_MSG_EXECUTE_SCRIPT_REQ;
  
 typedef struct {
     DWORD dwOperationStatus;
     [string] LPWSTR pwErrMessage;
 } DSA_MSG_EXECUTE_SCRIPT_REPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DSA_MSG_EXECUTE_SCRIPT_REPLY_V1 V1;
 } DSA_MSG_EXECUTE_SCRIPT_REPLY;
  
 typedef struct {
     DWORD Reserved;
 } DSA_MSG_PREPARE_SCRIPT_REQ_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DSA_MSG_PREPARE_SCRIPT_REQ_V1 V1;
 } DSA_MSG_PREPARE_SCRIPT_REQ;
  
 typedef struct {
     DWORD dwOperationStatus;
     [string] LPWSTR pwErrMessage;
     [range(0,1024)] DWORD cbPassword;
     [size_is(cbPassword)] BYTE *pbPassword;
     [range(0,10485760)] DWORD cbHashBody;
     [size_is(cbHashBody)] BYTE *pbHashBody;
     [range(0,10485760)] DWORD cbHashSignature;
     [size_is(cbHashSignature)] BYTE *pbHashSignature;
 } DSA_MSG_PREPARE_SCRIPT_REPLY_V1;
  
 typedef [switch_type(DWORD)] union {
     [case(1)] DSA_MSG_PREPARE_SCRIPT_REPLY_V1 V1;
 } DSA_MSG_PREPARE_SCRIPT_REPLY;
  
 // opnum 0
 ULONG
 IDL_DSAPrepareScript(
     [in] handle_t hRpc,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]
         DSA_MSG_PREPARE_SCRIPT_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DSA_MSG_PREPARE_SCRIPT_REPLY *pmsgOut);
  
 // opnum 1
 ULONG
 IDL_DSAExecuteScript(
     [in] handle_t hRpc,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)]
         DSA_MSG_EXECUTE_SCRIPT_REQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DSA_MSG_EXECUTE_SCRIPT_REPLY *pmsgOut);
  
 }