// Full IDL (ms-drsr.idl) has been taken from MSDN: // https://msdn.microsoft.com/en-us/library/cc228531.aspx // A few modifications have been made though: // - We do not use ms-dtyp.idl, because its definitions conflict with Windows header files. // Wtypesbase.idl is used instead. // - The RPC_UNICODE_STRING has been copied from ms-dtyp.idl. // - Custom drsr_imports.idl is used to import the ntdsapi.h file. // - Types that are already defined in ntdsapi.h have been dropped from this IDL in order to prevent redefinitions. // This IDL file corresponds to Windows Server 2016 TP4. Newer servers will add more calls, so this IDL will have to be updated. import "wtypesbase.idl"; import "drsr_imports.idl"; [ uuid (e3514235-4b06-11d1-ab04-00c04fc2dcd2), version(4.0), pointer_default (unique) ] interface drsuapi { // TODO: Maybe use "typedef UNICODE_STRING RPC_UNICODE_STRING" instead of RPC_UNICODE_STRING definition. typedef struct _RPC_UNICODE_STRING { unsigned short Length; unsigned short MaximumLength; [size_is(MaximumLength / 2), length_is(Length / 2)] WCHAR* Buffer; } RPC_UNICODE_STRING, *PRPC_UNICODE_STRING; 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 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 { [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[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; } 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[switch_type(DWORD)] union { [case(1)] DRS_MSG_REPSYNC_V1 V1; } DRS_MSG_REPSYNC; typedef struct { [ref] DSNAME *pNC; [ref] [string] char *pszDsaDest; UUID uuidDsaObjDest; ULONG ulOptions; } DRS_MSG_UPDREFS_V1; typedef[switch_type(DWORD)] union { [case(1)] DRS_MSG_UPDREFS_V1 V1; } 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[switch_type(DWORD)] union { [case(1)] DRS_MSG_REPADD_V1 V1; [case(2)] DRS_MSG_REPADD_V2 V2; } 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); }